Глюки со стопами во время визуального тестирования - страница 2

 
хотя как видно из логов, что по лонгам что по шортам проблема одна и таже зацикливание перемещения ордеров -
по лонгам:
13:27:08 2007.01.09 06:49  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9405 tp: 1.9491 ok
13:27:08 2007.01.09 06:50  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9404 tp: 1.9491 ok
13:27:08 2007.01.09 07:00  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9412 tp: 1.9491 ok
13:27:08 2007.01.09 07:00  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9411 tp: 1.9491 ok
13:27:08 2007.01.09 07:01  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9410 tp: 1.9491 ok
13:27:08 2007.01.09 07:02  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9409 tp: 1.9491 ok
13:27:08 2007.01.09 07:05  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9408 tp: 1.9491 ok
13:27:08 2007.01.09 07:30  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9413 tp: 1.9491 ok
13:27:08 2007.01.09 07:43  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9412 tp: 1.9491 ok
13:27:08 2007.01.09 07:44  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9411 tp: 1.9491 ok
13:27:08 2007.01.09 07:48  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9410 tp: 1.9491 ok
13:27:08 2007.01.09 07:48  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9409 tp: 1.9491 ok
13:27:08 2007.01.09 07:49  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9408 tp: 1.9491 ok
13:27:08 2007.01.09 07:50  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9407 tp: 1.9491 ok
13:27:08 2007.01.09 08:00  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9409 tp: 1.9491 ok
13:27:08 2007.01.09 08:06  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9408 tp: 1.9491 ok
13:27:08 2007.01.09 08:30  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9415 tp: 1.9491 ok
13:27:08 2007.01.09 08:32  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9414 tp: 1.9491 ok
13:27:09 2007.01.09 08:38  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9413 tp: 1.9491 ok
13:27:09 2007.01.09 08:39  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9412 tp: 1.9491 ok
13:27:09 2007.01.09 08:39  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9411 tp: 1.9491 ok
13:27:09 2007.01.09 08:43  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9410 tp: 1.9491 ok
13:27:09 2007.01.09 08:43  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9409 tp: 1.9491 ok
13:27:09 2007.01.09 08:44  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9408 tp: 1.9491 ok
13:27:09 2007.01.09 08:48  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9407 tp: 1.9491 ok
13:27:09 2007.01.09 08:48  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9406 tp: 1.9491 ok
13:27:09 2007.01.09 08:48  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9405 tp: 1.9491 ok
13:27:09 2007.01.09 08:49  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9404 tp: 1.9491 ok
13:27:09 2007.01.09 08:49  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9403 tp: 1.9491 ok
13:27:09 2007.01.09 09:00  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9418 tp: 1.9491 ok
13:27:09 2007.01.09 09:00  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9417 tp: 1.9491 ok
13:27:09 2007.01.09 09:02  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9416 tp: 1.9491 ok
13:27:09 2007.01.09 09:08  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9415 tp: 1.9491 ok
13:27:09 2007.01.09 09:10  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9414 tp: 1.9491 ok
13:27:09 2007.01.09 09:13  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9413 tp: 1.9491 ok
13:27:09 2007.01.09 09:13  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9412 tp: 1.9491 ok
13:27:09 2007.01.09 09:14  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9411 tp: 1.9491 ok
13:27:09 2007.01.09 09:18  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9410 tp: 1.9491 ok
13:27:09 2007.01.09 09:18  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9409 tp: 1.9491 ok
13:27:09 2007.01.09 09:19  Check_Stops GBPUSD,M30: modify #11 buy 1.00 GBPUSD at 1.9391 sl: 1.9408 tp: 1.9491 ok
1



по шортам:

13:27:18 2007.01.10 00:50  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9404 tp: 1.9322 ok
13:27:18 2007.01.10 01:15  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9403 tp: 1.9322 ok
13:27:18 2007.01.10 01:43  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9405 tp: 1.9322 ok
13:27:18 2007.01.10 02:02  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9398 tp: 1.9322 ok
13:27:19 2007.01.10 02:30  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9365 tp: 1.9322 ok
13:27:19 2007.01.10 02:38  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9366 tp: 1.9322 ok
13:27:19 2007.01.10 02:38  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9367 tp: 1.9322 ok
13:27:19 2007.01.10 02:39  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9368 tp: 1.9322 ok
13:27:19 2007.01.10 02:39  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9369 tp: 1.9322 ok
13:27:19 2007.01.10 02:43  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9370 tp: 1.9322 ok
13:27:19 2007.01.10 02:43  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9371 tp: 1.9322 ok
13:27:19 2007.01.10 02:44  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9372 tp: 1.9322 ok
13:27:19 2007.01.10 02:48  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9373 tp: 1.9322 ok
13:27:19 2007.01.10 02:48  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9374 tp: 1.9322 ok
13:27:19 2007.01.10 02:49  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9375 tp: 1.9322 ok
13:27:19 2007.01.10 02:49  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9376 tp: 1.9322 ok
13:27:19 2007.01.10 03:00  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9370 tp: 1.9322 ok
13:27:20 2007.01.10 03:10  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9371 tp: 1.9322 ok
13:27:20 2007.01.10 03:13  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9372 tp: 1.9322 ok
13:27:20 2007.01.10 03:13  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9373 tp: 1.9322 ok
13:27:20 2007.01.10 03:13  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9374 tp: 1.9322 ok
13:27:20 2007.01.10 03:14  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9375 tp: 1.9322 ok
13:27:20 2007.01.10 03:14  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9376 tp: 1.9322 ok
13:27:20 2007.01.10 03:14  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9377 tp: 1.9322 ok
13:27:20 2007.01.10 03:14  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9378 tp: 1.9322 ok
13:27:20 2007.01.10 03:18  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9379 tp: 1.9322 ok
13:27:20 2007.01.10 03:18  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9380 tp: 1.9322 ok
13:27:20 2007.01.10 03:18  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9381 tp: 1.9322 ok
13:27:20 2007.01.10 03:18  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9382 tp: 1.9322 ok
13:27:20 2007.01.10 03:19  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9383 tp: 1.9322 ok
13:27:20 2007.01.10 03:19  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9384 tp: 1.9322 ok
13:27:20 2007.01.10 03:20  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9385 tp: 1.9322 ok
13:27:20 2007.01.10 03:30  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9384 tp: 1.9322 ok
13:27:20 2007.01.10 03:30  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9385 tp: 1.9322 ok
13:27:20 2007.01.10 03:36  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9386 tp: 1.9322 ok
13:27:20 2007.01.10 04:00  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9382 tp: 1.9322 ok
13:27:21 2007.01.10 04:06  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9383 tp: 1.9322 ok
13:27:21 2007.01.10 04:06  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9384 tp: 1.9322 ok
13:27:21 2007.01.10 04:30  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9373 tp: 1.9322 ok
13:27:21 2007.01.10 04:43  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9374 tp: 1.9322 ok
13:27:21 2007.01.10 04:43  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9375 tp: 1.9322 ok
13:27:21 2007.01.10 04:44  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9376 tp: 1.9322 ok
13:27:21 2007.01.10 04:44  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9377 tp: 1.9322 ok
13:27:21 2007.01.10 04:48  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9378 tp: 1.9322 ok
13:27:21 2007.01.10 04:48  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9379 tp: 1.9322 ok
13:27:21 2007.01.10 04:48  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9380 tp: 1.9322 ok
13:27:21 2007.01.10 04:49  Check_Stops GBPUSD,M30: modify #12 sell 1.00 GBPUSD at 1.9422 sl: 1.9381 tp: 1.9322 ok

 
Ребята проверьте ктонить советника я незнаю может я тут гдето туплю просто уже все перепробовал глючит сцуко и все :((
 
Ребята проверьте ктонить советника я незнаю может я тут гдето туплю просто уже все перепробовал глючит сцуко и все :((

Вы должны заплатить денег тому, кто проверит Вашего советника. У Вас в голове каша. И в исходном тексте тоже каша.
Спрашивается, зачем Вы вызываете RefreshRates в цикле выборки ордеров и не вызываете RefreshRates в цикле модификации ордеров. Ну это так, фигня.

Я отформатировал Ваш исходный текст. Вот что получилось.
//+------------------------------------------------------------------+
//|                                                  Check_Stops.mq4 |
//|                      Copyright © 2007, MetaQuotes Software Corp. |
//|                                        http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net"

#include <stdlib.mqh>

extern int    ExpertID   =  916505;   
extern string ExpName = "000104";
extern int    TPLevel = 100;               //  Тейк профит           
extern int    StopLevel   = 100;           //  SL.  
extern string _Parameters_b_Lots ="Параметры модуля расчёта лота";
extern double Lots = 1;                    // Минимальный фиксированный лот.
extern int    LotsWayChoice  = 1;          // Способ выбора рабочего лота: 
                                           //  0-фиксированный, 
                                           //  1-процент от депозита, 
extern int    LotsPercent    =10;              
extern int    MaxRiskPercent =30;              
extern int    KLots          =2;            
extern int    LotsDeltaDepo  =500;             
extern int    LotsDepoForOne =500;            
extern int    LotsMax        =10000;  
extern int    CountTrailingMode = 3;       // трал 0-отключен, 1 -NRTR, 3 - обычный,
extern int    UsualTrailingValue = 11;     // значение обычного трала
extern int    MinLastProfit  =5;               
extern int    DealsCount     =1;            
extern string Parameters_Trailing =         "Параметры модуля трейлинг стопа.";
extern int    Profitunity= 50;
extern int    TryesToOpen = 1;
extern int    TryesToClose = 2;
extern double Patr=9;
extern double Prange=30;
extern double Kstop=1.13;
extern double kts=2;
extern double Vts=1;

double cnt,ValATR,hi,lo,SL,TS,prevBars, LLS=0, LSS=0;
double midlot; 
int tryes=1;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
   if(ExistPositions())
     {
      if(CountTrailingMode>0) { TrailingCounting(); }
     }
//----
  if(!ExistPositions(ExpertID,1) && High[0]>High[1] && High[1]>High[2]){ OpenBuy();  } 
  if(!ExistPositions(ExpertID,2) && Low[0]<Low[1] && Low[1]<Low[2])    { OpenSell(); }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OpenBuy()
  {//1
   double idLot=GetSizeLot(); 
   int    Slippage=1; 
   double ldStop=GetStopLossBuy(); 
   double ldTake=GetTakeProfitBuy();
   string _OrderComment=ExpName; 
   int    _OrderMadic=ExpertID;
   int    _OrderExp=0;  
   color  _Color=DeepSkyBlue;
//----
   if(idLot==0)
     {
      Info("1.2.3",2,""," Opening Buy were blocked by Money Management system, Current free margin is "+DoubleToStr(AccountFreeMargin(),2)+", Equity "+DoubleToStr(AccountEquity(),2));
      return(0);
     }
//----
   double OpPrice = NormalizeDouble(Ask,Digits); 
   int LastError=0;
   int Pause = 500; 
   int i,i2,i3,fc;
   for (i2=1; i2<=TryesToOpen; i2++)
     {//3 
      if(IsTradeAllowed() || IsTesting())
        {//4   
         Pause=Pause+Pause;  
         fc = OrderSend(Symbol(),OP_BUY,idLot,OpPrice,Slippage,ldStop,ldTake,_OrderComment,_OrderMadic,_OrderExp,_Color);
         LastError = GetLastError();
         if(fc<0 || LastError>0)
           {
            Info("1.2.3",1,"","ERROR OPENING BUY with Vol "+DoubleToStr(idLot,1)+" SL "+DoubleToStr(ldStop,Digits)+" TP "+DoubleToStr(ldTake,Digits)+" last try "+i2+" - "+ErrorDescription(LastError));
           }
         else
           {
            if(fc>0)
              {
               Info("1.2.3",2,"","OPEN BUY last try "+i2+" at price "+DoubleToStr(OpPrice,Digits)+" Ticket "+fc);
               return(fc);
              }
           }
        }
      else
        {
         Sleep(Pause);
        }//4
     }//3
  }//2
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double GetSizeLot()
  {      
   double dLot; 
//----
   if (LotsWayChoice==0) dLot=Lots; 
   // фиксированный процент от депозита 
   if (LotsWayChoice==1){dLot=MathCeil(GetAccountFreeMargin()/10000*LotsPercent)/10;}
   // фракционно-пропорциональный 
   if (LotsWayChoice==2)
     { 
      int k=LotsDepoForOne; 
      for (double i=2; i<=LotsMax; i++)
        { 
         k=k+i*LotsDeltaDepo; 
         if (k>AccountFreeMargin())
           { 
            dLot=(i-1)/10;
            break; 
           } 
        } 
     }
   // 3-фракционно-фиксированный, 
   if (LotsWayChoice==3){dLot=MathCeil((GetAccountFreeMargin()-LotsDepoForOne)/LotsDeltaDepo)/10;}    
//----
   dLot= (MathCeil(dLot*10)/10)-Lots;
   if (dLot<Lots) dLot=Lots;
   if (dLot>LotsMax) dLot=LotsMax;
   Info("1.2",3,"","Counted lot is "+DoubleToStr(dLot,2)+" counting by "+LotsWayChoice+" mode");
   return(dLot);  
  } 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OpenSell()
  {//1
   double idLot=GetSizeLot(); 
   int    Slippage=1; 
   double ldStop=GetStopLossSell(); 
   double ldTake=GetTakeProfitSell();
   string _OrderComment=ExpName; 
   int    _OrderMadic=ExpertID;
   int    _OrderExp=0;  
   color  _Color=DeepPink;
//----
   if(idLot==0)
     {
      Info("1.2.3",2,""," Opening Sell were blocked by Money Management system, Current free margin is "+DoubleToStr(AccountFreeMargin(),2)+", Equity "+DoubleToStr(AccountEquity(),2));
      return(0);
     }
//----
   int LastError=0;                                                                  
   int Pause = 500;                                                                  
   double OpPrice = NormalizeDouble(Bid,Digits);                                    
   int i,i2,i3,fc;                                                                    
   for (i2=1; i2<=TryesToOpen; i2++)
     {//3 
      if(IsTradeAllowed()||IsTesting())
        {//4   
         Pause=Pause+Pause;  
         fc = OrderSend(Symbol(),OP_SELL,idLot,OpPrice,Slippage,ldStop,ldTake,_OrderComment,_OrderMadic,_OrderExp,_Color);
         LastError = GetLastError();
         if(fc<0||LastError>0)
           {
            Info("1.2.3",1,"","ERROR OPENING SELL with Vol "+DoubleToStr(idLot,1)+" SL "+DoubleToStr(ldStop,Digits)+" TP "+DoubleToStr(ldTake,Digits)+" last try "+i2+" - "+ErrorDescription(LastError));
           }
         else
           {
            if(fc>0)
              {
               Info("1.2.3",2,"","OPEN SELL last try "+i2+" at price "+DoubleToStr(OpPrice,Digits)+" Ticket "+fc);
               return(fc);
              }
            }
        }
      else
        {
         Sleep(Pause);
        }//3
     }//2
  }//1 
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool ExistPositions(int MAGIC=0, int op=0)
  {//1
   int i;
//----
   if(MAGIC !=0 && op!=0)
     {//2	
      for (i=0; i<OrdersTotal(); i++)
        {//3
         if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
           {//4
  	         if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC && OrderType()== OP_BUY && op==1)
  	           {//5
  	            Info("1.2.3",3,"","ExistPositions() found long positions ");
  	            return(True);
  	           }//5
  	         if (OrderSymbol()==Symbol() && OrderMagicNumber()==MAGIC && OrderType()== OP_SELL && op==2)
  	           {//5
  	            Info("1.2.3",3,"","ExistPositions() found short positions ");
  	            return(True);
  	           }//5
  	        }//4 
        }//3 
     }
   else
     {//2
      for ( i=0; i<OrdersTotal(); i++)
        {//3
         if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
           {//4
            if (OrderSymbol()==Symbol())
              {//5
               Info("1.2.3",3,"","ExistPositions() found "+(i+1)+" positions ");
               return(True);
              }//5
           }//4 
        }//3 
     }//2
  }//1
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double GetStopLossBuy()    { return(NormalizeDouble(Bid-StopLevel*Point,Digits)); } 
double GetStopLossSell()   { return(NormalizeDouble(Ask+StopLevel*Point,Digits)); } 
double GetTakeProfitBuy()  { return(NormalizeDouble(Ask+TPLevel*Point,Digits));   } 
double GetTakeProfitSell() { return(NormalizeDouble(Bid-TPLevel*Point,Digits));   }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Info(string MessageType="1,0,0", int Actuality = 1, string MessageHead="", string MessageBody="HI")
  {//1
  }//1
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double GetAccountFreeMargin()
  {
   double floatProfit;
   floatProfit = AccountEquity()-AccountBalance(); 
//----
   if(floatProfit>=0) {return(AccountFreeMargin());}
   if(floatProfit<0 && (AccountMargin()+MathAbs(floatProfit)>=(AccountBalance()/100*LotsPercent)))
     {
      return(0);
     }
   else
     {
      return(AccountFreeMargin());
     } 
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double TrailingCounting()
  {
//----
   if(CountTrailingMode==1)
     { //NRTR
      int i,mode,ticket,total;
      if (prevBars!=Bars) 
        {
         ValATR=0;
         for(i=1; i<=Patr; i++)
           {
            if(i<=Patr) { ValATR+=High[i]-Low[i]; }
           }
         ValATR=ValATR/Patr;
         //----
         hi=High[Highest(NULL,0,MODE_HIGH,Prange,Prange)]; 
         lo=Low[Lowest(NULL,0,MODE_LOW,Prange,Prange)]; 
         //----
         if (Vts==1)  {TS=kts*ValATR; SL=Kstop*ValATR;}
         if (Vts==2)  {TS=(hi-lo);    SL=Kstop*(hi-lo);}
         prevBars = Bars;
        }
      if (Vts<1 || Vts>2)  return(0);
      //-------------------------------------------------------
      for (cnt=0; cnt<=OrdersTotal(); cnt++)
        {
         RefreshRates();
         OrderSelect(cnt,SELECT_BY_POS, MODE_TRADES);
         mode=OrderType();
         if(OrderSymbol()==Symbol())
           {
            //First Stop---------------------------------
            if (mode==OP_BUY && OrderStopLoss() == 0)
              {
               MSL(OrderTicket(),OrderOpenPrice(),Low[0]-SL,OrderTakeProfit(),0,CLR_NONE);
               //PlaySound("expert.wav");
               return(0);
              }
            //----
            if (mode==OP_SELL && OrderStopLoss() == 0)
              {
               MSL(OrderTicket(),OrderOpenPrice(),High[0]+SL,OrderTakeProfit(),0,CLR_NONE);
               //PlaySound("expert.wav");
               return(0);
              }
            //Main Trailing-------------------------------
            if ((mode==OP_BUY && High[0]-OrderOpenPrice()>TS && OrderStopLoss()<High[0]-TS) || OrderStopLoss()==0)
              { 
               MSL(OrderTicket(),OrderOpenPrice(),High[0]-TS,OrderTakeProfit(),0,CLR_NONE);
               //PlaySound("expert.wav");
               return(0);
              }
            //----
            if ((mode==OP_SELL && OrderOpenPrice()-Low[0]>TS && OrderStopLoss()>Low[0]+TS) || OrderStopLoss()==0)
              { 
               MSL(OrderTicket(),OrderOpenPrice(),Low[0]+TS,OrderTakeProfit(),0,CLR_NONE);
               //PlaySound("expert.wav");
               return(0);
              }
           }
         return(0);
        }
     }
//----
   if(CountTrailingMode==3)
     { // Usual mode
      for ( i=0; i<OrdersTotal(); i++)
        {
         RefreshRates(); 
         if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
           { 
            if (OrderSymbol()==Symbol() && OrderMagicNumber()==ExpertID)
              { 
               if (OrderType()==OP_BUY)
                 { 
                  if (Bid-OrderOpenPrice()>UsualTrailingValue*Point)
                    { 
                     if (OrderStopLoss()<Bid-UsualTrailingValue*Point)
                       {
                        Print(StringConcatenate("********",OrderStopLoss()," ",Bid-(UsualTrailingValue*Point)));
                        MSL(OrderTicket(),OrderOpenPrice(),(Bid-(UsualTrailingValue*Point)),OrderTakeProfit(),0,CLR_NONE); 
                       } 
                    }
                 }
              }
           }
        }
      //----
      for ( i=0; i<OrdersTotal(); i++)
        {
         RefreshRates();
         if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
           { 
            if (OrderSymbol()==Symbol() && OrderMagicNumber()==ExpertID)
              { 
               if (OrderType()==OP_SELL)
                 { 
                  if (OrderOpenPrice()-Ask>(UsualTrailingValue*Point))
                    { 
                     if (OrderStopLoss()>(Ask+(UsualTrailingValue*Point)))  
                        Print(StringConcatenate("Short Stops ",OrderStopLoss()," New Stops ",(Ask+(UsualTrailingValue*Point))));
                     MSL(OrderTicket(),OrderOpenPrice(),Ask+(UsualTrailingValue*Point),OrderTakeProfit(),0,CLR_NONE); 
                    }
                 }
              }
           }
        }
     }
//----
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double ND(double D,int Dig) { return(NormalizeDouble(D,Dig));             }
double SD(string S)         { return(StrToDouble(S));                     }
int SI(string S)            { return(StrToInteger(S));                    }
int SL(string S)            { return(StringLen(S));                       }
string STRL(string S)       { return(StringTrimRight(StringTrimLeft(S))); }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void MSL(int _OTicket, double _OOpenPrice, double _OStopLoss, double _OTakeProfit, datetime _OExpiration=0 , color _AColor = DeepPink)
  {          
   int  i, Pause = 500;
   int  LastError=0;
   bool fm=true; 
//----
   for (i=0; i<tryes; i++)
     {
      Pause = Pause+Pause;
      fm = OrderModify(_OTicket,_OOpenPrice,_OStopLoss,_OTakeProfit,_OExpiration,_AColor); 
      if(!fm)
        {
         LastError=GetLastError();
         if(LastError>0) {Info("1.2.3",1,"","There was an ERROR while order modify "+ErrorDescription(LastError)+" at "+i+" try."); }
         Sleep(Pause);
        }
      if(fm)
        {
         Info("1.2",2,"","Order "+_OTicket+" Succesfully Modifyied at "+i+" try.");
         break;
        } 
     }
//----
  }
//+------------------------------------------------------------------+


Ответ лежит на поверхности.
Вот кусок кода модификации длинных позиций

               if (OrderType()==OP_BUY)
                 { 
                  if (Bid-OrderOpenPrice()>UsualTrailingValue*Point)
                    { 
                     if (OrderStopLoss()<Bid-UsualTrailingValue*Point)
                       {
                        Print(StringConcatenate("********",OrderStopLoss()," ",Bid-(UsualTrailingValue*Point)));
                        MSL(OrderTicket(),OrderOpenPrice(),(Bid-(UsualTrailingValue*Point)),OrderTakeProfit(),0,CLR_NONE); 
                       } 
                    }
                 }


Вот кусок кода модификации коротких позиций

               if (OrderType()==OP_SELL)
                 { 
                  if (OrderOpenPrice()-Ask>(UsualTrailingValue*Point))
                    { 
                     if (OrderStopLoss()>(Ask+(UsualTrailingValue*Point)))  
                        Print(StringConcatenate("Short Stops ",OrderStopLoss()," New Stops ",(Ask+(UsualTrailingValue*Point))));
                     MSL(OrderTicket(),OrderOpenPrice(),Ask+(UsualTrailingValue*Point),OrderTakeProfit(),0,CLR_NONE); 
                    }
                 }


Видите разницу?

 

Спрашивается, зачем Вы вызываете RefreshRates в цикле выборки ордеров и не вызываете RefreshRates в цикле модификации ордеров. Ну это так, фигня.


пробовал конечно, это проблему никак не решало.

Видите разницу?

за исключением по-другому расставленных скобок разницы никакой :))
Slawa судя по логам, код функций трейлингования и модификации ордеров рабочий!
проблема в том что после того как по сигналу функции TrailingCounting() функция MSL() передвигает как положено стоп. прога не обращая внимания на код советника продолжает двигать стоп за ценой вверх вниз хотя этого быть не должно т.к. вот эти условия для шортов:
if (OrderStopLoss()>(Ask+(UsualTrailingValue*Point)))


а вот эти для лонгов:

if (OrderStopLoss()<Bid-UsualTrailingValue*Point)


явно предусматривают перемещение стопов только в сторону увеличения профита!!!

еще вызывает небольшое подозрение такая ситуация когда OrderModify() возвращает false а код ошибки при этом = 0 т.е. нет ошибки эт как? в течении 5 попыток OrderModify() не срабатывает и ошибки не возвращает

 
Ну вот. Не скобки, поставленные по-другому, а полное их отсутствие в нужном месте. Условие сработало, но оно коснулось только принта!
               if (OrderType()==OP_SELL)
                 { 
                  if (OrderOpenPrice()-Ask>(UsualTrailingValue*Point))
                    { 
                     if (OrderStopLoss()>(Ask+(UsualTrailingValue*Point)))  
                        Print(StringConcatenate("Short Stops ",OrderStopLoss()," New Stops ",(Ask+(UsualTrailingValue*Point))));
                     MSL(OrderTicket(),OrderOpenPrice(),Ask+(UsualTrailingValue*Point),OrderTakeProfit(),0,CLR_NONE); 
                    }
                 }


Print отрабатывает по условию, а Ваша функция MSL в любом случае

Надо бы вот так сделать:

               if (OrderType()==OP_SELL)
                 { 
                  if (OrderOpenPrice()-Ask>(UsualTrailingValue*Point))
                    { 
                     if (OrderStopLoss()>(Ask+(UsualTrailingValue*Point)))
                       {
                        Print(StringConcatenate("Short Stops ",OrderStopLoss()," New Stops ",(Ask+(UsualTrailingValue*Point))));
                        MSL(OrderTicket(),OrderOpenPrice(),Ask+(UsualTrailingValue*Point),OrderTakeProfit(),0,CLR_NONE); 
                       }
                    }
                 }


Опять не видите разницу?

 
Спасибо Slawa, был бы у нас отладчик это сэкономило бы кучу времени как у меня так и у других экспертописателей, :)
 
To Slawa

Рекомендуется ли всегда делать RefreshRates( ) перед выполнением торговых функций, MarketInfo( OrderSymbol( ), MODE_BID ), MarketInfo( OrderSymbol( ), MODE_ASK ) ?

Заметила, что без RefreshRates( ) зацикленные скрипты плохо получают котировки.

Из каких соображений следует выбирать время задержки для void Sleep( int milliseconds) ?

Спасибо.
 
В простых экспертах RefreshRates делать необязательно.

При долговременной работе эксперта, когда ценовые данные меняются, необходимо вызывать перед торговой операцией. (Например, почитайте "MQL4: Ошибки исполнения")

Скрипты могут получить самые свежие ценовые данные ("свои" Open[], High[], Low[], Close[], Time[], Volume[], Bars, Bid, Ask) только с помощью RefreshRates. Получение отдельных данных при помощи MarketInfo, либо ценовых данных другого символа/периода не требует вызова функции RefreshRates.

Время задержки между чем и чем? Если между торговыми операциями, то органолептически, чтобы не досадить брокера слишком частыми запросами.
 
To Slawa

Большое спасибо за обстоятельный ответ.

Из каких соображений следует выбирать время задержки void Sleep( int milliseconds) для зацикленных скриптов ?

Зацикленные скрипты, продолжающие работать при переключении периода - это фантастика ? Очень бы хотелось.
 
Для зацикленных скриптов - только мощностью железа. На двух-процессорном компе вообще можно не ставить задержку. А вообще, 100 миллисекунд вполне достаточно и не нагружает процессор.

Здесь есть нюансы. При смене таймфрейма зацикленный скрипт как можно скорее должен закончить свою работу и выполнить функцию deinit. После смены таймфрейма конечно же надо будет запустить функцию init и сразу start. С какого места, с начала или с прерванного? "И того, и другого, и можно без хлеба" (ц)

Скрипты изначально задумывались как одноразовые утилиты, всей рутинной работой должны заниматься эксперты.
Причина обращения: