Как кратчайшим путем выбрать последний закрытый ордер

 

Добрый день всем;

я пытаюсь так но ошибка 4105 Ни один ордер не выбран

int total = HistoryTotal();

       if (OrderSelect(total, SELECT_BY_POS, MODE_HISTORY) == true)
         {
                              
          Print("ок ");     
         }
       else
           Print("Ошибка ", GetLastError(), " при выделении ордера ", OrderTicket());
 

Необходимо сперва проверить существование истории (HistoryTotal()>0)

Если история есть, то if (OrderSelect(total-1, SELECT_BY_POS, MODE_HISTORY))

 

HistoryTotal() нету, есть OrderHistoryTotal().


Последний закрытый ордер = 0, а не OrderHistoryTotal(). (Тут могу ошибиться, проверь)


Vinin >>:

Необходимо сперва проверить существование истории (HistoryTotal()>0)

Если история есть, то if (OrderSelect(total-1, SELECT_BY_POS, MODE_HISTORY))

Зачем проверять, ибо если OrderSelect вернет false, и так ему будет понятно что продолжать не нужно?

 
Fletcher писал(а) >>

Зачем проверять, ибо если OrderSelect вернет false, и так ему будет понятно что продолжать не нужно?

А как не проверяя понять что false?:)

Fletcher писал(а) >>

Последний закрытый ордер = 0, а не OrderHistoryTotal(). (Тут могу ошибиться, проверь)

Последний закрытый OrderHistoryTotal()-1

-----

На самом деле, единственный максимально корректный для большинства случаев метод, это перебор всех закрытых, выбор нужных по инструменту и магику, и уже из них выбор последнего по времени закрытия и запоминании его тикета. Иначе может возникнуть путаница при работе нескольких экспертов, закрытии и открытии руками и т.д.

 
Figar0 >>:

А как не проверяя понять что false?:)

Вы топик читали?

      if (OrderSelect(total, SELECT_BY_POS, MODE_HISTORY) == true)
Figar0 >>:

Последний закрытый OrderHistoryTotal()-1

Ну тогда вопрос вообще решен. Теперь хоть знать буду.

Причина обращения: