Так в чём помочь-то ? Не открываются дополнительные позиции на каждом след. уровне?
Возьмите любой советник по мартингейлу и по образцу...
Скорее всего, мешает - вот это условие : OrderType()!=OP_BUY, которое разрешает открыть не более одной позиции бай
Да и вообще, как то не так у вас всё это....
Так в чём помочь-то ? Не открываются дополнительные позиции на каждом след. уровне?
Возьмите любой советник по мартингейлу и по образцу...
Скорее всего, мешает - вот это условие : OrderType()!=OP_BUY, которое разрешает открыть не более одной позиции бай
Да и вообще, как то не так у вас всё это...
Больше одной позиции открывать и не требуется.
Ошибка заключается в том, что позиция открывается только по пересечению средних игнорируя пересечения с уровнями.
Для примера:
1. идет пересение уровня (N-uroven*2) - позиция не открывается;
2. идет пересение уровня (N-uroven*1) - позиция не открывается;
3. идет пересение средней (N) - открывается позиция.
Пожалуйста, помогите найти ошибку!
Идея в следующем:
Две средних. От медленной, через одинаковый промежуток вверх и вниз проведено какое-то количество уровней (ну скажем 5 вверх, 5 вниз). Это та же самая МА, но сдвинутая по оси Y вверх-вниз.
Таким образом, если центральная МА имеет значение N, то сдвиг на один промежуток вверх даст нам (N+uroven), на два промежутка (N+uroven*2), вниз на один (N-uroven) ну и так далее. Эти МА дают нам уровни для открытия позиции. Пересечение быстрой МА любого уровня снизу вверх - открываем BUY, если быстрая МА продолжает пересекать уровни снизу вверх то держим открытую позицию.
Описываю это следующим образом:
for (int i=-kol_urov;i<=kol_urov;i++)
if ((MaFast1>MaSlow1+uroven*Point*i && MaFast2<=MaSlow2+uroven*Point*i) && OrderType()!=OP_BUY)
OpenBuyPoz; // Открытие Buy
где uroven - расстояние между уровнями (в пунктах)
kol_urov - кол-во уровней вверх и вниз от средней
На данный момент программа открывает позицию только при пересечении центральной МА, и не видит пересечений сдвинутых уровней. Help, pls!
Если сигналы срабатывают только при пересечении быстрой машки медленной, то это происходить может только если занулить вот эти штучки:
for (int i=-kol_urov;i<=kol_urov;i++) if((MaFast1>MaSlow1+uroven*Point*i && MaFast2<=MaSlow2+uroven*Point*i) && OrderType()!=OP_BUY) OpenBuyPoz; // Открытие Buyа здесь ситуация по-моему такая - double*double*int - счётчик тоже дабл должен быть...
Ну тогда для каждого пересечения можно задать свой магик-номер при открытии позиции. (в функции OrderSend) и при пересечении проверять, если уже или нет окрытая позиция на этом уровне. Правда, придется эту проверку делать в коде столько раз, сколько у вас будет задано максимальное число уровней.
Что для реализации вышеописанного алгоритма работы нужно задействовать функцию определения наличия открытых позиций по их магику. Например, ф-ю И.Кима.
Вместо вот этого :
OrderType()!=OP_BUY
Нужно с помощью ф-и И.Кима определять, есть ли открытая позиции с магиком1, или магиком 2, ..., или магиком n, - при соответсвующем 1,2, ...,n пересечении
'Полезные функции от KimIV'
Функция ExistPositions().
Если сигналы срабатывают только при пересечении быстрой машки медленной, то это происходить может только если занулить вот эти штучки:
а здесь ситуация по-моему такая - double*double*int - счётчик тоже дабл должен быть...Спасибо за помощь! Совсем забыла о привидении типов в MQL4. В этом и была ошибка.
Всем большое спасибо за то, что не оставили мою тему без внимания.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Пожалуйста, помогите найти ошибку!
Идея в следующем:
Две средних. От медленной, через одинаковый промежуток вверх и вниз проведено какое-то количество уровней (ну скажем 5 вверх, 5 вниз). Это та же самая МА, но сдвинутая по оси Y вверх-вниз.
Таким образом, если центральная МА имеет значение N, то сдвиг на один промежуток вверх даст нам (N+uroven), на два промежутка (N+uroven*2), вниз на один (N-uroven) ну и так далее. Эти МА дают нам уровни для открытия позиции. Пересечение быстрой МА любого уровня снизу вверх - открываем BUY, если быстрая МА продолжает пересекать уровни снизу вверх то держим открытую позицию.
Описываю это следующим образом:
for (int i=-kol_urov;i<=kol_urov;i++)
if ((MaFast1>MaSlow1+uroven*Point*i && MaFast2<=MaSlow2+uroven*Point*i) && OrderType()!=OP_BUY)
OpenBuyPoz; // Открытие Buy
где uroven - расстояние между уровнями (в пунктах)
kol_urov - кол-во уровней вверх и вниз от средней
На данный момент программа открывает позицию только при пересечении центральной МА, и не видит пересечений сдвинутых уровней. Help, pls!