Обсуждение статьи "Пошаговое руководство по написанию советников в MQL5 для начинающих" - страница 30

 
timmytrade #:

Tester - "Unsupported filling mode"

Tried on 3 different brokers. Whats the problem?

Попробуйте заменить SYMBOL_FILLING_FOK на SYMBOL_FILLING_IOC.

С уважением, Владимир.

 
Привет, Самуал, ваша статья великолепна. А техника использования индикатора скользящей средней и ADX великолепна, потому что я протестировал ее на валютной паре EUR/US H2 в 2010.01.01 -2010.07.01 и 2017.01.01-2017.07.01. Это здорово. Это лучше, чем использовать индикатор Hummer Hanging Man + Stochastics. И это лучше, чем индикатор ThreeEMA. Спасибо. Сейчас работаю по вашему коду.
 
mirac baver ozturk #:

Привет всем (особенно уважаемому автору)

Я кодил по этой статье. Мне очень понравилось и я многому научился.

Спасибо, что написали такую информативную статью.

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

Поскольку статье уже 13 лет, я предполагаю, что код уже устарел. Может ли кто-нибудь помочь мне?

Мой код находится в файле ниже. Заранее спасибо всем.

Этот код уже работает.
 

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

Скачать с этой страницы: Пошаговое руководство по написанию эксперта на MQL5 для начинающих - MQL5 Статьи

https://www.mql5.com/en/articles/100

 

Уважаемые все;

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

Я скачал, чтобы проверить функцию и обнаружил, что программа имеет неправильный алгоритм.

Настройки: EURUSD, M1, 100USD начинаются с 2025/01/01 по 2025/01/31.

Первый ордер - ордер на продажу, затем много ордеров на покупку.

Концепция заключается в том, что должен быть только один ордер, но это происходит со строки 165.

Флаг для проверки того, есть ордер или нет, находится в 2 переменных (Buy_opned, Sell_opened).

Если сейчас уже есть ордер на продажу, то в строке 216 (Ordersend) будет создан новый ордер на покупку, даже если сейчас есть ордер на продажу.

Дождаться следующей свечи флаг Buy_open в операторе строки 172 не может быть установлен на on снова.Почему? Потому что первый ордер - sell, второй - buy.

И да, на следующей свече снова возникнет ордер на покупку в строке 216 (Ordersend) и так будет продолжаться, много ордеров на покупку возникнет до тех пор, пока не закончатся деньги.

Смотрите график здесь.



Смотрите список ордеров.


Спасибо.

Niwath Jeamphue.

 
Niwath Jeamphue #:

Дорогие все;

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

Я скачал, чтобы проверить функцию и обнаружил, что программа имеет неправильный алгоритм.

Настройки: EURUSD, M1, 100USD начинаются с 2025/01/01 по 2025/01/31.

Первый ордер - ордер на продажу, затем много ордеров на покупку.

Концепция заключается в том, что должен быть только один ордер, но это происходит из строки 165

Флаг для проверки наличия или отсутствия ордеров находится отдельно в 2 переменных флага (Buy_opned,Sell_opened).

Если сейчас уже есть ордер на продажу, то в строке 216 (Ordersend) будет создан новый ордер на покупку, даже если сейчас есть ордер на продажу.

Дождаться следующей свечи флаг Buy_open в операторе строки 172 не может быть установлен на on снова.Почему? Потому что первый ордер - sell, второй - buy.

И да, на следующей свече снова появится ордер на покупку в строке 216 (Ordersend) и так будет продолжаться, много ордеров на покупку появятся, пока не закончатся деньги.

Смотрите график здесь.



См. список заказов.


Спасибо.

Ниват Жампхуэ.

Вам не следует использовать PositionSelect(_Symbol), если вы не используете неттинговый счет.

На хеджирующем счете вам нужно правильно выбрать позицию с помощью PositionGetTicket() или PositionSelectByTicket(). Проверьте документацию.

 
Alain Verleyen #:

Не следует использовать PositionSelect(_Symbol), если вы не используете неттинговый счет.

На хеджирующем счете необходимо правильно выбрать позицию с помощью PositionGetTicket() или PositionSelectByTicket(). Проверьте документацию.

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

https://www.mql5.com/ru/articles/download/100/my_first_ea.mq5

Пожалуйста, попробуйте сами, вы поймете мою точку зрения.

Спасибо.

 
Niwath Jeamphue #:

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

https://www.mql5.com/ru/articles/download/100/my_first_ea.mq5

Пожалуйста, попробуйте сами, вы поймете мою мысль.

Спасибо.

Эта статья написана в 2010 году, в то время ВСЕ счета были неттинговыми на МТ5, в том числе и на Форекс.

Хеджирующие счета были введены в 2016 году: https: //www.mql5.com/en/articles/2299

MetaTrader 5 features hedging position accounting system
MetaTrader 5 features hedging position accounting system
  • 2016.03.21
  • www.mql5.com
In order to expand possibilities of retail Forex traders, we have added the second accounting system — hedging. Now, it is possible to have multiple positions per symbol, including oppositely directed ones. This paves the way to implementing trading strategies based on the so-called "locking" — if the price moves against a trader, they can open a position in the opposite direction.
 

Niwath Jeamphue #:

Пожалуйста, попробуйте сами, вы поймете мою точку зрения.

Спасибо.

Здравствуйте. Ваша точка зрения понятна. В прикреплённом файле изменил исходный код советника так, чтобы открывалась только одна позиция, не зависимо от того, какой будете использовать счёт - неттинг или хэдж.

С уважением, Владимир.

Файлы:
 
MrBrooklin #:

Здравствуйте. Я понимаю вашу точку зрения. В приложенном файле я изменил исходный код советника таким образом, чтобы открывалась только одна позиция, независимо от того, какой счет вы используете - неттинг или хедж.

С уважением, Владимир.

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

Я изменил алгоритм с первоначального

Снять флаг открытия покупок и продаж

If (PositionSelect(_Symbol)==true)

Если обнаружено, что это позиция на покупку, то устанавливаем флаг Buy_opened

Иначе Если найдена позиция на продажу, то установить флаг Sell_opened

Зона1 : Пытаемся открыть ордер на покупку при условии и !флаге Buy_opened

Зона2 : Пытаемся открыть ордер на продажу по условию и !флаг Sell_opened

В новом алгоритме все работает нормально.

If (PositionsTotal() > 0) return

Снимаем флаг открытия позиций на покупку и продажу

Если обнаружено, что это позиция на покупку, то устанавливаем флаг Buy_opened

Иначе Если найдена позиция на продажу, то установить флаг Sell_opened

Зона1 : Пытаемся открыть ордер на покупку при условии и !флаге Buy_opened

Зона2 : Попытаться открыть ордер на продажу по условию и !флаг Sell_opened