Сделки вопреки ошибкам или вообще нопонятно что

 

 С ошибочными модификациями

 

 Без ошибочных модификаций

 

 

Есть такая непонятка... Функция модифицирует стоплос, если новый стоплос равен старому, то появляется сообщение об ошибке № 4756.
Модификация вроде недолжна происходить, а результат должен остаться прежним, независимо от провенения такой модификации.
Результат - график1, в тестере баланс: более 250 000

Теперь ставим проверку, и несовершаем модификацию, если новый и старый стопы равны. Вроде должно получиться тоже самое, но..
Результат - график2, в тестере баланс: менее 130 000

Разница больше призового фонда чемпионата, а логичной причины для разницы нет!
Может кто сталкивался с такой загадкой?




Образец кода прилагаю:

                  if (условие && MathAbs(Ask-значение)>(Point()*SymbolInfoInteger(symb,SYMBOL_TRADE_STOPS_LEVEL)) && условие)
                     {
                     for (int i=1;i<30;i++)
                        {
                        SL=NormalizeDouble(значение, Digits());
                        osl=mrequest.sl;
                        if (SL>Bid-(Point()*SymbolInfoInteger(symb,SYMBOL_TRADE_STOPS_LEVEL)))SL=Bid-(Point()*SymbolInfoInteger(symb,SYMBOL_TRADE_STOPS_LEVEL));
                        if (SL==osl)return 0;
                        mrequest.action = TRADE_ACTION_SLTP;
                        mrequest.symbol = symb;
                        mrequest.type = ORDER_TYPE_BUY; 
                        mrequest.price=OrderGetDouble(ORDER_PRICE_OPEN);
                        mrequest.sl = SL;
                        mrequest.tp = OrderGetDouble(ORDER_TP);
                        mrequest.deviation=50;
                        //                        if(OrderCheck(mrequest,mresCh))success=OrderSend(mrequest,mresult);
                        //
                        success=OrderSend(mrequest,mresult);
                        if(!success){int answer=mresult.retcode;Print("Вышла ошибочка = ",GetLastError());
                           switch(answer){
                              case 10004:{Print("реквота... подождём");Print("request.price = ",mrequest.price,"   result.ask = ",mresult.ask," result.bid = ",mresult.bid);RunTrade(4);break;}
                              case 10006:{Print("ордер не принят сервером... подождём");Print("request.price = ",mrequest.price,"   result.ask = ",mresult.ask," result.bid = ",mresult.bid);RunTrade(4);break;}
                              case 10015:{Print("неправильная цен... ждём следующий сигал");Print("request.price = ",mrequest.price,"   result.ask = ",mresult.ask," result.bid = ",mresult.bid);RunTrade(60);return 0;break;}
                              case 10016:{Print("неправильный SL и/или TP... ждём следующий сигал");Print("Sell, Bid = ",Bid," New SL = ",mrequest.sl," Old SL = ",osl);Print("result.ask = ",mresult.ask," result.bid = ",mresult.bid);RunTrade(60);return 0;break;}
                              case 10014:{Print("некорректный объем... ждём следующий сигал");Print("request.volume = ",mrequest.volume,"   result.volume = ",mresult.volume);RunTrade(60);return 0;break;}
                              case 10019:{Print("не хватает денег на торговую операцию... ждём следующий сигал");Print("request.volume = ",mrequest.volume,"   result.volume = ",mresult.volume,"   result.comment = ",mresult.comment);RunTrade(60);return 0;break;}
                              default:{Print("...= ",answer);}}
                           }
                        else break;
                        }
                     }
 

А с mrequest.deviation=0 разница будет?

 
Проверил- без разницы.
 

Попробуйте убрать (закомментировать) это место.

                        mrequest.action = TRADE_ACTION_SLTP;
                        mrequest.symbol = symb;
                        mrequest.type = ORDER_TYPE_BUY; 

 

Были проблеммы со входом на форум.

Пробовал - без разницы.

Также, если закоментировать строчку

if (SL==osl)return 0; ( если старый и новый стопы равны то выходим)

то баланс получается ниже, или если раскомментировать строчку:

if(OrderCheck(mrequest,mresCh))success=OrderSend(mrequest,mresult); 

Вообще, это эксперт для чемпионата, и на графике прогон за 2010г, с некоторой обработкой.

Поэтому провала в конце графика недолжно бы быть... 

 

 

Ещё обнаружил:

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

 

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

 

ОС:  7 профессиональная, 64х. Работает давно, уже нестабильно местами.

 
Mihail:

Ещё обнаружил:

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

Подтверждаю, тоже с таким сталкивался. Кажется, возникает, если после оптимизации, перекомпилировать эксперта. Может это опять "фича", как и с папками в Application Data, описанная в хелпе
Причина обращения: