Eugeny_Iv 1,438 Share Posted September 18, 2019 Доброго дня. Может кто уже сталкивался с таким системным глюком советника: в коде прописаны параметры открытия сделки, но советник открывает сделку на первом тике, затем на втором тике видит, что параметры для открытия сделки не соблюдены и закрывает открытые на первом тике сделки. Соответственно это видно как моментальное открытие-закрытие и попадаешь на спред((( Данный глюк происходит крайне редко и что характерно по утрам (время московское). Если у кого бывало такое - буду рад любой инфе. Quote Link to post Share on other sites
Malcolm 1,226 Share Posted September 18, 2019 1 минуту назад, Eugeny_Iv сказал: в коде прописаны параметры открытия сделки, но советник открывает сделку на первом тике, затем на втором тике видит, что параметры для открытия сделки не соблюдены и закрывает открытые на первом тике сделки. Звучит как ошибка в алгоритме советника, а не в чем-то еще. Если движение цены на 1 пипс на втором тике посылает ему сигнал на закрытие сделки, то он ее и закрывает. Надо логику советника дорабатывать, пускай время выжидает, или не закрывается на той же свече на какой открылся. 1 Quote Link to post Share on other sites
Eugeny_Iv 1,438 Share Posted September 18, 2019 2 минуты назад, Malcolm сказал: Звучит как ошибка в алгоритме советника, а не в чем-то еще. Если движение цены на 1 пипс на втором тике посылает ему сигнал на закрытие сделки, то он ее и закрывает. Надо логику советника дорабатывать, пускай время выжидает, или не закрывается на той же свече на какой открылся. Спасибо за ответ. Для себя такое поведение могу объяснить только разницей в исторических данных на 1м тике и на 2м. Так как советник основное время работает корректно, за исключением таких вот редких моментов. Quote Link to post Share on other sites
Eugeny_Iv 1,438 Share Posted September 18, 2019 31 минуту назад, Malcolm сказал: Звучит как ошибка в алгоритме советника, а не в чем-то еще. Если движение цены на 1 пипс на втором тике посылает ему сигнал на закрытие сделки, то он ее и закрывает. Надо логику советника дорабатывать, пускай время выжидает, или не закрывается на той же свече на какой открылся. Алгоритм и логика советника корректны. Просто я не думал и не учел, что может быть динамическое изменение исторических данных графика цены. Поэтому совет не закрываться на свече открытия имеет смысл. Quote Link to post Share on other sites
kaif 6,836 Share Posted September 23, 2019 18.09.2019 в 04:42, Eugeny_Iv сказал: Доброго дня. Может кто уже сталкивался с таким системным глюком советника: в коде прописаны параметры открытия сделки, но советник открывает сделку на первом тике, затем на втором тике видит, что параметры для открытия сделки не соблюдены и закрывает открытые на первом тике сделки. Соответственно это видно как моментальное открытие-закрытие и попадаешь на спред((( Данный глюк происходит крайне редко и что характерно по утрам (время московское). Если у кого бывало такое - буду рад любой инфе. У меня есть предположение. Если советник использует скользящие средние (MA) и те в свой расчет включают текущий бар, то вполне возможна такая ситуация. Допустим, мы берем среднюю цену за последние 20 баров. Это не совсем история, если считать не с бара 1, а с бара 0. Так как бар 0 непосредственно влияет на это среднее. Quote механическая торговая система на основе индикатора AT-линийописание торговой стратегии LTR-AUTO, хроника событий Docendo discimus Link to post Share on other sites
Eugeny_Iv 1,438 Share Posted September 23, 2019 1 час назад, kaif сказал: У меня есть предположение. Если советник использует скользящие средние (MA) и те в свой расчет включают текущий бар, то вполне возможна такая ситуация. Допустим, мы берем среднюю цену за последние 20 баров. Это не совсем история, если считать не с бара 1, а с бара 0. Так как бар 0 непосредственно влияет на это среднее. Спасибо за совет. Текущий бар не используется, без нулевых, минимум 1. Модифицировал блок автозакрытия. Quote Link to post Share on other sites
Mighty Mouse 244 Share Posted October 21, 2019 @Ugar68 , индюк рисует стрелки на часовке через буфер, но при переключении на более высокие ТФ они перестают быть информативными, налазят на свечи и мешают. Как сделать ограничение по видимости вроде того что сделано для объектов? Пока придумал только проверять текущий ТФ и если он не устраивает обнулять буфер. Может еще какой способ есть? Quote Link to post Share on other sites
Ugar68 372 Share Posted October 21, 2019 (edited) 53 минуты назад, Mighty Mouse сказал: @Ugar68 , индюк рисует стрелки на часовке через буфер, но при переключении на более высокие ТФ они перестают быть информативными, налазят на свечи и мешают. Как сделать ограничение по видимости вроде того что сделано для объектов? Пока придумал только проверять текущий ТФ и если он не устраивает обнулять буфер. Может еще какой способ есть? Обычно стрелки ставят над или под свечой. Делают отступ от кончика свечи. Вот этот отступ надо адаптировать под размер свечи. Чем больше свечи, тем больше отступить. Если же не нужна работа индикатора на каких то таймфреймах, то не только буфер можно обнулять, но можно вообще все вычисления, связанные с этими буферами, не выполнять. Edited October 21, 2019 by Ugar68 Quote Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку. Чужие программы не переделываю. Link to post Share on other sites
sviter 0 Share Posted October 25, 2019 Добрый день помогите по параболику пожалуйста! хочу с советнике сделать логику как изображена на картинке: код пишу так: ParSar_0 = iSAR(NULL, time1_method, parsar_Step, parsar_Maximum, 0); ParSar_1 = iSAR(NULL, time1_method, parsar_Step, parsar_Maximum, 1); if(ParSar_0 < Bid && ParSar_1 > Bid) { TP = NormalizeDouble(Ask + takeprofit * _Point, _Digits); ticket = OpenOrder(_Symbol, OP_BUY, lot, Ask, slippage, 0, TP, comment, Magic, 0, clrGreen); //покупка } if(ParSar_0 > Bid && ParSar_1 < Bid) { TP = NormalizeDouble(Bid - takeprofit * _Point, _Digits); ticket = OpenOrder(_Symbol, OP_SELL, lot, Bid, slippage, 0, TP, comment, Magic, 0, clrRed); //продажа } } посмотрите может я ошибок наделал каких? ибо он дает сбои....заранее благодарен! Quote Link to post Share on other sites
Ugar68 372 Share Posted October 27, 2019 Ошибки надо анализировать. Для этого использовать Print(). Нужно учитывать что сар может быть равен цене. Нужно учитывать проблему погрешности работы с double значениями при обработке данныйх индикатора и цены. Проблема в том что сам сар написан без учёта погрешности. По этому, при сар=бид, сар может переключиться, а может и нет. По этому, не стоит удивляться, если в этой ситуации, сар на графике переключился, а советник так не думает. Quote Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку. Чужие программы не переделываю. Link to post Share on other sites
zvagolskiy.ru 2 Share Posted November 18, 2019 Здравствуйте,уважаемые трейдеры.Подскажите хороший учебник по MQL4,чтобы все было с самого начала,с нуля и до написания советника. Quote Link to post Share on other sites
Ugar68 372 Share Posted November 18, 2019 1 час назад, zvagolskiy.ru сказал: Здравствуйте,уважаемые трейдеры.Подскажите хороший учебник по MQL4,чтобы все было с самого начала,с нуля и до написания советника. На официальном сайте давно лежит. Достаточно что бы начать писать советники. Quote Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку. Чужие программы не переделываю. Link to post Share on other sites
sviter 0 Share Posted November 28, 2019 Здравствуйте!!! делаю советник основываясь на таймфрэйме М5....но сигналы срабатывают (к примеру в 9:33, 12:11) и т.д.....подскажите, как открыть ордер на новой свече, если сигнал был на текущей? Quote Link to post Share on other sites
Ugar68 372 Share Posted November 28, 2019 10 минут назад, sviter сказал: Здравствуйте!!! делаю советник основываясь на таймфрэйме М5....но сигналы срабатывают (к примеру в 9:33, 12:11) и т.д.....подскажите, как открыть ордер на новой свече, если сигнал был на текущей? Сигнал запомнить в статической переменной. При открытии новой свечи исполнить сигнал. Для этого сравнивать время открытия текущей свечи с запомненным на прошлом тике. //Сигнал открытия на текущем баре. static int Signal; if( условие для открытия Buy )Signal=1; if( условие для открытия Sell )Signal=-1; //Сигнал нового бара bool NowBar=false; static datetime PrevTime0; datetime Time0=iTime(_Symbol,5,0); if(PrevTime0==0)PrevTime0=Time0; if(PrevTime0!=Time0)NowBar=true; PrevTime0=Time0; //Открываем ордер при сигнале и новом баре if(Signal==1 && NowBar) { //Здесь открытие Buy } if(Signal==-1 && NowBar) { //Здесь открытие Sell } Quote Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку. Чужие программы не переделываю. Link to post Share on other sites
sviter 0 Share Posted December 1, 2019 не работает! посмотрите пожалуйста, что я делаю ни так? datetime Time0; bool NowBar = false; static datetime PrevTime0; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnTick() { //--- M = iStochastic(NULL,PERIOD_M5,KPeriod,DPeriod,Slowing,sto_metod,sto_Price,MODE_MAIN,1); M2 = iStochastic(NULL,PERIOD_M5,KPeriod,DPeriod,Slowing,sto_metod,sto_Price,MODE_MAIN,2); S = iStochastic(NULL,PERIOD_M5,KPeriod,DPeriod,Slowing,sto_metod,sto_Price,MODE_SIGNAL,1); //============================================= static int Signal; if(S < 30 && M < 30 && M2 < S && M > S) Signal=1; if(S > 70 && M > 70 && M2 > S && M < S) Signal=-1; Time0 = iTime(NULL, PERIOD_M5, 0); if(PrevTime0 == 0) { PrevTime0 = Time0; if(PrevTime0 != Time0) { NowBar = true; PrevTime0 = Time0; if(Signal == 1 && NowBar) { TP = NormalizeDouble(Ask + takeprofit * _Point, _Digits); SL = NormalizeDouble(Ask - sloploss * _Point, _Digits); ticket = OpenOrder(_Symbol, OP_BUY, lot, Ask, slippage, SL, TP, comment, Magic, 0, clrGreen); //покупка } if(Signal == -1 && NowBar) { TP = NormalizeDouble(Bid - takeprofit * _Point, _Digits); SL = NormalizeDouble(Bid + sloploss * _Point, _Digits); ticket = OpenOrder(_Symbol, OP_SELL, lot, Bid, slippage, SL, TP, comment, Magic, 0, clrRed); //продажа } } } } Quote Link to post Share on other sites
Ugar68 372 Share Posted December 1, 2019 if(PrevTime0 == 0) { PrevTime0 = Time0; if(PrevTime0 != Time0) Тут бред какой то. Я же написал как надо. Зачем эта фигурная скобка? И почему внутри неё всё? Если уж так нравится всё делать с фигурными скобками то вот так: //Сигнал открытия на текущем баре. static int Signal; if( условие для открытия Buy ) { Signal=1; } if( условие для открытия Sell ) { Signal=-1; } //Сигнал нового бара bool NowBar=false; static datetime PrevTime0; datetime Time0=iTime(_Symbol,5,0); if(PrevTime0==0) { PrevTime0=Time0; } if(PrevTime0!=Time0) { NowBar=true; } PrevTime0=Time0; //Открываем ордер при сигнале и новом баре if(Signal==1 && NowBar) { //Здесь открытие Buy } if(Signal==-1 && NowBar) { //Здесь открытие Sell } Quote Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку. Чужие программы не переделываю. Link to post Share on other sites
Dedushka 1,700 Share Posted December 1, 2019 7 часов назад, sviter сказал: посмотрите пожалуйста, что я делаю ни так? Уважаемый, ты пишешь "ни так", а надо писать "НЕ так". Quote В бой идут одни старики. (с) Link to post Share on other sites
Geshi 10 Share Posted February 11, 2020 Подскажите. В терминале простым движением мы можем наносить индикатор на индикатор. Например на ATR можем наложить MA и измерять положение относительно него. Это так же легко реализовать в советнике? Т.е посылать запрос в терминал и получать данные, или нужна дополнительная эмуляция наложения индикатора на индикатор? Quote Link to post Share on other sites
Ugar68 372 Share Posted February 12, 2020 (edited) 23 часа назад, Geshi сказал: Подскажите. В терминале простым движением мы можем наносить индикатор на индикатор. Например на ATR можем наложить MA и измерять положение относительно него. Это так же легко реализовать в советнике? Т.е посылать запрос в терминал и получать данные, или нужна дополнительная эмуляция наложения индикатора на индикатор? В MQL4 есть вызов индикатора, при этом возвращается 1 значение одной линии на 1 баре. Что бы получить значения нескольких линий и/или на нескольких барах, придётся вызвать индикатор соответствующее количество раз. МА это среднее от нескольких значений. То есть, что наложить МА на другой индикатор, нужно много значений этого индикатора. То есть массив. Некоторые индикаторы имеют специальную функцию вызова, при котором используются данные не цен, а из массива. В конкретном примере МА на ATR, последовательность действий такая. 1. создать массив для данных ATR. 2. В цикле вызывать функцию iATR() на нужном количестве баров. Количество баров должно быть больше или равно периода МА. 3. Вызвать iMAOnArray() по массиву с данными ATR. Она вернёт значение МА по ATR. В MQL5 всё по другому. Там и индикаторы по другому вызываются, и нет встроенных функций построения индикаторов по массивам. Но есть готовые классы, в которых есть чем поживиться. Edited February 12, 2020 by Ugar68 1 Quote Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку. Чужие программы не переделываю. Link to post Share on other sites
Galim_v 81 Share Posted February 13, 2020 Приветствую! Как научить бота отслеживать изменения свопа в четверке? Quote "Всегда приходит час, который отменяет предыдущий. И звезда, которая приносит свет. Нужно только дождаться." Link to post Share on other sites
Ugar68 372 Share Posted February 13, 2020 12 часов назад, Galim_v сказал: Приветствую! Как научить бота отслеживать изменения свопа в четверке? Так же как и в пятёрке. Так же как и всё, когда нужно отслеживать изменения. Получаем значение свопа и сравниваем с прошлым запомненным ранее. Запоминаем текущее значение для сравнения позже. Свопы для Buy и Sell, а также на разных символах, отличаются. Логично следить отдельно. Quote Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку. Чужие программы не переделываю. Link to post Share on other sites
Galim_v 81 Share Posted February 13, 2020 57 минут назад, Ugar68 сказал: Так же как и в пятёрке. Так же как и всё, когда нужно отслеживать изменения. Получаем значение свопа и сравниваем с прошлым запомненным ранее. Запоминаем текущее значение для сравнения позже. Свопы для Buy и Sell, а также на разных символах, отличаются. Логично следить отдельно. Спасибо, что отозвались! Да, но если записать значение в переменную, она ведь не переживет перезагрузку терминала? Quote "Всегда приходит час, который отменяет предыдущий. И звезда, которая приносит свет. Нужно только дождаться." Link to post Share on other sites
Ugar68 372 Share Posted February 13, 2020 (edited) 10 минут назад, Galim_v сказал: Спасибо, что отозвались! Да, но если записать значение в переменную, она ведь не переживет перезагрузку терминала? Это точно. Но если надо что бы значение пережило перезагрузку терминала, надо его продублировать на диске. При инициализации прочитать. Напрашивается 2 варианта: 1. Записать в GV переменную. 2. Записать в файл. Edited February 13, 2020 by Ugar68 Quote Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку. Чужие программы не переделываю. Link to post Share on other sites
Galim_v 81 Share Posted February 13, 2020 (edited) Отслеживаю более десятка инструментов. Значит столько и глобальных? GV еще не использовал. Это не тяжко для терминала? Неважно. Что делать понятно. Спасибо Ugar68. Edited February 13, 2020 by Galim_v Quote "Всегда приходит час, который отменяет предыдущий. И звезда, которая приносит свет. Нужно только дождаться." Link to post Share on other sites
Ugar68 372 Share Posted February 14, 2020 11 часов назад, Galim_v сказал: Отслеживаю более десятка инструментов. Значит столько и глобальных? GV еще не использовал. Это не тяжко для терминала? Неважно. Что делать понятно. Спасибо Ugar68. Если много данных, использование GV не оправдано. Слишком много GV. Можно конечно использовать много глобальных переменных, но проще, вместо переменных, использовать массив и скидывать его в файл при каждом изменении значений. При инициализации прочитать из файла в массив. 1 Quote Пишу советники и индикаторы по вашим алгоритмам. Пишите в личку. Чужие программы не переделываю. Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.