Помогите с советником

 

Всем привет! Подскажите советом или поправьте, что Я делаю не так. Ситуация такая: есть индикатор JMA с разными периодами (14 и 21 (индикатор прилагаю)). Захотел попробовать сделать эксперт на его основе который при пересечении линий (см скрин) покупает 14 идет снизу вверх и закрывает прошлый ордер, и наоборот если сверху вниз продает. График USD-JPU 30min. Но при запуске он неправильно срабатывает-т.е при покупка и продажа поздно срабатывают а иногда и просто неработает. Грешу на неправильный вызов индикатора. Хочется сделать, чтобы при пересечении он в течении 1-2 мин срабатывал. (jma- индикатор, JMA_S-советник)
Заранее спасибо всем кто откликнется.




Файлы:
1.rar  5 kb
 
Serewka >>:

Всем привет! Подскажите советом или поправьте, что Я делаю не так. Ситуация такая: есть индикатор JMA с разными периодами (14 и 21 (индикатор прилагаю)). Захотел попробовать сделать эксперт на его основе который при пересечении линий (см скрин) покупает 14 идет снизу вверх и закрывает прошлый ордер, и наоборот если сверху вниз продает. График USD-JPU 30min. Но при запуске он неправильно срабатывает-т.е при покупка и продажа поздно срабатывают а иногда и просто неработает. Грешу на неправильный вызов индикатора. Хочется сделать, чтобы при пересечении он в течении 1-2 мин срабатывал. (jma- индикатор, JMA_S-советник)
Заранее спасибо всем кто откликнется.




Таких советников написано сотни. Посмотри по поиску. А если хочешь упростить задачу то лучше вставь код в тему))) Есть такая кнопка вверху SRC (как мне посоветовали).

 
rabanik >>:

Таких советников написано сотни. Посмотри по поиску. А если хочешь упростить задачу то лучше вставь код в тему))) Есть такая кнопка вверху SRC (как мне посоветовали).

К сожалению полностью код не вставляеться поэтому пишу как Я обращаюсь к JMA

     int       Length=14;
     
   

   double SEma0 = iCustom(NULL,30,"JMA",Length,0,0);
   double SEma1 = iCustom(NULL,30,"JMA",Length,0,1);


   Length=21;
   
   double LEma0 = iCustom(NULL,30,"JMA",Length,0,0);
   double LEma1 = iCustom(NULL,30,"JMA",Length,0,1);


 if(SEma0-LEma0>0 && SEma1-LEma1<0)


Проверки

if(SEma0-LEma0>0 && SEma1-LEma1<0)
if(SEma0<LEma0 && SEma1>LEma1)
 
...........
Файлы:
ytg_2ma_x.mq4  4 kb
 
Serewka >>:

..как Я обращаюсь к JMA..

1. Вот как описывает пересечения Vinin (на примере стохастика).

2. Я бы описал пересечения попроще, так, как привык:

if(SEma0>LEma0 && SEma1<=LEma1) buy=1;
if(SEma0<LEma0 && SEma1>=LEma1) sell=1; 

2. Некрасиво определяется Length, дальше невозможно работать с ее значениями. Лучше будет так:

extern int Length1=14;
extern int Length2=21;
......................
 

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

   int Length1=14;
   int Length2=21;
   

   double SEma0 = iCustom(NULL,30,"JMA",Length1,0,0,0);
   double SEma1 = iCustom(NULL,30,"JMA",Length1,0,0,1);
   
   Print("SEma0", SEma0);
   Print("SEma1", SEma1);
   

   double LEma0 = iCustom(NULL,30,"JMA",Length2,0,0,0);
   double LEma1 = iCustom(NULL,30,"JMA",Length2,0,0,1);
   
   Print("LEma0", LEma0);
   Print("LEma1", LEma1);


if(SEma0>LEma0 && SEma1<=LEma1)
ticket=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,Ask-StopLoss*Point,Ask+TakeProfit*Point,"EMA BUY",MAGIC,0,CLR_NONE);

if(SEma0<LEma0 && SEma1>=LEma1)
ticket=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,Bid+StopLoss*Point,Bid-TakeProfit*Point,"EMA SELL",MAGIC,0,CLR_NONE);


Файлы:
jma_s.mq4  9 kb
 
Serewka писал(а) >>

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

Нормальная вещь. На нулевом баре дребезг и бывает много ложных сигналов. Надо бы для анализа брать 1 и 2 бар хотя бы. Или использовать вместо цен закрытия цены открытия.

 
Vinin >>:

Нормальная вещь. На нулевом баре дребезг и бывает много ложных сигналов. Надо бы для анализа брать 1 и 2 бар хотя бы.Или использовать вместо цен закрытия цены открытия.

Извините, за глупые вопросы, но Я лишь 3-4 дня "балуюсь" и этим языком.

Надо бы для анализа брать 1 и 2 бар хотя бы.

Т.е. нужно вместо "shift" где сейчас у меня "0" и "1" ставить минимум "1" и "2"? Пробовал сколько не ставить - ложное срабатывание -)

Или использовать вместо цен закрытия цены открытия.

Как это можно сделать не подскажете? Заранее очень благодарен.

Или покажите какой-то пример с функцией iCustom

 
Serewka >>:

..Или покажите какой-то пример с функцией iCustom

На примере Вашего советника. Так Вы сможете оперативно изменять в свойствах советника параметры индикатора и номер бара, с которого берете сигнал. Обычно берут ненулевой (первый) бар, поскольку, как Вам и объясняли, на незакрытом (нулевом) баре с каждым тиком показания индикатора изменяются, что приводит к многократному выполнению прописанного условия. При этом по закрытию бара сигнал может исчезнуть и мы останемся в дураках с открытой в противоположную сторону позицией. На закрытом баре ничего уже не изменится (если индикатор не переписывает значения). Платой за правду служит задержка открытия. На графике Вы увидите, что ордер открылся на бар позже, однако только этот сигнал является гарантированно правильным. Это одна из причин, по которым красивые индикаторы при использовании в советнике показывают совсем не то, что Вы видели на чарте, особенно на старших ТФ. Глядя на линию индикатора всегда ищите глазами следующий бар, именно на нем Вы сможете открыться.

   extern int Length1  = 14;
   extern int Length2  = 21;
   extern int SignalBar= 1; //номер бара, с которого берется сигнал

   double SEma0 = iCustom(NULL,30,"JMA",Length1,0,0,SignalBar+0);
   double SEma1 = iCustom(NULL,30,"JMA",Length1,0,0,SignalBar+1);
   
   double LEma0 = iCustom(NULL,30,"JMA",Length2,0,0,SignalBar+0);
   double LEma1 = iCustom(NULL,30,"JMA",Length2,0,0,SignalBar+1);
 
granit77 >>:


2. Я бы описал пересечения попроще, так, как привык:


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

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


 
С удовольствием бы увидел лучший вариант, этот работает, но действительно дает ложняки, хотя и приводится в учебнике.