А зачам номера? Пользуйся флагами. Первое, что приходит в голову- проверяй после каждой операции количество денег на счёте и количество открытых ордеров. Если ордеров открытых нет и денег стало больше- удаляй противоположный(то есть все оставшиеся). Наверняка есть куча более изящных решений.
Суть проблемы:
У меня по неким сигналам выставляются 2 отлож. ордера - байстоп и селлстоп, с тейкпрофитом 30 пунктов и стоплоссом на уровне противоположного ордера. То есть получается, что когда закрывается, например, бай с убытком, открыватся селл. Если бай закрылся по тейкпрофиту, ордер на селл удаляется (ну и, соответственно, наоборот).
Как вызывать номера ордера при тестировании стратегии для последующего их исправления и удаления? Ничё не получается... Заранее благодарен.
У меня по неким сигналам выставляются 2 отлож. ордера - байстоп и селлстоп, с тейкпрофитом 30 пунктов и стоплоссом на уровне противоположного ордера. То есть получается, что когда закрывается, например, бай с убытком, открыватся селл. Если бай закрылся по тейкпрофиту, ордер на селл удаляется (ну и, соответственно, наоборот).
Как вызывать номера ордера при тестировании стратегии для последующего их исправления и удаления? Ничё не получается... Заранее благодарен.
Если под номером ордера понимается его тикет, а не порядковый номер, то можно, например, так для открытых ордеров:
total=OrdersTotal(); for(cnt=0;cnt<total;cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if( (OrderSymbol()==Symbol()) && (OrderMagicNumber()== exp_mg_numb) ) order_id = OrderTicket();//cnt; ..................................................................................... }
и так для уже закрытых:
total = HistoryTotal(); for(cnt=0;cnt<total;cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_HISTORY); if( (OrderSymbol()==Symbol()) && (OrderMagicNumber()== exp_mg_numb) ) order_id = OrderTicket();//cnt; ..................................................................................... }
если же порядковый номер, то он получается как счетчик - в переменной cnt.
Удачи и попутных трендов.
Спасибо!
Я это организовал несколько другим способом... Теперь у меня возник другой вопрос: где и когда надо использовать return(0) при закрытии конструкции if? Я посмотрел несколько экспертов (в том числе и расписаный пример), но общего правила мне вычленить так и не удалось...
Я это организовал несколько другим способом... Теперь у меня возник другой вопрос: где и когда надо использовать return(0) при закрытии конструкции if? Я посмотрел несколько экспертов (в том числе и расписаный пример), но общего правила мне вычленить так и не удалось...
Спасибо!
Я это организовал несколько другим способом... Теперь у меня возник другой вопрос: где и когда надо использовать return(0) при закрытии конструкции if? Я посмотрел несколько экспертов (в том числе и расписаный пример), но общего правила мне вычленить так и не удалось...
Я это организовал несколько другим способом... Теперь у меня возник другой вопрос: где и когда надо использовать return(0) при закрытии конструкции if? Я посмотрел несколько экспертов (в том числе и расписаный пример), но общего правила мне вычленить так и не удалось...
Не понятен вопрос. Если Вам нужно прекратить цикл, то используется break; При вызове return(0) произойдет выход из процедуры, из которой это ретурн вызван. Если это в процедуре старт, то произойдет остановка советника и по следующему тику его перезапуск. Многие примеры были перенесены из МТ3 - там ретурн был обязательным после выполнения торговых функций и эти функции не возвращали коды ошибок. В МТ4 это не обязательно. То есть в каждом конкретном случае рекомендации могут различаться.
Удачи и попутных трендов.
И ещё (возможно этим уже интересовались, но я так и не нашёл ответа): упомянутые выше 2 ордера должны выставляться одновременно, то есть
t_buy=OrderSend(Symbol(),OP_BUYSTOP,0.1,h,0,l,h+50*Point,"qqq",16384,0,Green);
t_sell=OrderSend(Symbol(),OP_SELLSTOP,0.1,l,0,h,l-50*Point,"qqq",16385,0,Blue);
но выставляется только 1. Я тут слышал, что должен быть какой-то таймаут между их выставлением... В режиме тестера стратегий это тоже должно учитываться?
t_buy=OrderSend(Symbol(),OP_BUYSTOP,0.1,h,0,l,h+50*Point,"qqq",16384,0,Green);
t_sell=OrderSend(Symbol(),OP_SELLSTOP,0.1,l,0,h,l-50*Point,"qqq",16385,0,Blue);
но выставляется только 1. Я тут слышал, что должен быть какой-то таймаут между их выставлением... В режиме тестера стратегий это тоже должно учитываться?
А что говорит GetLastError()?
Пардон, вру: еррор или 130, или 0!
Если GetLastError возвращает 0, то номер тикета должен быть больше 0. Совершенно определённо.
Поставьте эту проверку сразу после выставления соответствующего ордера. А не после всех команд.
Поставьте эту проверку сразу после выставления соответствующего ордера. А не после всех команд.
Если GetLastError возвращает 0, то номер тикета должен быть больше 0. Совершенно определённо.
Поставьте эту проверку сразу после выставления соответствующего ордера. А не после всех команд.
Не знаю, как "должно быть", но я когда-то несколько раз нарывался на отрицательный тикет и 0-й GetLastError.Поставьте эту проверку сразу после выставления соответствующего ордера. А не после всех команд.
У меня на всех торговых операциях идёт примерно такая проверка:
//---- Собственно, открываемся Send_Result = OrderSend ( Send_Symbol, Send_OrderType, Send_Volume, Send_OpenPrice, Send_Slippage, Send_StopLoss, Send_TakeProfit, Send_Comment, Send_MagicNumber, Send_Expiration, Send_Color ); Send_GetLastError = GetLastError(); //---- Если есть ошибка, if ( Send_Result < 0 || Send_GetLastError > 0 ) {
Неоднократно встречал сообщения типа "ордерсенд накрылся, гетластеррор = 0 (ноу еррор)"
Закономерности не нашёл, ситуацию детально не разбирал...
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
У меня по неким сигналам выставляются 2 отлож. ордера - байстоп и селлстоп, с тейкпрофитом 30 пунктов и стоплоссом на уровне противоположного ордера. То есть получается, что когда закрывается, например, бай с убытком, открыватся селл. Если бай закрылся по тейкпрофиту, ордер на селл удаляется (ну и, соответственно, наоборот).
Как вызывать номера ордера при тестировании стратегии для последующего их исправления и удаления? Ничё не получается... Заранее благодарен.