Обратиться к ордеру можно с помощью команды OrderSelect по его номеру.
Вопрос, возможно ли заранее знать номера существующих ордеров, что бы не перебирать их все? Например запоминать этот номер при открытии нового ордера.
Я так понимаю этот номер присваивается по порядку начиная с 1. Какие могут быть нюансы?
За ранее спасибо.
Обратиться можно по его индексу в списке ордеров (при переборе в цикле), либо по его тикету (если он заранее известен)
Не желательно - при любом сбое (перезапуске советника, перезагрузке терминала, сбое системы, и т.д.), запомненные тикеты могут быть утеряны. Значит нужно их хранить либо в глобальных переменных терминала, либо в файле, что реализуемо, но сложнее обычного перебора, который делается не на каждом тике, а лишь по мере надобности.
Нет. Начиная с номера 1, и по порядку возрастания - только в тестере.
Обратиться можно по его индексу в списке ордеров (при переборе в цикле), либо по его тикету (если он заранее известен)
Не желательно - при любом сбое (перезапуске советника, перезагрузке терминала, сбое системы, и т.д.), запомненные тикеты могут быть утеряны. Значит нужно их хранить либо в глобальных переменных терминала, либо в файле, что реализуемо, но сложнее обычного перебора, который делается не на каждом тике, а лишь по мере надобности.
Нет. Начиная с номера 1, и по порядку возрастания - только в тестере.
Пожалуйста.
А возможно при запуске программы в теле OnInit() пробежаться в цикле OrdersTotal() и собрать всю инфу по открытым ордерам, в частности OrderTicket()?
string orders[][3];
intOnInit() {
for (int n = OrdersTotal() + 1; n >= 0; n--) {
if (OrderSelect(n, SELECT_BY_POS, MODE_TRADES)) {
int i = (ArraySize(orders) / 3);
ArrayResize(orders, i + 1);
orders[i][0] = IntegerToString(OrderTicket());
orders[i][1] = IntegerToString(OrderType());
orders[i][2] = DoubleToString(OrderOpenPrice(), Digits);
}
}
return(INIT_SUCCEEDED);
}
При автоматическом закрытии ордера по TP или SP можно получить данные этого ордера?
Можно. А далее что? Ордера могут меняться со временем, и информация по ним, собранная при инициализации, устареет.
Нужно найти последний закрытый ордер и получить всю необходимую по нему информацию.
Я при BUY, SELL сохраняю мне нужные данные в массив, далее в тике кручу этот массив и в зависимости от цены делаю мне необходимые изменения (Перенос SL в безубыток, закрытие ордера после разворота и т.п.) обратившись к нужному ордеру по тикету.
Но у меня имеются ордера с TP и SL, которые без моего ведома могут закрыться. Вариант каждый тик смотреть последний закрывшийся ордер и искать его в моём массиве, для корректировки этого массива мне не нравится.
"Ордера могут меняться со временем, и информация по ним, собранная при инициализации, устареет." Я так полагаю это и имеется ввиду - закрытие ордера?
Вижу только один вариант - в тике крутить 2 цикла, мой с ордерами и OrdersTotal() и это мне тоже не нравится.
"но сложнее обычного перебора, который делается не на каждом тике, а лишь по мере надобности." Пожалуйста, поделитесь этим алгоритмом.
Все, нашел ошибку. Некоторым нужно озвучить свой вопрос, чтобы понять потом, как же он ошибся.
К сожалению к таким персонажам отношусь, видимо, и я. (((
OrderSend
OrderSelect
Я так полагаю вы имеете ввиду по номеру тикета?
Есть "подводные камни"?
Приветствую!
Обратиться к ордеру можно с помощью команды OrderSelect по его номеру.
Вопрос, возможно ли заранее знать номера существующих ордеров, что бы не перебирать их все? Например запоминать этот номер при открытии нового ордера.
Я так понимаю этот номер присваивается по порядку начиная с 1. Какие могут быть нюансы?
За ранее спасибо.
А возможно при запуске программы в теле OnInit() пробежаться в цикле OrdersTotal() и собрать всю инфу по открытым ордерам, в частности OrderTicket()?
При автоматическом закрытии ордера по TP или SP можно получить данные этого ордера?
А возможно при запуске программы в теле OnInit() пробежаться в цикле OrdersTotal() и собрать всю инфу по открытым ордерам, в частности OrderTicket()?
При автоматическом закрытии ордера по TP или SP можно получить данные этого ордера?
Я при BUY, SELL сохраняю мне нужные данные в массив, далее в тике кручу этот массив и в зависимости от цены делаю мне необходимые изменения (Перенос SL в безубыток, закрытие ордера после разворота и т.п.) обратившись к нужному ордеру по тикету.
Но у меня имеются ордера с TP и SL, которые без моего ведома могут закрыться. Вариант каждый тик смотреть последний закрывшийся ордер и искать его в моём массиве, для корректировки этого массива мне не нравится.
"Ордера могут меняться со временем, и информация по ним, собранная при инициализации, устареет." Я так полагаю это и имеется ввиду - закрытие ордера?
Вижу только один вариант - в тике крутить 2 цикла, мой с ордерами и OrdersTotal() и это мне тоже не нравится.
"но сложнее обычного перебора, который делается не на каждом тике, а лишь по мере надобности." Пожалуйста, поделитесь этим алгоритмом.
А возможно при запуске программы в теле OnInit() пробежаться в цикле OrdersTotal() и собрать всю инфу по открытым ордерам, в частности OrderTicket()?
При автоматическом закрытии ордера по TP или SP можно получить данные этого ордера?
А зачем всё это переводить в строку??? Тип string?
А возможно при запуске программы в теле OnInit() пробежаться в цикле OrdersTotal() и собрать всю инфу по открытым ордерам, в частности OrderTicket()?
При автоматическом закрытии ордера по TP или SP можно получить данные этого ордера?
А зачем всё это переводить в строку??? Тип string?