Ar4i Опубликовано 28 мая, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 28 мая, 2018 нехватка знаний работы с массивами x_x есть скажем задача: открытия ордера (или другого действия) по открытию "n"-го бара от линии iМА. по идеи все должно было выглядеть так: if ( Open[3] ну или в таком духе. но что то идет не так и сов открывает, то на 2-м баре - то на 4-м. хотя если задать [0] то все ок, работает по текущему. надо скорей всего сделать счетчик с Bars. но я не пойму как его слепить.подскажите пожалуйста каков выход. или хоть в каком направление двигаться. Изменено 28 мая, 2018 пользователем Ar4i Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sacred70 Опубликовано 28 мая, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 28 мая, 2018 Ar4i счетчик свечей расписан на 339 странице этой темы, пост 5072 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ar4i Опубликовано 28 мая, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 28 мая, 2018 Sacred70 честно сказать не очень понял. сильно вырвано для меня из контекста: " ...{ countB++; countS = 0; }else { countS++; countB = 0; }..."а чем являются countB и countS, в смысле кой они имеют идентификатор. double countB = Open[0]; // ?? или, int countB = Bars; // ??наверное вы тут считаете отдельно бычьи свечи и отдельно медвежьи?я так понял вы уже прикрутили, и у вас работает. может покажите в коде или объясните. если не трудно, буду благодарен. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sacred70 Опубликовано 29 мая, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 мая, 2018 Ar4iда, это счетчик одинаковых свечейcountB и countS изначально равны 0Снимок.JPG Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ar4i Опубликовано 29 мая, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 мая, 2018 :-? Изменено 29 мая, 2018 пользователем Ar4i Ссылка на сообщение Поделиться на другие сайты More sharing options...
Sacred70 Опубликовано 29 мая, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 мая, 2018 Ar4iСнимок.JPG Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ar4i Опубликовано 29 мая, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 29 мая, 2018 Sacred70 ну в принципе понятно . а если сторона движения свечи не важно счетчик такой по идеи: if ( Open[1] ) countBars++; // или if(Open>Close) countB++; if(Open) countS++; countBS = countB + countS; // ни так, ни так кстати не работает все равно, не в том суть. проблема что у меня есть условия для запуска счетчика. и наверное именно в том что условие это содержащие одноименную (или схожую) переменную Open[1]. из за чего я так понимаю и сбой. по идеи из предложного и моих потребностей вид должен был быть приблиз-но следующий: if ( Open[1] { if (Close[1] > Open[1] ) { countB++; countS = 0; } else { countS++; countB = 0; } } ...или не понимаю на вашей картинке кода тоже всего и всяких тайм серий так по напичкано. и что оно работает в тестере? почему у меня тогда нет? Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 30 мая, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 мая, 2018 есть скажем задача: открытия ордера (или другого действия) по открытию "n"-го бара от линии iМА.Может только я не понял... как это n-бар от MA? Время(бары) от пересечения считать или пункты? Может оказаться что и счётчик не нужен... Ссылка на сообщение Поделиться на другие сайты More sharing options...
Юлия-Julik Опубликовано 30 мая, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 мая, 2018 Здравствуйте!Не могу понять, где и что в тесте по мартингейлу сделала не так. Изначально все ордера открываются, модифицируются, закрываются, все идеально. Но в какой-то момент происходит ошибка модификации и на этом все. Помогите разобраться, пожалуйста. Martingale_test_4.mq4 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ar4i Опубликовано 30 мая, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 мая, 2018 Может только я не понял... как это n-бар от MA? Время(бары) от пересечения считать или пункты? Может оказаться что и счётчик не нужен... считать бары. первый допустим тот который закрылся после пересечения. "n" заданное количество баров. я думаю нужен счетчик, без него не корректно работает.мне кажется как то так может должно быть: if(Close[1] но так не работает почему то. Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 30 мая, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 мая, 2018 Но в какой-то момент происходит ошибка модификации и на этом все. Помогите разобраться, пожалуйста Посмотрите код ошибки. и в Help или сюдаДобавлено: 30-05-2018 18:02:37 Может только я не понял... как это n-бар от MA? Время(бары) от пересечения считать или пункты? Может оказаться что и счётчик не нужен... считать бары. первый допустим тот который закрылся после пересечения. "n" заданное количество баров. я думаю нужен счетчик, без него не корректно работает.мне кажется как то так может должно быть: if(Close[1] но так не работает почему то. Тоже, если понял суть задачи...Сигнал возникает в том случае, если цена пересекла МА не далее n свечей. Так?Если-да, то делаете цикл по свечам от 1-ой до n-ой и проверяете было ли пересечение.В теле цикла цену МА видимо тоже необходимо считать для i-той свечи.. Изменено 30 мая, 2018 пользователем usver73 Ссылка на сообщение Поделиться на другие сайты More sharing options...
Юлия-Julik Опубликовано 30 мая, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 мая, 2018 Посмотрите код ошибки. и в Help или сюда В журнале выглядит так:2018.05.30 21:12:18.446 2018.02.02 15:41:04 Martingale (test 4) AUDUSD,H1: OrderModify error 12018.05.30 21:12:18.446 2018.02.02 15:41:04 Martingale (test 4) AUDUSD,H1: ошибка модификации ордеров2018.05.30 21:12:18.446 2018.02.02 15:41:04 Martingale (test 4) AUDUSD,H1: OrderModify error 12018.05.30 21:12:18.446 2018.02.02 15:41:04 Martingale (test 4) AUDUSD,H1: ошибка модификации ордеров2018.05.30 21:12:18.005 2018.01.30 07:55:00 Martingale (test 4) AUDUSD,H1: ордера успешно модифицированы2018.05.30 21:12:18.005 2018.01.30 07:55:00 Martingale (test 4) AUDUSD,H1: modify #11 buy 1.00 AUDUSD at 0.80620 sl: 0.00000 tp: 0.81287 ok2018.05.30 21:12:18.005 2018.01.30 07:55:00 Martingale (test 4) AUDUSD,H1: open #11 buy 1.00 AUDUSD at 0.80620 ok2018.05.30 21:12:17.932 2018.01.26 19:33:35 Martingale (test 4) AUDUSD,H1: open #10 buy 0.50 AUDUSD at 0.81120 tp: 0.81620 ok2018.05.30 21:12:17.930 2018.01.26 19:33:35 Tester: take profit #9 at 0.81118 (0.81118 / 0.81120)2018.05.30 21:12:17.930 2018.01.26 19:33:35 Tester: take profit #8 at 0.81118 (0.81118 / 0.81120)2018.05.30 21:12:17.796 2018.01.25 21:21:44 Martingale (test 4) AUDUSD,H1: ордера успешно модифицированы2018.05.30 21:12:17.796 2018.01.25 21:21:44 Martingale (test 4) AUDUSD,H1: modify #8 buy 0.50 AUDUSD at 0.80951 sl: 0.00000 tp: 0.81118 ok Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 30 мая, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 30 мая, 2018 В журнале выглядит так: не смог воспроизвести Вашу ошибку.Наиболее часто встречающаяся причина- ненормализация double, но у Вас вроде все нормально.Попробуйте строку else Print ("ошибка модификации ордеров"); расширить- запишите № ордера, его цену, ТП, и новый ТП (без приведения DoubleToString).Еще есть версия (не моя), что битые котировки- попробуйте на другом символе. Ссылка на сообщение Поделиться на другие сайты More sharing options...
machine Опубликовано 31 мая, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 31 мая, 2018 Цитата OrderModify error 1 Нужно проверять перед модификациейif (OrderTakeProfit() != tp) 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 31 мая, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 31 мая, 2018 Ar4i можно решить вопрос без циклов: - запоминаем время свечи, но которой было пересечение - datetime dtcross; (на глобальном уровне) if ( Open[0] MA ) { direct = 0 /*UP*/; dtcross = Time[0]; } // запомнили направление и время пересечения // для селл направления изменить знаки- теперь следим за временем (barCount - заданное кол-во баров после пересечения МА) - if ( direct >= 0 && Time[0] - dtcross > barCount * 60 ) { // здесь код что делать дальше direct = -1; // после открытия ордеров сбрасываем направление пересечения, т.к. оно отработало } Ссылка на сообщение Поделиться на другие сайты More sharing options...
Юлия-Julik Опубликовано 31 мая, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 31 мая, 2018 Еще есть версия (не моя), что битые котировки- попробуйте на другом символе. Это происходит на всех символах.Вот здесь видно:2018.05.31 16:31:49.831 2018.02.28 15:47:30 Martingale (test 4) USDCHF,H1: OrderModify error 12018.05.31 16:31:49.190 2018.02.20 10:09:56 Martingale (test 4) USDCHF,H1: modify #26 sell 0.50 USDCHF at 0.92340 sl: 0.00000 tp: 0.92554 ok2018.05.31 16:31:49.190 2018.02.20 10:09:56 Martingale (test 4) USDCHF,H1: ордера успешно модифицированы2018.05.31 16:31:49.190 2018.02.20 10:09:56 Martingale (test 4) USDCHF,H1: modify #27 sell 1.00 USDCHF at 0.92840 sl: 0.00000 tp: 0.92554 ok2018.05.31 16:31:49.189 2018.02.20 10:09:56 Martingale (test 4) USDCHF,H1: ордера успешно модифицированы2018.05.31 16:31:49.189 2018.02.20 10:09:56 Martingale (test 4) USDCHF,H1: modify #28 sell 2.00 USDCHF at 0.93340 sl: 0.00000 tp: 0.92554 ok2018.05.31 16:31:49.189 2018.02.20 10:09:56 Martingale (test 4) USDCHF,H1: open #28 sell 2.00 USDCHF at 0.93340 ok2018.05.31 16:31:49.112 2018.02.16 21:01:22 Martingale (test 4) USDCHF,H1: ордера успешно модифицированы2018.05.31 16:31:49.112 2018.02.16 21:01:22 Martingale (test 4) USDCHF,H1: modify #26 sell 0.50 USDCHF at 0.92340 sl: 0.00000 tp: 0.92173 ok2018.05.31 16:31:49.112 2018.02.16 21:01:22 Martingale (test 4) USDCHF,H1: ордера успешно модифицированы2018.05.31 16:31:49.112 2018.02.16 21:01:22 Martingale (test 4) USDCHF,H1: modify #27 sell 1.00 USDCHF at 0.92840 sl: 0.00000 tp: 0.92173 ok2018.05.31 16:31:49.112 2018.02.16 21:01:22 Martingale (test 4) USDCHF,H1: open #27 sell 1.00 USDCHF at 0.92840 ok2018.05.31 16:31:49.040 2018.02.15 09:39:25 Martingale (test 4) USDCHF,H1: open #26 sell 0.50 USDCHF at 0.92340 tp: 0.91840 ok2018.05.31 16:31:49.040 2018.02.15 09:39:25 Tester: take profit #25 at 0.92342 (0.92340 / 0.92342)2018.05.31 16:31:49.012 2018.02.14 20:24:54 Martingale (test 4) USDCHF,H1: open #25 sell 0.50 USDCHF at 0.92842 tp: 0.92342 ok2018.05.31 16:31:49.012 2018.02.14 20:24:54 Tester: take profit #24 at 0.92844 (0.92842 / 0.92844)2018.05.31 16:31:48.935 2018.02.13 09:54:56 Martingale (test 4) USDCHF,H1: open #24 sell 0.50 USDCHF at 0.93344 tp: 0.92844 ok2018.05.31 16:31:48.935 2018.02.13 09:54:56 Tester: take profit #23 at 0.93346 (0.93344 / 0.93346)2018.05.31 16:31:48.935 2018.02.13 09:54:56 Tester: take profit #22 at 0.93346 (0.93344 / 0.93346)2018.05.31 16:31:48.935 2018.02.13 09:54:56 Tester: take profit #21 at 0.93346 (0.93344 / 0.93346)2018.05.31 16:31:48.935 2018.02.13 09:54:56 Tester: take profit #20 at 0.93346 (0.93344 / 0.93346)Открываем 24, ставим тэйк-профит. Открываем 25, ставим тэйк-профит. Открываем 26. Открываем 27, модифицируем. Модифицируем 26. Открываем 28, модифицируем. Еще раз модифицируем 27. Еще раз модифицируем 26. Вот что-то на 24-25 ордере? Потому что 26-й тоже открывается на 0,5, и группа 26-27-28 отрабатывает нормально. Но из-за 24-25 - сбой.До 24-го ордера все отработало идеально, а потом ошибка. Плавающая, на разных парах сбой происходит на разных ордерах. Не понимаю ( Изменено 31 мая, 2018 пользователем Юлия-Julik Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 31 мая, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 31 мая, 2018 Плавающая, на разных парах сбой происходит на разных ордерах. Не понимаю ( Подозрение на ошибку, когда советник пытается установить ТП ордена по той же цене, что OrderTakeProfit.machine Вам предложил добавить проверку, чтобы это исключить. Я предложил сделать Print() при возникновении ошибки, чтобы видеть, какие параметры передаются в функцию модификации. Предполагал ту же ошибку. Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 31 мая, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 31 мая, 2018 Вот что-то на 24-25 ордере? Потому что 26-й тоже открывается на 0,5, и группа 26-27-28 отрабатывает нормально. Но из-за 24-25 - сбой.До 24-го ордера все отработало идеально, а потом ошибка. Плавающая, на разных парах сбой происходит на разных ордерах. Не понимаю (Почему Вы думаете что ошибка из-за 24 и 25 ордера? Они давно закрыты и забыты.Ошибка возникает через 8 дней (по тестеру) после последней модификации. Что там в сове, может доп. условия закрытия, кроме ТП есть? Ссылка на сообщение Поделиться на другие сайты More sharing options...
Юлия-Julik Опубликовано 31 мая, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 31 мая, 2018 Что там в сове, может доп. условия закрытия, кроме ТП есть? Советник стандартный, буква в букву, знак в знак по видеоуроку. Предполагаю, что буква в букву, переписывала 2 раза: в первый раз возникали те же ошибки, поэтому еще раз переписала, думала, где-то ошиблась, в циклах, знаках. Добавлено: 31-05-2018 15:22:15Я предложил сделать Print() при возникновении ошибки, чтобы видеть, какие параметры передаются в функцию модификации. Предполагал ту же ошибку. Да, сделаюДобавлено: 01-06-2018 09:11:20Подозрение на ошибку, когда советник пытается установить ТП ордена по той же цене, что OrderTakeProfit. Всем спасибо, разобралась. Ошибка вылетает, потому что на счету заканчиваются деньги. Я начинаю тест с 1 лота, а не с 0,1. Попробую на 0,1 Изменено 1 июня, 2018 пользователем Юлия-Julik Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 1 июня, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 июня, 2018 Ошибка вылетает, потому что на счету заканчиваются деньги. Я начинаю тест с 1 лота, а не с 0,1. Попробую на 0,1 честно говоря, странно... Если денег мало, то будет ошибка 134. Я б на Вашем месте докопался до причины Err 1. Ссылка на сообщение Поделиться на другие сайты More sharing options...
Ar4i Опубликовано 1 июня, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 июня, 2018 0ll можно решить вопрос без циклов не получилось. а *60 это подразумевалось использование на минутках. выкладываю на всякий, как я применил то что посоветовали.0ll_MA_.mq4 Изменено 1 июня, 2018 пользователем Ar4i Ссылка на сообщение Поделиться на другие сайты More sharing options...
Юлия-Julik Опубликовано 1 июня, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 июня, 2018 Если денег мало, то будет ошибка 134 Да, еще посмотрю. Но пока это самая вероятная версия.2018-06-01_11-58-32.jpg Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 1 июня, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 июня, 2018 0ll можно решить вопрос без циклов не получилось. а *60 это подразумевалось использование на минутках. выкладываю на всякий, как я применил то что посоветовали. Надеюсь 0ll меня простит... :)У Вас в 66 строке как минимум ошибка: if ( direct >= 0 && Time[0] - dtcross > barCount *60) Time[0] - dtcross- надо в скобки окружить...Дальше не смотрелДобавлено: 01-06-2018 16:38:14 Если денег мало, то будет ошибка 134 Да, еще посмотрю. Но пока это самая вероятная версия.Вот не понял Ваш посыл...ИМХО -если в сове есть ошибка и есть мысли, где она образуется, то в этом месте ставим if(Error != GetLastError()) Print(__FUNCTION__ , ":XXX line Error ",Error,": ",ErrorDescription(Error)); Выдрано из кода...Смысл- поймать строку , где генерится ошибка..Всем(особенно 0ll)- кроме Print , есть дебагер в mql? Изменено 1 июня, 2018 пользователем usver73 2 Ссылка на сообщение Поделиться на другие сайты More sharing options...
0ll Опубликовано 1 июня, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 июня, 2018 :d Надеюсь 0ll меня простит... У Вас в 66 строке как минимум ошибка:Код: [Выделить] if ( direct >= 0 && Time[0] - dtcross > barCount *60)Time[0] - dtcross- надо в скобки окружить...Ладно, прощу в этот раз... :dСогласно "Приоритеты и порядок операций" mql, операция вычитания выше чем операции сравнения.Так что нет там ошибки, ошибка есть в моём посте: вместо barCount *60, надо barCount *_Period * 60, а то действительно для М1 получилось.Вы на словах опишите условия открытия и закрытия - а то я не понял.ПС: дебаггер вроде-бы есть, но заставить его работать не смог, сам принты ставлю. Изменено 1 июня, 2018 пользователем 0ll 1 Ссылка на сообщение Поделиться на другие сайты More sharing options...
usver73 Опубликовано 1 июня, 2018 Поделиться Обучение языку MQL4 под MetaTrader 4 Опубликовано 1 июня, 2018 Согласно "Приоритеты и порядок операций" mql, операция вычитания выше чем операции сравнения. да ладно!!!! Спасибо, не знал.. все время скобки ставил... Ссылка на сообщение Поделиться на другие сайты More sharing options...
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти