Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
А где в условии сказано, что первое должно быть с начала или с конца?
Вы глаза компотом промойте и еще раз внимательно перечитайте первый пост. О чем там идет речь?
Или привыкли не читая условий задачи, телепатически решать за других, что должно быть, а чего не должно?
Я благодарю всех, кто откликнулся. Но обсуждение немного отошло от темы. Проблема в том, что без условий, удаление работает. Соответственно удаляются все вновь устанавливаемые ордера. Но стоит поставить условие и все, удаление не работает. Не обязательно именно условие <ТР, можно тупо задать какую-нибудь величину в пунктах, но все-равно не срабатывает. Не пойму почему. Поэтому и обратился за помощью.
вот функция удаления всех отложек
int close()
{
for(int i=OrdersTotal(); i+1>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true)
OrderDelete(OrderTicket());
}
}
Выход за пределы массива (списка ордеров в данном случае). Ордер с номером OrdersTotal() не существует.
К тому же суммирование в условии - просто "тормоз" для цикла, хотя и малосущественный.
Удачи
Не получается удаление отложенных ордеров. В данном куске советника удаление должно быть при условии, что цена опустилась ниже ТР, но отложенный ордер не сработал. Перебрал несколько готовых скриптов, экспериментировал, ничего не вышло. Помогите.
А что Вы хотите ?
Вы вообще то справку по языку читали ? Особро обратите внимание на синтаксис.
Вы циклом присваиваете переменной Ticket одно и то же значение, которое просто указывает ЗА пределы списка ордеров, и еще используете переменные, вне зоны их смысла. Переменная цикла i используется Вами ВНЕ пределов цикла.
Здесь цикл закончился.
Удачи
Я благодарю всех, кто откликнулся. Но обсуждение немного отошло от темы. Проблема в том, что без условий, удаление работает. Соответственно удаляются все вновь устанавливаемые ордера. Но стоит поставить условие и все, удаление не работает. Не обязательно именно условие <ТР, можно тупо задать какую-нибудь величину в пунктах, но все-равно не срабатывает. Не пойму почему. Поэтому и обратился за помощью.
В ф-ции старт есть проверка на количество ордеров.
if (total < 1)
CheckForOpen();
Соответственно если установлен хотя бы один ордер, то вызов ф-ции CheckForOpen на следующем тике не происходит, и не важно какие условия она содержит.
А что Вы хотите ?
Вы вообще то справку по языку читали ? Особро обратите внимание на синтаксис.
Вы циклом присваиваете переменной Ticket одно и то же значение, которое просто указывает ЗА пределы списка ордеров, и еще используете переменные, вне зоны их смысла. Переменная цикла i используется Вами ВНЕ пределов цикла.
Здесь цикл закончился.
Удачи
То, что в прилагаемом коде - это уже извращения или фантазии, так как по логическим правилам не работает. Просто не восстановил код до нормального.
В ф-ции старт есть проверка на количество ордеров.
if (total < 1)
CheckForOpen();
Соответственно если установлен хотя бы один ордер, то вызов ф-ции CheckForOpen на следующем тике не происходит, и не важно какие условия она содержит.
Вот код
В обоих случаях удалений, что выше, что ниже, если убрать условия ( if (Ask < OrderTakeProfit()) или (Open[0] < OrderTakeProfit()) ) ордера удаляются все подряд без разбора. Но стоит поставить условия, как только выставляется отложенный ордер, который не срабатывает продолжительное время и следовательно его при определенных условиях нужно удалить, удаление не срабатывает.Перенесите часть кода, которая отвечает за удаление в отдельную ф-цию.
И вызывайте её, если условие total < 1 не выполняется. Например так:
if (total < 1) CheckForOpen();
else CheckForDelete();
Вот код
В обоих случаях удалений, что выше, что ниже, если убрать условия ( if (Ask < OrderTakeProfit()) или (Open[0] < OrderTakeProfit()) ) ордера удаляются все подряд без разбора. Но стоит поставить условия, как только выставляется отложенный ордер, который не срабатывает продолжительное время и следовательно его при определенных условиях нужно удалить, удаление не срабатывает.А чему должна быть равна переменная "price", если условие
не выполняется ?
И еще - Вы ее (переменную price) определили в блоке if(), а используете ВНЕ блока (ИМХО - зря разработчики не контролируют зону видимости переменных в МКЛ4) - это так задумано ?
Удачи
А чему должна быть равна переменная "price", если условие
не выполняется ?
И еще - Вы ее (переменную price) определили в блоке if(), а используете ВНЕ блока (ИМХО - зря разработчики не контролируют зону видимости переменных в МКЛ4) - это так задумано ?
Удачи
Объясню, почему используется price. Она используется в функции OrderSend() в качестве определения цены. Может быть это смешно, но только в этом случае устанавливается SL. В ином случае, если в функции OrderSend() прописать Close[1]+0.0012, выставляется только TP. В данном случае, на мою проблему это не влияет.
Объясню, почему используется price. Она используется в функции OrderSend() в качестве определения цены. Может быть это смешно, но только в этом случае устанавливается SL. В ином случае, если в функции OrderSend() прописать Close[1]+0.0012, выставляется только TP. В данном случае, на мою проблему это не влияет.
Вы не поняли вопрос: у Вас переменная price инициализируется только в случае истинности условия и зона ее видимости - это условие if(). Все остальное находится ВНЕ if() и переменная price хоть и описана ВНУТРИ if(), но используется ВНЕ if(). Я и спрашиваю - это так задумано ? Или ошибка в реализации ?
Успехов