Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1505
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Здравствуйте. Спасибо за ваш ответ. Ниже приведен вставленный код в соответствии с запросом.
Я также пытаюсь реализовать процесс с помощью функции onTradeTransaction() из mql5. Программа компилируется нормально, но лимитные ордера на покупку не удаляются, когда нет сделки на покупку. Мне кажется, я неправильно понимаю логику. Пожалуйста, кто-нибудь должен меня поправить. Смотрите код ниже
Здравствуйте. Спасибо за ответ. Ниже приведен вставленный код в соответствии с запросом.
Здравствуйте.
Похоже, что у вас в коде не хватает выбора позиции с индексом i в циклах поиска открытых позиций. Без нее не понятно, тип какой позиции возвращает PositionGetInteger(POSITION_TYPE).
Аналогично надо добавить выбор позиции и в код поиска позиций SELL.
for(int i = 0; i < totalPositions; i++) { ulong ticket = PositionGetTicket(i); if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY){ hasOpenBuyPosition = true; break; } }
Здравствуйте.
Похоже, что в вашем коде отсутствует выбор позиции с индексом i в цикле поиска открытых позиций. Без него непонятно, какой тип позиции возвращает PositionGetInteger(POSITION_TYPE).
Аналогично следует добавить выбор позиции в код поиска позиций SELL.
Спасибо Юрию Быкову. Все отлично работает. Спасибо
Ой, я извиняюсь, невнимательно прочитал первое предложение.
По поводу ошибки: размер массивов high и low у вас устанавливается внутри функции iGetArray() и CopyRates(). Но там размер, по идее, должен устанавливаться значению переменной count, которая равна 300. А дальше в цикле вы хотите получить доступ к 1000 элементов. Мне кажется, вызов iGetArray() и CopyRates() вам не нужен. Достаточно вызвать
Спасибо все заработало.
Есть старая проблема, может подскажите почему так происходит.
Тема такая, натягиваем сетку фибо, берем время верхнего бара и время нижнего.
С помощью полученных индексов получаем кол-во баров между верхней и нежней линией фибо.
Но, если тоже самое проделать через цикл, всегда выходит на один бар меньше.
Как сделать что бы было одинаково ?
Как видно на скрине, верхний индекс линии фибо = 19... нижний 29, получается 10 баров, по факту их 11, метод bars посчитал правильно, а цикл нет.. как быть
Есть старая проблема, может подскажите почему так происходит.
Тема такая, натягиваем сетку фибо, берем время верхнего бара и время нижнего.
С помощью полученных индексов получаем кол-во баров между верхней и нежней линией фибо.
Но, если тоже самое проделать через цикл, всегда выходит на один бар меньше.
Как сделать что бы было одинаково ?
Как видно на скрине, верхний индекс линии фибо = 19... нижний 29, получается 10 баров, по факту их 11, метод bars посчитал правильно, а цикл нет.. как быть
Видимо, "проблема заборного столба", https://ru.wikipedia.org/wiki/Ошибка_на_единицу
Здравствуйте, я еще совсем новичок впрограммировании на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 на глобальном уровне, разве это в счёт не идёт?
С уважением, Владимир.