Circle 147 Posted October 2, 2013 ...А сигнал то от индикатора получился неважный. Отстает непредсказуемо, то на один бар, то на несколько. На графике смотрю - стрелка появляется, а сигнала нет еще бар или несколько. Где-то мы промахнулись. В смысле, индикатор стрелку рисует, а советник открывает ордер с опозданием на несколько баров? При чем здесь ObjectCreate() эта функция используется только для рисования на графике. Что такое форекс? Это там где деньги лежат. Share this post Link to post Share on other sites
alexvv 0 Posted October 2, 2013 В смысле, индикатор стрелку рисует, а советник открывает ордер с опозданием на несколько баров? Да, причем количество баров разное. Надо использовать ObjectCreate() из этой - же функции. Вот только как - не соображу. Где-то мы промахнулись. Share this post Link to post Share on other sites
Circle 147 Posted October 2, 2013 Да, причем количество баров разное. Тут уже вам надо смотреть сам советник а не индикатор. Если в буфере индикатора есть сигнал, а советник прочитав этот сигнал ордер не открывает или открывает с запозданием значит тут дело в советнике, я предполагаю. Надо использовать ObjectCreate() из этой - же функции. Вот только как - не соображу. Где-то мы промахнулись. При чем тут ObjectCreate(), эта функция рисует различные графические элементы на графике. Что такое форекс? Это там где деньги лежат. Share this post Link to post Share on other sites
alexvv 0 Posted October 2, 2013 Тут уже вам надо смотреть сам советник а не индикатор.Если в буфере индикатора есть сигнал, а советник прочитав этот сигнал ордер не открывает или открывает с запозданием значит тут дело в советнике, я предполагаю. При чем тут ObjectCreate(), эта функция рисует различные графические элементы на графике. В том то и дело. что в буфере сигнал появляется с опозданием. Я это смотрю через комменты на маленькой скорости теста. А советника, как такового нет. Только что написал для теста индикатора. Открыть туда, открыть сюда по сигналу индикатора и всё. Примитив. Share this post Link to post Share on other sites
Circle 147 Posted October 2, 2013 Примерный алгоритм советника у вас должен быть такой. BuySignal=iCustom(...,NBufBuy,NBar); SellSignal=iCustom(...,NBufSell,NBar); Где NBufBuy Номер сигнального буфера на Buy NBufSell Номер сигнального буфера на Sell NBar номер бара, 0 - текущий бар. Далее уже if (BuySignal>0) { .... закрыть селл открыть бай } if (SellSignal>0) { .... закрыть бай. открыть селл } Примерно как то так. Что такое форекс? Это там где деньги лежат. Share this post Link to post Share on other sites
alexvv 0 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); } Share this post Link to post Share on other sites
Circle 147 Posted October 2, 2013 В том то и дело. что в буфере сигнал появляется с опозданием.Я это смотрю через комменты на маленькой скорости теста. ... Странно. Стрелка индикатора рисуется и одновременно с этим индикаторному буферу где хранится сигнал присваивается ценовое значение. Все это делается в одной функции void drawArrow(...), если вы сделали так как я вам говорил ранее. То есть рисование стрелки и присваивание значения сигнальному буферу происходит одновременно. ... Предполагаю, что отставание сигнала от стрелки происходит из за того что индикатор вызывает сам себя несколько раз. И в момент этих дополнительных вызовов заново инициализируюся сигнальные буфера. Попробуете в том месте где вы инициализируете нулями сигнальные буфера индикатора написать дополнительное условие if (!calculating && !returningBars) { тут написать инициализацию сигнальных буферов. } Что такое форекс? Это там где деньги лежат. Share this post Link to post Share on other sites
alexvv 0 Posted October 2, 2013 Странно. Стрелка индикатора рисуется и одновременно с этим индикаторному буферу где хранится сигнал присваивается ценовое значение. Все это делается в одной функции void drawArrow(...), если вы сделали так как я вам говорил ранее. То есть рисование стрелки и присваивание значения сигнальному буферу происходит одновременно. ... Предполагаю, что отставание сигнала от стрелки происходит из за того что индикатор вызывает сам себя несколько раз. И в момент этих дополнительных вызовов заново инициализируюся сигнальные буфера. Попробуете в том месте где вы инициализируете нулями сигнальные буфера индикатора написать дополнительное условие if (!calculating && !returningBars) { тут написать инициализацию сигнальных буферов. } Сделал. Результат прежний. Попробуйте протестировать сами. Файлы прилагаю. Тест за 30.09.2013 EURUSD вторая стрелка - сигнал даже опережает. Следующая - сигнал отстает на 5 баров. 1Original RSI-EMA Signals.mq4 0_test.mq4 Share this post Link to post Share on other sites
Circle 147 Posted October 2, 2013 Сделал. Результат прежний. Попробуйте протестировать сами. Файлы прилагаю. Тест за 30.09.2013 EURUSD вторая стрелка - сигнал даже опережает. Следующая - сигнал отстает на 5 баров. Хорошо, вечером дома попробую погонять в тестере. Сейчас на работе на рабочем компе нет терминала, а личный нетбук слабоват для тестов стратегий. Что такое форекс? Это там где деньги лежат. Share this post Link to post Share on other sites
alexvv 0 Posted October 2, 2013 Хорошо, вечером дома попробую погонять в тестере.Сейчас на работе на рабочем компе нет терминала, а личный нетбук слабоват для тестов стратегий. Хорошо. А я займусь альтернативным вариантом. Есть еще один индикатор с неплохими сигналами. Попроще. С первой попытки сигналы тоже не получил. Теперь кое-чему научился. Share this post Link to post Share on other sites
alexvv 0 Posted October 2, 2013 Хорошо, вечером дома попробую погонять в тестере.Сейчас на работе на рабочем компе нет терминала, а личный нетбук слабоват для тестов стратегий. Чуть не забыл. Я тестирую на М1. В индикаторе по умолчанию - М5. И для интереса - то что рисует на тестере вместе с советником - полное безобразие. Самостоятельно он рисует на порядок лучше - стрелку ставит на текущем баре или в момент открытия нового. Share this post Link to post Share on other sites
Circle 147 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; После чего попробуйте тестировать, я у себя не тестировал боюсь займет много времени. Что такое форекс? Это там где деньги лежат. Share this post Link to post Share on other sites
alexvv 0 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. В личку я брошу свой скайп. Share this post Link to post Share on other sites
Circle 147 Posted October 2, 2013 ... Сделал. Ничего хорошего не получилось. Опять то длинное число, остальное по-прежнему. .... Непонятно, я в окне данных терминала проверял там показывает на тех барах где есть сигнал один буфер равен нулю второй равен цене хай или лоу, в зависимости от вида сигнала. ... Надо разбираться в чем дело. Что такое форекс? Это там где деньги лежат. Share this post Link to post Share on other sites
alexvv 0 Posted October 2, 2013 Непонятно, я в окне данных терминала проверял там показывает на тех барах где есть сигнал один буфер равен нулю второй равен цене хай или лоу, в зависимости от вида сигнала.... Надо разбираться в чем дело. Верно. А остальное время - длинное число. Надо добиться, чтобы сигнал был как на автономном индикаторе - на текущем баре. Предлагаю перейти в скайп. А то сильно засоряем форум. Я скинул в личку свой ник в скайпе.. Share this post Link to post Share on other sites
Programmer 33 Posted October 10, 2013 Ветка закрыта. Продолжение темы находится здесь: https://forum.alpari.com/showthread.php?t=81935 Share this post Link to post Share on other sites