Это я видел - я же сказал методологически неправильно.
Поясняю:
for(int i=0;i<OrdersTotal();i++){
1. в цикле проверка условия цикла идет на КАЖДОЙ итерации - Вы туда суете вызов функции - самая дорогостоящая операция.
Правильная реализация:
for(i=OrdersTotal()-1; i>=0;i--)
Совершает те же действия за значительно более короткое время. Здесь вызов той же самой функции идет всего один раз - и больше не нужно !!!!!!!!
2. Из-за неверного направления перебора ордеров Вы вводите лишние операции декремента (иначе будут пропускаться ордера) - те, что выделили красным и которые совершенно не нужны при верной реализации.
Такое впечатление, что специально замедляете работу тестера. Особенно если учесть, что при тестировании стратегии могут гоняться даже не сотни, а десятки тысяч раз.
О реале говорил выше.
ЗЫ Иногда смотрю коды и сомневаюсь, что люди систематически изучали программирование.
Эта функция хорошо закрывает "пачками". ))
странная функция
Не столько странная, сколько методологически неправильная: для тестера слишком много, для реала слишком мало. И в любом случае не оптимальная.
Сотню раз обсуждалось: правильный перебор в обратную сторону, а для реала нужен контроль ошибок.
Не столько странная, сколько методологически неправильная: для тестера слишком много, для реала слишком мало. И в любом случае не оптимальная.
Сотню раз обсуждалось: правильный перебор в обратную сторону, а для реала нужен контроль ошибок.
Вы проявили невнимательность.
if(OrderType()==OP_BUY) { OrderClose(OrderTicket(),OrderLots(),Bid,slippage,White); i--; }
if(OrderType()==OP_SELL) { OrderClose(OrderTicket(),OrderLots(),Ask,slippage,White); i--; }
насчет контроля - согласен, я не про то, странная реализация if(OrderType()==OP_BUY) {i--; }
Вот только не пойму, что будет при i=0. После i-- получится -1.
Затем начинается новая итерация, т.е. i=0. И т.п.
Т.е. закрывается все время ордер с текущим номером 0. Так, DhP?
Вот только не пойму, что будет при i=0. После i-- получится -1.
Затем начинается новая итерация, т.е. i=0. И т.п.
Т.е. закрывается все время ордер с текущим номером 0. Так, DhP?
Вы проявили невнимательность.
if(OrderType()==OP_BUY) { OrderClose(OrderTicket(),OrderLots(),Bid,slippage,White); i--; }
if(OrderType()==OP_SELL) { OrderClose(OrderTicket(),OrderLots(),Ask,slippage,White); i--; }
Это я видел - я же сказал методологически неправильно.
Поясняю:
1. в цикле проверка условия цикла идет на КАЖДОЙ итерации - Вы туда суете вызов функции - самая дорогостоящая операция.
Правильная реализация:
Совершает те же действия за значительно более короткое время. Здесь вызов той же самой функции идет всего один раз - и больше не нужно !!!!!!!!
2. Из-за неверного направления перебора ордеров Вы вводите лишние операции декремента (иначе будут пропускаться ордера) - те, что выделили красным и которые совершенно не нужны при верной реализации.
Такое впечатление, что специально замедляете работу тестера. Особенно если учесть, что при тестировании стратегии могут гоняться даже не сотни, а десятки тысяч раз.
О реале говорил выше.
ЗЫ Иногда смотрю коды и сомневаюсь, что люди систематически изучали программирование.
Да. Причем функция только для тестера, онлайн чревато зависаниями.
Код можно заменить таким:
А где тут зависание в онлайне?