К разработчикам OrderModify (error 1) - Глюки в истории или перегрев Процессора? . . .

 

Доброго времени суток, Господа!


    Возникла очень странная ситуация. Я тестировал Советника на промежутке истории с 01.01.2004г до 01.04.2009г на тестере стратегий на M15. И в промежутке с середины февраля 2009г по середину марта 2009г получал странный результат. OrderModify() выдавал ошибку 1 (error no result) то 3, то 5, то 7 раз (на каждом проходе поразному)  при этом за 5 лет тестов до 15 марта 2009г ни разу такой ошибки не было. Да она и должна была откорректироваться советником автоматичеки. При тестировании с 01.01.2003г до 01.04.2009г т.е. начало еще на год раньше - ошибка error no result появлялась около 20 раз - против 4-5-7 раз на промежутке 2004-2009. При изменении торгового инструмента (валютной пары) - ошибка проявляется от 3 до 30 раз (на разных участках истории - не только на  отрезке февраль-март 2009). Как объяснить такое поведение Советника - если использовался один и тот же кусок истории. Но результаты на каждом проходе разные. Я подозреваю, что могут быть ошибки в истории последних и самых старых месяцев т.к.  она (история) относительно новая (всего 3 месячной давности) или очень старая (более 5 лет) и Второе - при тестировании проц. на машине разогревался до 65-67 градусов (вроде бы немного), а тактовый генератор до 82 при номинальной температуре 79-80 градусов. Возможно глюканул генератор. Для справки: Проц. AMD K10 (3*2100MHz) \ RAM (3GB*800MHz) \ Мать Gigabyte \ Windows XP SP3 (Black Edition). Да и еще одна непонятка - временами вознивает ошибка тестера "TestGenerator: unmatched data error" - что она означает и как с ней бороться. Жду ваших комментариев Господа профи. Заранее Спасибо!

P.S.Чтоб у вас все было и вам за это ничего не было.

 

К разработчикам OrderModify (error 1) - Глюки в истории или перегрев Процессора? . . .

Это просто кривые ручки. При тралении необходимо проводить нормализацию значений цены.

 
Ошибки в истории, разрывы в котировках. Нормализация нормализацией - но при плохой истории такие ошибки будут возникать.
 
meta-trader2007 >>:

Это просто кривые ручки. При тралении необходимо проводить нормализацию значений цены.

    Вот не зная автора не надо про "кривые ручки" и т.д. Если это и болезнь - то не моя точно.  Нормализация цен и результатов выражений проводится в каждом блоке кода. Результат обращения к функциям проверяется на ошибку или нулевое значение, там где не должно быть нулей. Если вы не вникли в суть вопроса -  я бы порекомендовал не оставлять своих комментариев в данной теме. Я описал ситуацию достаточно подробно, чтобы было понятно: там что-то не так. Склоняюсь к мысли, что данные ошибки все же есть результат глюков удаленного сервера данных. Хотя не исключен и аппаратный фактор ошибок на локальной машине.

    P.S. Чтоб у вас все было и вам за это ничего не было.

    P.P.S. Если хотите написать еще раз, но посуществу - пожалуста потрудитесь хотя бы вникнуть в суть описанной ситуации.


 
zxc >>:
Ошибки в истории, разрывы в котировках. Нормализация нормализацией - но при плохой истории такие ошибки будут возникать.

    Доброго времени суток! Спасибо за участие - после нескольких часов экспериментов - я также полагаю, что дело именно в плохом качестве истории. Или накройняк в плохой связи с сервером данных (данные могли исказиться подороге от ичточника через несколько прокси серверов).

P.S.Чтоб у вас все было и свам за это ничего не было.

 

Приветствую всех интересующихся!

Если нет глюков в истории - то может есть в тестере стратегий. Как объяснить такое поведение?


Или такое. . . Открытие происходит по несуществующей цене? И закрытие - по той цене. которой не было. . .


Остается еще много вопросов . . . Когда известно, что Slippage=0.0. (Цена только по заявке - никаких отклонений).

Также известно, что проверка (строго больше '0' - ошибка в неправильной или пустой цене исключена) и нориализация цен (по переменной 'Digits' для каждого инструмента) проводится как надо. Каким образом ведет себя тестер - неясно . . . Жду мнений. Заранее Спасибо!

P.S. Чтоб у вас все было и вам за это ничего не было.



Файлы:
gluk.rar  39 kb
 
AlexTrader0618 писал(а) >>

Приветствую всех интересующихся!

Если нет глюков в истории - то может есть в тестере стратегий. Как объяснить такое поведение?

Или такое. . . Открытие происходит по несуществующей цене? И закрытие - по той цене. которой не было. . .

Остается еще много вопросов . . . Когда известно, что Slippage=0.0. (Цена только по заявке - никаких отклонений).

Также известно, что проверка (строго больше '0' - ошибка в неправильной или пустой цене исключена) и нориализация цен (по переменной 'Digits' для каждого инструмента) проводится как надо. Каким образом ведет себя тестер - неясно . . . Жду мнений. Заранее Спасибо!

P.S. Чтоб у вас все было и вам за это ничего не было.

Картинки на гэпах в тестере, подобные Вашей, наблюдал неоднократно, думаю, это действительно специфика работы тестера. Слипаж в тестере вообще не обрабатывается и не учитывается, т. е. всегда равен 0. Что касается ошибки 1, попробуйте цену модификации брать с запасом на 1 пипс, должно помочь, особенно на пятизнаке: специфика сравнения double в терминале.

Во время обработки одного тика рыночное окружение в тестере не меняется, так что плохая история не может быть причиной возникновения подобных ошибок, а влияет только на качество тестирования. Кстати, какое оно у Вас в отчётах ?

 
Valmars >>:

Картинки на гэпах в тестере, подобные Вашей, наблюдал неоднократно, думаю, это действительно специфика работы тестера. Слипаж в тестере вообще не обрабатывается и не учитывается, т. е. всегда равен 0. Что касается ошибки 1, попробуйте цену модификации брать с запасом на 1 пипс, должно помочь, особенно на пятизнаке: специфика сравнения double в терминале.

Во время обработки одного тика рыночное окружение в тестере не меняется, так что плохая история не может быть причиной возникновения подобных ошибок, а влияет только на качество тестирования. Кстати, какое оно у Вас в отчётах ?


Доброго времени суток!

     С удовольствием отвечаю: Качество моделирования 90.00 процентов. Спасибо за  совет - с запасом в 1 пипс попробую обязательно. Кстати это как выглядит правильно: +\- PIPS примерно вот так, что ли:

ModifyAnswer=OrderModify(OrderTicket(),OrderOpenPrice(),BuyStopLoss+Point,BuyTakeProfit-Point,0,Red);

ModifyAnswer=OrderModify(OrderTicket(),OrderOpenPrice(),SellStopLoss-Point,SellTakeProfit+Point,0,Blue);

Отдаленно преследовала мысь сделать что-то похожее уже давно. Но как-то глупо казалось идти на такое ухищрение.

    Не все ошибки появляются на разрывах. Главный признак появления ошибок - начало и конец истории (кстати в самом начале (5-6 лет назад) она (история) еще 4-х знаковая) Есть например такой кусок истории - на нем выловили 30 ошибок modifyerror 1. При этом там вообще нет разыва. А вот сама история вовсе не старая, а наоборот новейшая - за июнь 2009г.


Странно еще и то, что в Советнике (до вызова команды OrderModify()) на каждый случай (BUY или SELL) есть такое условие:


if ((OrderStopLoss()<BuyStopLoss) && (OrderTakeProfit()<BuyTakeProfit)) //для Подъема TP\SL по длинной
if ((OrderStopLoss()>SellStopLoss) && (OrderTakeProfit()>SellTakeProfit)) //для Спуска TP\LS по короткой


которое должно игнорировать уровни TP\SL, которые совпадают с уже установленными значениями. Т.Е. строго больше для Длинной позиции  и строго меньше для Короткой позиции, однако это условие похоже просто игнорируется или где-то искажаются данные. Вот такая канитель - странная . . .

Спасибо за проявленное участие :)


P.S. Чтоб у вас все было и вам за это ничего не было.

 
AlexTrader0618 писал(а) >>

Мне непонятно, зачем Вы двигаете одновременно стоплосс и тэйкпрофит. Обычно при трейлинге по любому алгоритму я использую такую конструкцию:

if (NormalizeDouble(NewStopLossLevel-OrderStopLoss()-Delta*Point,Digits)>0)  // Уровень стопа выше прежнего на Delta
   if (NormalizeDouble(Bid-NewStopLossLevel-(MarketInfo(symbol,MODE_STOPLEVEL)+1)*Point,Digits)>0) // Уровень стопа ниже Bid на StopLevel  
                if (!OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(NewStopLossLevel,Digits),OrderTakeProfit(),0,Yellow))
                 ErrorModifyOrder();

для длинной позиции. Ошибок 1 в тестере не замечал. Если убрать +1, они появляются. Хотя, пожалуй, это касается 130 . А вот Delta >=1, убирает 1.

 
Valmars писал(а) >>

В дополнение: +1 во второй строке, пожалуй, лишняя. Просто, при переходе на 5 знак некоторое время назад, я обнаружил, что корректно работающий ранее код, стал выдавать ошибки ( в тестере №: 1, 130) и решил заложиться на все возможные причины. Сейчас, прогнав на истории, убедился, что достаточно условие:

if (NormalizeDouble(Bid-NewStopLossLevel-MarketInfo(symbol,MODE_STOPLEVEL)*Point,Digits)>0) // Уровень стопа ниже Bid на StopLevel 

А вот замечание относительно первой строки остаётся в силе, вот пример из тестера: при Delta=1:

2009.07.05 23:37:53 2009.07.03 22:59  Price Channel GBPUSD,H1: removed
2009.07.05 23:37:53 2009.07.03 22:59  PriceChannelsav1 GBPUSD,H1: Ошибок открытия: 0 Ошибок закрытия: 0 Ошибок модификации: 0 Ошибок выбора: 0
2009.07.05 23:37:53 2009.07.03 22:59  PriceChannelsav1 GBPUSD,H1: Эксперт PriceChannelsav1 закончил работу в 2009.07.03 22:59 на графике GBPUSD период 60 мин.
2009.07.05 23:37:53 2009.07.03 22:59  Tester: order #6 is closed
2009.07.05 23:37:53 2009.07.03 22:00  PriceChannelsav1 GBPUSD,H1: modify #6 sell 0.10 GBPUSD at 1.63090 sl: 1.63896 tp: 0.00000 ok
2009.07.05 23:37:53 2009.07.03 20:00  PriceChannelsav1 GBPUSD,H1: modify #6 sell 0.10 GBPUSD at 1.63090 sl: 1.64017 tp: 0.00000 ok

А вот тот же эксперт при Delta=0:

2009.07.05 23:54:43 2009.07.03 22:59  Price Channel GBPUSD,H1: removed
2009.07.05 23:54:43 2009.07.03 22:59  PriceChannelsav1 GBPUSD,H1: Ошибок открытия: 0 Ошибок закрытия: 0 Ошибок модификации: 986 Ошибок выбора: 0
2009.07.05 23:54:43 2009.07.03 22:59  PriceChannelsav1 GBPUSD,H1: Эксперт PriceChannelsav1 закончил работу в 2009.07.03 22:59 на графике GBPUSD период 60 мин.
2009.07.05 23:54:43 2009.07.03 22:59  Tester: order #6 is closed
2009.07.05 23:54:43 2009.07.03 22:59  PriceChannelsav1 GBPUSD,H1: Error modify order function: no error (1)
2009.07.05 23:54:43 2009.07.03 22:59  PriceChannelsav1 GBPUSD,H1: OrderModify error 1
2009.07.05 23:54:43 2009.07.03 22:59  PriceChannelsav1 GBPUSD,H1: Error modify order function: no error (1)
 

Ошибка 1 чаще всего возникает при попытке изменения стопа на такую же величину. Чтобы этого не случалось добавляйте условие:

if (NormalizeDouble(NewSL - OldSL) != 0)
   {
    // модификация
   }

  где NewSL - новое значение стопа

        OldSL - OrderStopLoss()

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