Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1504
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Здравствуйте, я еще совсем новичок впрограммировании наMQL5 и застрял на написании кода для советника по сетке. В принципе, я хочу, чтобы советник делал следующее:
Шаг 1. Если нет открытых позиций и отложенных ордеров, советник должен вызвать функцию OpenNewTrade()
Шаг 2. Если есть открытые позиции или отложенные ордера, советник должен закрыть все остальные позиции на продажу и удалить все лимитные ордера на покупку, когда позиция на продажу достигнет тейк-профита. Также он должен закрывать все остальные позиции на покупку и удалять все лимитные ордера на продажу, когда позиция на покупку достигает тейк-профита.
Шаг 3. Если шаг 2 выполнен правильно, то открытых позиций и отложенных ордеров больше не будет, поэтому шаг 1 вызывается снова в цикле.
ПРОБЛЕМА
==========
Все функции работают нормально, за исключением того, что функция закрытия позиций, как в шаге 2 выше, не работает должным образом, поэтому я не знаю, есть ли ошибка в логике кода. Например, всякий раз, когда позиция на продажу достигает тейк-профита, лимитные ордера на покупку удаляются корректно, но другая позиция (позиции) на продажу удаляется вместе с позицией (позициями) на покупку. Так не должно быть, поскольку я хочу, чтобы советник работал строго в соответствии с шагом 2. Ниже приведен код советника:
Также я не знаю, как сделать так, чтобы советник задавал свое имя в качестве торговых комментариев. Было бы здорово, если бы вы помогли мне с этим, так как я хочу, чтобы сделки этого советника отличались от сделок других советников. Спасибо.Подскажите начинающему. Не могу додуматься как можно преобразовать строку.
Как заменить символы в "var_1" подстроки от заданного индекса, на символы "var_2'' ?
Позиция на продажу, закрывается сделкой на покупку.
Этот код у вас проверяет закрытие позиции Sell.
m_deal.DealType() == DEAL_TYPE_BUYПопробуйте так.
К тому же у вас флаг удаления позиций и ордеров, после первого удаления всегда true, так как нигде в коде вы его после удаления позиций и ордеров не делаете false.
Вроде по логике, должно быть так.
К тому же у вас флаг удаления позиций и ордеров, после первого удаления всегда true, так как нигде в коде вы его после удаления позиций и ордеров не делаете false.
Вроде по логике, должно быть так.
Александр, а то, что эти флаги инициализированы false на глобальном уровне, разве это в счёт не идёт?
С уважением, Владимир.
Александр, а то, что эти флаги инициализированы false на глобальном уровне, разве это в счёт не идёт?
С уважением, Владимир.
Один раз false. А потом они всегда true и на каждом тике будут удалять отложенные ордера и позиции.
Один раз false. А потом они всегда true и на каждом тике будут удалять отложенные ордера и позиции.
Ну, да, логично. Спасибо за разъяснение.
С уважением, Владимир.
Вот структура моего запроса. Пожалуйста, помогите.
При запуске советника в MT5 Strategy Tester я постоянно получаю ошибку "failed market sell 0.01 EURUSD [Unsupported filling mode]". Код результата (retcode) возвращается 10030.
Вот структура моего запроса. Пожалуйста, помогите.
Попробуйте поменять строку
на строку
request.type_filling = ORDER_FILLING_FOK;И странно, что компилятор выдает только одну ошибку. Хотя, если _Points и order_success были проинициализированы на глобальном уровне, то тогда, пардон!
С уважением, Владимир.
Попробуйте изменить строку
на строку
И странно, что компилятор выдает только одну ошибку. Хотя, если _Points и order_success были инициализированы на глобальном уровне, то, пардон!
С уважением, Владимир.
Спасибо за предложение, но у меня раньше было ORDER_FILLING_FOK и я получал ту же ошибку. Я прочитал, что не все символы поддерживают все режимы заполнения, поэтому я изменил его на тот, что указан в исходном сообщении, чтобы убедиться, что в запросе указаны только разрешенные режимы заполнения.
Да, я просто заменил имена переменных для этого форума, чтобы вы не осуждали мои странные имена переменных. lol.
Спасибо за предложение, но у меня раньше было ORDER_FILLING_FOK и я получал ту же ошибку. Я прочитал, что не все символы поддерживают все режимы заполнения, поэтому я изменил его на тот, что указан в исходном сообщении, чтобы убедиться, что в запросе указаны только разрешенные режимы заполнения.
SymbolInfoInteger(_Symbol,SYMBOL_FILLING_MODE) возвращает все разрешённые режимы заполнения, а указать в запросе надо один конкретный из разрешённых.