А где в условии сказано, что первое должно быть с начала или с конца?
Вы глаза компотом промойте и еще раз внимательно перечитайте первый пост. О чем там идет речь?
Или привыкли не читая условий задачи, телепатически решать за других, что должно быть, а чего не должно?
Я благодарю всех, кто откликнулся. Но обсуждение немного отошло от темы. Проблема в том, что без условий, удаление работает. Соответственно удаляются все вновь устанавливаемые ордера. Но стоит поставить условие и все, удаление не работает. Не обязательно именно условие <ТР, можно тупо задать какую-нибудь величину в пунктах, но все-равно не срабатывает. Не пойму почему. Поэтому и обратился за помощью.
Kishar>>:
Не получается удаление отложенных ордеров. В данном куске советника удаление должно быть при условии, что цена опустилась ниже ТР, но отложенный ордер не сработал. Перебрал несколько готовых скриптов, экспериментировал, ничего не вышло. Помогите.
Вы вообще то справку по языку читали ? Особро обратите внимание на синтаксис.
Вы циклом присваиваете переменной Ticket одно и то же значение, которое просто указывает ЗА пределы списка ордеров, и еще используете переменные, вне зоны их смысла. Переменная цикла i используется Вами ВНЕ пределов цикла.
Я благодарю всех, кто откликнулся. Но обсуждение немного отошло от темы. Проблема в том, что без условий, удаление работает. Соответственно удаляются все вновь устанавливаемые ордера. Но стоит поставить условие и все, удаление не работает. Не обязательно именно условие <ТР, можно тупо задать какую-нибудь величину в пунктах, но все-равно не срабатывает. Не пойму почему. Поэтому и обратился за помощью.
В ф-ции старт есть проверка на количество ордеров.
int total=OrdersTotal();
if (total < 1)
CheckForOpen();
Соответственно если установлен хотя бы один ордер, то вызов ф-ции CheckForOpen на следующем тике не происходит, и не важно какие условия она содержит.
Вы вообще то справку по языку читали ? Особро обратите внимание на синтаксис.
Вы циклом присваиваете переменной Ticket одно и то же значение, которое просто указывает ЗА пределы списка ордеров, и еще используете переменные, вне зоны их смысла. Переменная цикла i используется Вами ВНЕ пределов цикла.
Здесь цикл закончился.
Удачи
То, что в прилагаемом коде - это уже извращения или фантазии, так как по логическим правилам не работает. Просто не восстановил код до нормального.
В обоих случаях удалений, что выше, что ниже, если убрать условия ( if (Ask < OrderTakeProfit()) или (Open[0] < OrderTakeProfit()) ) ордера удаляются все подряд без разбора. Но стоит поставить условия, как только выставляется отложенный ордер, который не срабатывает продолжительное время и следовательно его при определенных условиях нужно удалить, удаление не срабатывает.
В обоих случаях удалений, что выше, что ниже, если убрать условия ( 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(). Я и спрашиваю - это так задумано ? Или ошибка в реализации ?
А где в условии сказано, что первое должно быть с начала или с конца?
Вы глаза компотом промойте и еще раз внимательно перечитайте первый пост. О чем там идет речь?
Или привыкли не читая условий задачи, телепатически решать за других, что должно быть, а чего не должно?
Я благодарю всех, кто откликнулся. Но обсуждение немного отошло от темы. Проблема в том, что без условий, удаление работает. Соответственно удаляются все вновь устанавливаемые ордера. Но стоит поставить условие и все, удаление не работает. Не обязательно именно условие <ТР, можно тупо задать какую-нибудь величину в пунктах, но все-равно не срабатывает. Не пойму почему. Поэтому и обратился за помощью.
вот функция удаления всех отложек
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(). Я и спрашиваю - это так задумано ? Или ошибка в реализации ?
Успехов