Всем привет! Подскажите советом или поправьте, что Я делаю не так. Ситуация такая: есть индикатор JMA с разными периодами (14 и 21 (индикатор прилагаю)). Захотел попробовать сделать эксперт на его основе который при пересечении линий (см скрин) покупает 14 идет снизу вверх и закрывает прошлый ордер, и наоборот если сверху вниз продает. График USD-JPU 30min. Но при запуске он неправильно срабатывает-т.е при покупка и продажа поздно срабатывают а иногда и просто неработает. Грешу на неправильный вызов индикатора. Хочется сделать, чтобы при пересечении он в течении 1-2 мин срабатывал. (jma- индикатор, JMA_S-советник)
Заранее спасибо всем кто откликнется.
Таких советников написано сотни. Посмотри по поиску. А если хочешь упростить задачу то лучше вставь код в тему))) Есть такая кнопка вверху SRC (как мне посоветовали).
Таких советников написано сотни. Посмотри по поиску. А если хочешь упростить задачу то лучше вставь код в тему))) Есть такая кнопка вверху 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)
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 и условия пересечения советник нормально не работает - т.е. открывает и закрывает позиции где угодно см.скрин
Нормальная вещь. На нулевом баре дребезг и бывает много ложных сигналов. Надо бы для анализа брать 1 и 2 бар хотя бы. Или использовать вместо цен закрытия цены открытия.
Нормальная вещь. На нулевом баре дребезг и бывает много ложных сигналов. Надо бы для анализа брать 1 и 2 бар хотя бы.Или использовать вместо цен закрытия цены открытия.
Извините, за глупые вопросы, но Я лишь 3-4 дня "балуюсь" и этим языком.
Надо бы для анализа брать 1 и 2 бар хотя бы.
Т.е. нужно вместо "shift" где сейчас у меня "0" и "1" ставить минимум "1" и "2"? Пробовал сколько не ставить - ложное срабатывание -)
Или использовать вместо цен закрытия цены открытия.
Как это можно сделать не подскажете? Заранее очень благодарен.
Или покажите какой-то пример с функцией 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);
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Всем привет! Подскажите советом или поправьте, что Я делаю не так. Ситуация такая: есть индикатор JMA с разными периодами (14 и 21 (индикатор прилагаю)). Захотел попробовать сделать эксперт на его основе который при пересечении линий (см скрин) покупает 14 идет снизу вверх и закрывает прошлый ордер, и наоборот если сверху вниз продает. График USD-JPU 30min. Но при запуске он неправильно срабатывает-т.е при покупка и продажа поздно срабатывают а иногда и просто неработает. Грешу на неправильный вызов индикатора. Хочется сделать, чтобы при пересечении он в течении 1-2 мин срабатывал. (jma- индикатор, JMA_S-советник)
Заранее спасибо всем кто откликнется.