Нужна пауза после закрытия ордера

 
Здесь есть тема про паузу между открытиями позиций. Но мне нужно организовать паузу после закрытия позиции до открытия новой.
Попытался увидеть OrderCloseTime, но не получается.

int z= HistoryTotal();
if (OrderSelect (z,SELECT_BY_POS,MODE_HISTORY))
{
datetime oct=OrderCloseTime();
Comment ("Order Close Time is ", TimeToStr(oct,TIME_SECONDS));
}
else
Comment ("Ошибка № ", GetLastError());


Какие есть идеи?
Заранее спасибо!

 
int z= HistoryTotal();
возвращает общее количество ордеров в Истории (допустим 10). При этом список ордеров начинается с нуля. Дальше сами...

ЗЫ Даже если бы пример был корректным, не факт, что последний закрытый ордер будет находиться на позиции z.
 
Спасибо. Это я понял ещё из Документации (там тоже в примере 10. А чего десять?) А как мне выйти на номер последнего ордера в истории?
Я пробовал for(z=1,z<=0,z++)..., но результат тот же
 
Почитайте

24. Техника скользящего стопа

 
Rosh:
Почитайте

24. Техника скользящего стопа

Спасибо! Прочитал. Написал необходимый минимум

for ( int z=0;z<HystoryTotal();z++)
{
if (OrderSelect (z,SELECT_BY_POS,MODE_HISTORY))
{
datetime oct=OrderCloseTime();
Comment ("Order Close Time is ", TimeToStr(oct, TIME_SECONDS));
}
else
Comment ("Ошибка № ", GetLastError());
}

При компиляции выдает ошибку: 'HystoryTotal' - function is not defined
 
Попробуйте HistoryTotal(), пожалуй мне хватит.
 
HistoryTotal()
 
Rosh:
Попробуйте HistoryTotal(), пожалуй мне хватит.
=)))


Спасибо! Прочитал. Написал необходимый минимум

Нет, этого недостаточно.
Надо находить последний закрытый ордер, сравнивая все ордера.
Что-то типа этого:
    datetime lastclose = -1;
    int _GetLastError = 0, _OrdersTotal = HistoryTotal();
 
    for ( int z = _OrdersTotal - 1; z >= 0; z -- )
    {
        if ( !OrderSelect( z, SELECT_BY_POS, MODE_HISTORY ) )
        {
            _GetLastError = GetLastError();
            Print( "OrderSelect( ", z, ", SELECT_BY_POS, MODE_HISTORY ) - Error #", _GetLastError );
            continue;
        }
        if ( OrderMagicNumber() != _MagicNumber ) continue;
        if ( OrderSymbol() != _Symbol ) continue;
        if ( OrderCloseTime() <= lastclose ) continue;
        lastclose = OrderCloseTime();
    }
 
komposter:
Rosh:
Попробуйте HistoryTotal(), пожалуй мне хватит.
=)))


Спасибо! Прочитал. Написал необходимый минимум

Нет, этого недостаточно.
Надо находить последний закрытый ордер, сравнивая все ордера.


Спасибо!
Оказалось вполне достаточно исправить ошибку в HistoryTotal().
 
Итоговый код для паузы в 1 минуту:

for ( int z=0;z<HistoryTotal();z++)
{
if (OrderSelect (z,SELECT_BY_POS, MODE_HISTORY))
datetime oct=OrderCloseTime();
}
if(CurTime()-oct<60) return(0);
 
Gorillych:

Спасибо!
Оказалось вполне достаточно исправить ошибку в HistoryTotal().
Насколько я помню, если история будет отсортирована не по тикету, ваш код вернёт неправильный клоустайм.
В любом случае, мой надежнее
Причина обращения: