int z= HistoryTotal();
возвращает общее количество ордеров в Истории (допустим 10). При этом список ордеров начинается с нуля. Дальше сами...
ЗЫ Даже если бы пример был корректным, не факт, что последний закрытый ордер будет находиться на позиции z.
возвращает общее количество ордеров в Истории (допустим 10). При этом список ордеров начинается с нуля. Дальше сами...
ЗЫ Даже если бы пример был корректным, не факт, что последний закрытый ордер будет находиться на позиции z.
Спасибо. Это я понял ещё из Документации (там тоже в примере 10.
А чего десять?) А как мне выйти на номер последнего ордера в истории?
Я пробовал for(z=1,z<=0,z++)..., но результат тот же
Я пробовал 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(), пожалуй мне хватит.
=)))Попробуйте 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(), пожалуй мне хватит.
Спасибо! Прочитал. Написал необходимый минимум
Нет, этого недостаточно.Надо находить последний закрытый ордер, сравнивая все ордера.
Спасибо!
Оказалось вполне достаточно исправить ошибку в 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);
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().
Насколько я помню, если история будет отсортирована не по тикету,
ваш код вернёт неправильный клоустайм.Спасибо!
Оказалось вполне достаточно исправить ошибку в HistoryTotal().
В любом случае, мой надежнее

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Попытался увидеть 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());
Какие есть идеи?
Заранее спасибо!