Circle 147 Share Posted October 2, 2013 Примерный алгоритм советника у вас должен быть такой. BuySignal=iCustom(...,NBufBuy,NBar); SellSignal=iCustom(...,NBufSell,NBar); Где NBufBuy Номер сигнального буфера на Buy NBufSell Номер сигнального буфера на Sell NBar номер бара, 0 - текущий бар. Далее уже if (BuySignal>0) { .... закрыть селл открыть бай } if (SellSignal>0) { .... закрыть бай. открыть селл } Примерно как то так. Что такое форекс? Это там где деньги лежат. Link to post Share on other sites
alexvv 0 Share Posted October 2, 2013 Примерный алгоритм советника у вас должен быть такой. BuySignal=iCustom(...,NBufBuy,NBar); SellSignal=iCustom(...,NBufSell,NBar); Где NBufBuy Номер сигнального буфера на Buy NBufSell Номер сигнального буфера на Sell NBar номер бара, 0 - текущий бар. Далее уже if (BuySignal>0) { .... закрыть селл открыть бай } if (SellSignal>0) { .... закрыть бай. открыть селл } Примерно как то так. У меня так: int start() { double indSell = iCustom(Symbol(),0,"1Original RSI-EMA Signals",SnakeRange,FilterPeriod,MartFiltr,PriceConst,Nrecalc,3,1); double indBuy = iCustom(Symbol(),0,"1Original RSI-EMA Signals",SnakeRange,FilterPeriod,MartFiltr,PriceConst,Nrecalc,4,1); if(indBuy > 0) { Close_LastOrder_by_type( OP_SELL,MagicNumber); if(OrdersTotal()==0) double ticket = OrderSend(Symbol(),OP_BUY,Lots,Ask,20,Ask-sl,Ask+tp,NULL,MagicNumber,0,CLR_NONE); } else if(indSell > 0) { Close_LastOrder_by_type( OP_BUY,MagicNumber); if(OrdersTotal()==0) ticket = OrderSend(Symbol(),OP_SELL,Lots,Bid,20,Bid+sl,Bid-tp,NULL,MagicNumber,0,CLR_NONE); } Comment( "indBuy=",indBuy,"\n", "indSell=",indSell ); return(0); } Link to post Share on other sites
Circle 147 Share Posted October 2, 2013 В том то и дело. что в буфере сигнал появляется с опозданием.Я это смотрю через комменты на маленькой скорости теста. ... Странно. Стрелка индикатора рисуется и одновременно с этим индикаторному буферу где хранится сигнал присваивается ценовое значение. Все это делается в одной функции void drawArrow(...), если вы сделали так как я вам говорил ранее. То есть рисование стрелки и присваивание значения сигнальному буферу происходит одновременно. ... Предполагаю, что отставание сигнала от стрелки происходит из за того что индикатор вызывает сам себя несколько раз. И в момент этих дополнительных вызовов заново инициализируюся сигнальные буфера. Попробуете в том месте где вы инициализируете нулями сигнальные буфера индикатора написать дополнительное условие if (!calculating && !returningBars) { тут написать инициализацию сигнальных буферов. } Что такое форекс? Это там где деньги лежат. Link to post Share on other sites
alexvv 0 Share Posted October 2, 2013 Странно. Стрелка индикатора рисуется и одновременно с этим индикаторному буферу где хранится сигнал присваивается ценовое значение. Все это делается в одной функции void drawArrow(...), если вы сделали так как я вам говорил ранее. То есть рисование стрелки и присваивание значения сигнальному буферу происходит одновременно. ... Предполагаю, что отставание сигнала от стрелки происходит из за того что индикатор вызывает сам себя несколько раз. И в момент этих дополнительных вызовов заново инициализируюся сигнальные буфера. Попробуете в том месте где вы инициализируете нулями сигнальные буфера индикатора написать дополнительное условие if (!calculating && !returningBars) { тут написать инициализацию сигнальных буферов. } Сделал. Результат прежний. Попробуйте протестировать сами. Файлы прилагаю. Тест за 30.09.2013 EURUSD вторая стрелка - сигнал даже опережает. Следующая - сигнал отстает на 5 баров. 1Original RSI-EMA Signals.mq4 0_test.mq4 Link to post Share on other sites
Circle 147 Share Posted October 2, 2013 Сделал. Результат прежний. Попробуйте протестировать сами. Файлы прилагаю. Тест за 30.09.2013 EURUSD вторая стрелка - сигнал даже опережает. Следующая - сигнал отстает на 5 баров. Хорошо, вечером дома попробую погонять в тестере. Сейчас на работе на рабочем компе нет терминала, а личный нетбук слабоват для тестов стратегий. Что такое форекс? Это там где деньги лежат. Link to post Share on other sites
alexvv 0 Share Posted October 2, 2013 Хорошо, вечером дома попробую погонять в тестере.Сейчас на работе на рабочем компе нет терминала, а личный нетбук слабоват для тестов стратегий. Хорошо. А я займусь альтернативным вариантом. Есть еще один индикатор с неплохими сигналами. Попроще. С первой попытки сигналы тоже не получил. Теперь кое-чему научился. Link to post Share on other sites
alexvv 0 Share Posted October 2, 2013 Хорошо, вечером дома попробую погонять в тестере.Сейчас на работе на рабочем компе нет терминала, а личный нетбук слабоват для тестов стратегий. Чуть не забыл. Я тестирую на М1. В индикаторе по умолчанию - М5. И для интереса - то что рисует на тестере вместе с советником - полное безобразие. Самостоятельно он рисует на порядок лучше - стрелку ставит на текущем баре или в момент открытия нового. Link to post Share on other sites
Circle 147 Share Posted October 2, 2013 Чуть не забыл.Я тестирую на М1. В индикаторе по умолчанию - М5. И для интереса - то что рисует на тестере вместе с советником - полное безобразие. Самостоятельно он рисует на порядок лучше - стрелку ставит на текущем баре или в момент открытия нового. Я посмотрел последний выложеннный код индикатора и то что он рисует в терминале без тестирования. Нашел некоторые недочеты . if (!calculating && !returningBars) { ArrayInitialize(buf3,0); ArrayInitialize(buf4,0); } переместите в функцию Init() в самый конец перед return(0) и в функции drawArrow() if (up) { ObjectSet(name,OBJPROP_PRICE1,High+gap); buf3=High;// buf4=0; } else { ObjectSet(name,OBJPROP_PRICE1,Low -gap); buf4=Low;// buf3=0; } Уберите комментарии //buf4=0; и // buf3=0; После чего попробуйте тестировать, я у себя не тестировал боюсь займет много времени. Что такое форекс? Это там где деньги лежат. Link to post Share on other sites
alexvv 0 Share Posted October 2, 2013 Я посмотрел последний выложеннный код индикатора и то что он рисует в терминале без тестирования.Нашел некоторые недочеты . if (!calculating && !returningBars) { ArrayInitialize(buf3,0); ArrayInitialize(buf4,0); } переместите в функцию Init() в самый конец перед return(0) и в функции drawArrow() if (up) { ObjectSet(name,OBJPROP_PRICE1,High+gap); buf3=High;// buf4=0; } else { ObjectSet(name,OBJPROP_PRICE1,Low -gap); buf4=Low;// buf3=0; } Уберите комментарии //buf4=0; и // buf3=0; После чего попробуйте тестировать, я у себя не тестировал боюсь займет много времени. Ужинал. Сделал. Ничего хорошего не получилось. Опять то длинное число, остальное по-прежнему. Наверное придется вернуться к варианту через анализ графических элементов на графике. Не хочется бросать этот индикатор. Он сам по себе - целая стратегия. Ок. 90% профитных пар бай - селл. Даже с учетом того, что бывают бары с перекрытием друг-друга. P.S. В личку я брошу свой скайп. Link to post Share on other sites
Circle 147 Share Posted October 2, 2013 ... Сделал. Ничего хорошего не получилось. Опять то длинное число, остальное по-прежнему. .... Непонятно, я в окне данных терминала проверял там показывает на тех барах где есть сигнал один буфер равен нулю второй равен цене хай или лоу, в зависимости от вида сигнала. ... Надо разбираться в чем дело. Что такое форекс? Это там где деньги лежат. Link to post Share on other sites
alexvv 0 Share Posted October 2, 2013 Непонятно, я в окне данных терминала проверял там показывает на тех барах где есть сигнал один буфер равен нулю второй равен цене хай или лоу, в зависимости от вида сигнала.... Надо разбираться в чем дело. Верно. А остальное время - длинное число. Надо добиться, чтобы сигнал был как на автономном индикаторе - на текущем баре. Предлагаю перейти в скайп. А то сильно засоряем форум. Я скинул в личку свой ник в скайпе.. Link to post Share on other sites
Programmer 33 Share Posted October 10, 2013 Ветка закрыта. Продолжение темы находится здесь: https://alpariforum.com/showthread.php?t=81935 Link to post Share on other sites
Recommended Posts