0ll Опубликовано 21 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 апреля, 2015 Нужна помощь в определении двух одинаковых значений High на протяжении 10 баров.Всё-таки Вы не программист... у программистов должны возникать вопросы достаточности условий:1. цены редко совпадают с точностью до 5 знака - допуск даёте?2. нашли 2 одинаковых хая, но они не максимальные - Вам подойдёт? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Crik1978 Опубликовано 21 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 апреля, 2015 Нужна помощь в определении двух одинаковых значений High на протяжении 10 баров.Всё-таки Вы не программист... у программистов должны возникать вопросы достаточности условий:1. цены редко совпадают с точностью до 5 знака - допуск даёте?2. нашли 2 одинаковых хая, но они не максимальные - Вам подойдёт? Да, я не программист. Только учусь.Цены бывают что совпадают, причем один в один (на 4-х знаке).самое главное чтобы хаи были равны, и не важно что они будут не максимальные. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 21 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 апреля, 2015 Crik1978 самый простой вариант (чтоб не делать вложенный цикл): записать 10 значений в массив и отсортировать (в любом направлении) потом в цикле проверять 2 соседних значения. Набросайте черновик кода, а я подправлю (если что). Ссылка на сообщение Поделиться на другие сайты More sharing options...
sanyasan Опубликовано 21 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 апреля, 2015 sanyasan, тогда надо бы последнюю вашу версию посмотреть полностью. Посмотрите пожалуйста.Experts_TMA_middle.ex4Experts_TMA_middle.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Crik1978 Опубликовано 21 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 апреля, 2015 Crik1978 самый простой вариант (чтоб не делать вложенный цикл): записать 10 значений в массив и отсортировать (в любом направлении) потом в цикле проверять 2 соседних значения. Набросайте черновик кода, а я подправлю (если что). а если сравнивать не только соседние, а например первый и последний Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 21 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 апреля, 2015 а если сравнивать не только соседние, а например первый и последнийПосле сортировки первый и последний будут с наибольшей разницей (мин и мах).Вы знаете что такое сортировка? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Crik1978 Опубликовано 21 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 апреля, 2015 а если сравнивать не только соседние, а например первый и последнийПосле сортировки первый и последний будут с наибольшей разницей (мин и мах).Вы знаете что такое сортировка? :-) нет, не знаюДобавлено: 21-04-2015 13:05:33 Crik1978 самый простой вариант (чтоб не делать вложенный цикл): записать 10 значений в массив и отсортировать (в любом направлении) потом в цикле проверять 2 соседних значения. Набросайте черновик кода, а я подправлю (если что). а если сравнивать не только соседние, а например первый и последний и по количеству баров, если не 10 а 80...... Изменено 21 апреля, 2015 пользователем Crik1978 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 21 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 апреля, 2015 Crik1978 если не знаете что такое сортировка, то делайте через вложенные циклы:bar_count = 80;for (i=1; i { for (j=i+1; j { if (High[ i ] == High[j]) { ... //Здесь Ваш код - нашли одинаковые хаи. Продумайте вариант если одинаковых хаев будет несколько пар break; // используйте это для прекращения поиска если достаточно 1 пары } }} Изменено 21 апреля, 2015 пользователем 0ll Ссылка на сообщение Поделиться на другие сайты More sharing options...
Crik1978 Опубликовано 21 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 апреля, 2015 Crik1978 если не знаете что такое сортировка, то делайте через вложенные циклы:bar_count = 80;for (i=1; i { for (j=i+1; j { if (High == High[j]) { ... //Здесь Ваш код - нашли одинаковые хаи. Продумайте вариант если одинаковых хаев будет несколько пар break; // используйте это для прекращения поиска если достаточно 1 пары } }} Спасибо.а по сортировке, где можно почитать? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 21 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 апреля, 2015 а по сортировке, где можно почитать? Сортировка массива читать здесь. Что такое сортировка вообще - гугл. Ссылка на сообщение Поделиться на другие сайты More sharing options...
chistaia-rodina Опубликовано 21 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 21 апреля, 2015 sanyasan, посмотрел, с кодом всё в порядке и отрабатывает он без глюков, а именно так как и задумано. Проблема в другом, по вашему скрину особенно хорошо это видно, если свеча, после закрытой за каналом, такого большого размера и находится над нижним краем канала, то всё это время условие для открытия сделки сохраняется, поэтому она будет без конца открываться, собирая стопы и профиты, пока не переключится на следующую. Аналогично и зеркально для противоположного направления. Кстати, надо было используемый индикатор тоже приложить, у меня его нет, но я просто прописал другой канал, так что не важно, принцип тот же. Если нужно открытие по одной сделке за одно совпадение условия, то предлагаю ввести булевую переменную. К примеру, если цена закрытия за каналом, то (true), а как только сделка открылась, переводить в (false) и перед открытием проверка, в каком она положении. Изменено 21 апреля, 2015 пользователем chistaia-rodina Ссылка на сообщение Поделиться на другие сайты More sharing options...
Monroff Опубликовано 22 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 апреля, 2015 Добрый день, уважаемые програмисты! Есть хорошая идея по доведению до ума Совы с форума. Думаю для вас это абсолютно несложно..Подскажите что куда надо прописать, чтоб просто сделки не открывались в зоне 100 или -100 по индикатору CCI?..Есть пара сов, с работой этих индикаторов, если что могу приложить, чтоб оттуда выдернуть.. Это будет чудоСова если поможете! Оттестирую на реале и выложу на форум если будет интересно людям!Заранее благодарен!! Ссылка на сообщение Поделиться на другие сайты More sharing options...
chistaia-rodina Опубликовано 22 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 22 апреля, 2015 Monroff, если так, то нужно сразу и прикладывать, а там видно будет, кого заинтересует тот посмотрит и что-то сделает или подскажет. Ссылка на сообщение Поделиться на другие сайты More sharing options...
master.man Опубликовано 23 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 апреля, 2015 Доброго времени суток уважаемые! Столкнулся с такой трудностью... Имея чистый график и прикрепляя к нему индикатор RSI, он встает в подвале. Затем если взять с навигатора индикатор МА и бросить его на RSI (в настройках МА указать применить к previous indicator,s data) то он будет сглаживать RSI. А как это прописать в коде? Я так понимаю, надо в applied_price у iMA указать индикатор RSI? в справке по этому поводу ничего не нашел... Изменено 23 апреля, 2015 пользователем master.man Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 23 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 апреля, 2015 master.man нет. всё значительно сложнее. Самый простой вариант - в индикатор РСИ встроить сглаживание. Ссылка на сообщение Поделиться на другие сайты More sharing options...
sanyasan Опубликовано 23 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 23 апреля, 2015 chistaia-rodina, Спасибо что посмотрели. Да я что-то не подумал про большие свечи. Буду побывать дальше) Ссылка на сообщение Поделиться на другие сайты More sharing options...
Monroff Опубликовано 24 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 24 апреля, 2015 Monroff, если так, то нужно сразу и прикладывать, а там видно будет, кого заинтересует тот посмотрит и что-то сделает или подскажет. да просто там пара строк то всего добавляться должна, нормальный програмист бы понял..тут Сапфир уже помог.. Вопрос снят. Изменено 24 апреля, 2015 пользователем Monroff Ссылка на сообщение Поделиться на другие сайты More sharing options...
nct21 Опубликовано 29 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 апреля, 2015 Я уже голову сломал, выручайте братцы-программисты!Пытаюсь перевести текущий ордер на продажу в безубыток, тралить не надо.Вот код: if (ticket>0) { if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES) == true) { if (OrderOpenPrice() == NormalizeDouble(Ask + StopLoss*Point, Digits)) SL = NormalizeDouble(Ask - TralingStep*Point, Digits); else SL = NormalizeDouble(Ask + StopLoss*Point, Digits); } TP = NormalizeDouble(Ask - TakeProfit * Point, Digits); bool modify = OrderModify(ticket, OrderOpenPrice(), SL, TP, Blue); } В таком виде советник меняет стоплос и тейкпрофит с каждым тиком, а мне нужно один раз выставить СЛ и ТП, а потом один раз перевести ордер в безубыток и все! Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 29 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 апреля, 2015 nct21 просто надо перенести СЛ на цену открытия + спред + вишенка. В момент когда цена оказалась дальше некой дистанции. Итак для бая:если СЛ > OrderOpen - выход (значит уже в безубытке)иначе если Бид > OrderOpen + Дистанция - { здесь расчёт СЛ = OrderOpen + Спред, и ОрдерМодифи }иначе - выход Ссылка на сообщение Поделиться на другие сайты More sharing options...
nct21 Опубликовано 29 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 апреля, 2015 если СЛ > OrderOpen - выход (значит уже в безубытке)иначеесли Бид > OrderOpen + Дистанция - { здесь расчёт СЛ = OrderOpen + Спред, и ОрдерМодифи }иначе - выходЯ сделал для СЕЛЛ: if (OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES) == true) { if (StopLoss*Point > OrderOpenPrice()) return; else if (NormalizeDouble(Ask > OrderOpenPrice() + TralingStop*Point, Digits)) { SL = NormalizeDouble(OrderOpenPrice() + TralingStep*Point, Digits); bool modify = OrderModify(ticket, OrderOpenPrice(), SL, TP, Blue); } else return; //TP = NormalizeDouble(Ask - TakeProfit * Point, Digits); return; } Ошибок в журнале нет, СТОП теперь не выставляется вообще! Ссылка на сообщение Поделиться на другие сайты More sharing options...
rva7171 Опубликовано 29 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 апреля, 2015 Да уж наворотил так какВот рабочий код переводит стоп в БУ +2 если Buy или -2 пункта если Sell. Только смотри чтобы с другими модификациями ордеров в конфликт не входил//перевод ордера в без убытокvoid NoLoss() { for(int i=0; i { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) { if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) { if(OrderType()==OP_BUY) { if(Bid>OrderOpenPrice()+(OrderOpenPrice()-OrderStopLoss())*MultiplierNoloss) { SL=OrderOpenPrice()+2*Point; OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0,0); } } if(OrderType()==OP_SELL) { if(Ask { SL=OrderOpenPrice()-2*Point; OrderModify(OrderTicket(),OrderOpenPrice(),SL,OrderTakeProfit(),0,0); } } } } } } Ссылка на сообщение Поделиться на другие сайты More sharing options...
Старик Опубликовано 29 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 апреля, 2015 Парни, прежде чем лепить своё, изучайте лучшие чужие коды.Например, http://www.kimiv.ru/Там есть перевод в БУ, которым лет 7-8 пользуются тысячи людей.Там еще и тьма бесплатного софта в открытом коде. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 29 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 апреля, 2015 Мы-же здесь учимся кодировать... Я думаю если человеку нужен готовый код, то в гугле сразу найдёт.nct211. Замените здесь if (StopLoss*Point > OrderOpenPrice()) return; на if (OrderStopLoss() > OrderOpenPrice()) return;2. Здесь if (NormalizeDouble(Ask > OrderOpenPrice() + TralingStop*Point, Digits)) - if (Ask > OrderOpenPrice() - TralingStop*Point) - зачем NormalizeDouble? и для Селл нужен (-), т.к. расчёт идёт не от текущей цены, а от цены открытия или у Вас другие планы? далее в расчёте SL - то-же.3. При модификации SL ордера? TP лучше задавать OrderTakeProfit()исправьте и должно работать. 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
nct21 Опубликовано 29 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 апреля, 2015 Да уж наворотил так как а что такое "MultiplierNoloss"?Добавлено: 29-04-2015 17:54:37Мы-же здесь учимся кодировать... исправил. Теперь работает, но не переводит в безубыток, а как-будто тралит, все время СЛ передвигается! Почему не пойму. Изменено 29 апреля, 2015 пользователем nct21 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 29 апреля, 2015 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 апреля, 2015 а что такое "MultiplierNoloss"?Это множитель. Проще говоря Дистанция = СЛ * MultiplierNoloss. Чем дальше стоп тем больше должна пройти цена для БУ.исправил. Теперь работает, но не переводит в безубыток, а как-будто тралит, все время СЛ передвигается! Почему не пойму.Да там косяк. Для Селл вместоif (OrderStopLoss() > OrderOpenPrice()) return; надо if (OrderStopLoss() OrderOpenPrice()) return; Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти