Jump to content
Andrew777

Напишу индикатор, советника... (БЕСПЛАТНО)

Recommended Posts

Circle
...

А сигнал то от индикатора получился неважный. Отстает непредсказуемо, то на один бар, то на несколько.

На графике смотрю - стрелка появляется, а сигнала нет еще бар или несколько.

Где-то мы промахнулись.

 

В смысле, индикатор стрелку рисует, а советник открывает ордер с опозданием на несколько баров?

 

При чем здесь ObjectCreate() эта функция используется только для рисования на графике.


Что такое форекс? Это там где деньги лежат.  :)

Share this post


Link to post
Share on other sites
alexvv
В смысле, индикатор стрелку рисует, а советник открывает ордер с опозданием на несколько баров?

Да, причем количество баров разное.

 

Надо использовать ObjectCreate() из этой - же функции.

Вот только как - не соображу.

Где-то мы промахнулись.

Share this post


Link to post
Share on other sites
Circle
Да, причем количество баров разное.

Тут уже вам надо смотреть сам советник а не индикатор.

Если в буфере индикатора есть сигнал, а советник прочитав этот сигнал ордер не открывает или открывает с запозданием значит тут дело в советнике, я предполагаю.

 

Надо использовать ObjectCreate() из этой - же функции.

Вот только как - не соображу.

Где-то мы промахнулись.

При чем тут ObjectCreate(), эта функция рисует различные графические элементы на графике.


Что такое форекс? Это там где деньги лежат.  :)

Share this post


Link to post
Share on other sites
alexvv
Тут уже вам надо смотреть сам советник а не индикатор.

Если в буфере индикатора есть сигнал, а советник прочитав этот сигнал ордер не открывает или открывает с запозданием значит тут дело в советнике, я предполагаю.

 

 

При чем тут ObjectCreate(), эта функция рисует различные графические элементы на графике.

В том то и дело. что в буфере сигнал появляется с опозданием.

Я это смотрю через комменты на маленькой скорости теста.

 

А советника, как такового нет. Только что написал для теста индикатора.

Открыть туда, открыть сюда по сигналу индикатора и всё. Примитив.

Share this post


Link to post
Share on other sites
Circle

Примерный алгоритм советника у вас должен быть такой.

 

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
Примерный алгоритм советника у вас должен быть такой.

 

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
В том то и дело. что в буфере сигнал появляется с опозданием.

Я это смотрю через комменты на маленькой скорости теста.

...

 

Странно.

Стрелка индикатора рисуется и одновременно с этим индикаторному буферу где хранится сигнал присваивается ценовое значение.

Все это делается в одной функции void drawArrow(...), если вы сделали так как я вам говорил ранее.

То есть рисование стрелки и присваивание значения сигнальному буферу происходит одновременно.

...

Предполагаю, что отставание сигнала от стрелки происходит из за того что индикатор вызывает сам себя несколько раз. И в момент этих дополнительных вызовов заново инициализируюся сигнальные буфера.

Попробуете в том месте где вы инициализируете нулями сигнальные буфера индикатора написать дополнительное условие

 

if (!calculating && !returningBars)

{

тут написать инициализацию сигнальных буферов.

}


Что такое форекс? Это там где деньги лежат.  :)

Share this post


Link to post
Share on other sites
alexvv
Странно.

Стрелка индикатора рисуется и одновременно с этим индикаторному буферу где хранится сигнал присваивается ценовое значение.

Все это делается в одной функции 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
Сделал. Результат прежний.

 

Попробуйте протестировать сами.

Файлы прилагаю.

 

Тест за 30.09.2013 EURUSD вторая стрелка - сигнал даже опережает. Следующая - сигнал отстает на 5 баров.

 

Хорошо, вечером дома попробую погонять в тестере.

Сейчас на работе на рабочем компе нет терминала, а личный нетбук слабоват для тестов стратегий.


Что такое форекс? Это там где деньги лежат.  :)

Share this post


Link to post
Share on other sites
alexvv
Хорошо, вечером дома попробую погонять в тестере.

Сейчас на работе на рабочем компе нет терминала, а личный нетбук слабоват для тестов стратегий.

Хорошо.

А я займусь альтернативным вариантом.

Есть еще один индикатор с неплохими сигналами. Попроще.

С первой попытки сигналы тоже не получил. Теперь кое-чему научился.

Share this post


Link to post
Share on other sites
alexvv
Хорошо, вечером дома попробую погонять в тестере.

Сейчас на работе на рабочем компе нет терминала, а личный нетбук слабоват для тестов стратегий.

Чуть не забыл.

Я тестирую на М1. В индикаторе по умолчанию - М5.

 

И для интереса - то что рисует на тестере вместе с советником - полное безобразие.

Самостоятельно он рисует на порядок лучше - стрелку ставит на текущем баре или в момент открытия нового.

Share this post


Link to post
Share on other sites
Circle
Чуть не забыл.

Я тестирую на М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
Я посмотрел последний выложеннный код индикатора и то что он рисует в терминале без тестирования.

Нашел некоторые недочеты .

 

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

...

Сделал. Ничего хорошего не получилось. Опять то длинное число, остальное по-прежнему.

....

 

Непонятно, я в окне данных терминала проверял там показывает на тех барах где есть сигнал один буфер равен нулю второй равен цене хай или лоу, в зависимости от вида сигнала.

...

Надо разбираться в чем дело.


Что такое форекс? Это там где деньги лежат.  :)

Share this post


Link to post
Share on other sites
alexvv
Непонятно, я в окне данных терминала проверял там показывает на тех барах где есть сигнал один буфер равен нулю второй равен цене хай или лоу, в зависимости от вида сигнала.

...

Надо разбираться в чем дело.

Верно. А остальное время - длинное число.

 

Надо добиться, чтобы сигнал был как на автономном индикаторе - на текущем баре.

 

Предлагаю перейти в скайп. А то сильно засоряем форум.

Я скинул в личку свой ник в скайпе..

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.

  • Recently Browsing   0 members

    No registered users viewing this page.

×