Negociação, Testador, Trailing Stop e modificação de posições.

 

Opa! Tudo Certo?

Estou com uma duvida relacionada a Trailing Stop e sua respectiva função, modificar o Stop Loss.

Estudo a linguagem mql5 a aproximadamente um ano e baseado em artigos tenho implementado alguns códigos e no meu ultimo projeto me deparei com a seguinte questão, um EA funciona perfeitamente no Testador porem na conta de negociação funciona parcialmente sendo que apenas as funções de Trailing não acionam. Toda a testagem aparentemente ok(muitos testes), horas de observação da conta e mesmo atingindo  os parâmetros não aciona o Trailing Stop.

Pra ser sincero não sei exatamente qual parte do código pode estar relacionada a causa pra postar aqui e por isso recorro aos colegas do fórum, onde estaria o problema? Relacionado ao OrderSend? Como e porque funcionaria no Testador e não na Negociação?

Agradeço de antemão!

No Testador: 

2020.05.21 11:42:19.439 2020.04.16 07:31:01   position modified [#1118 sell 0.01 EURUSD 1.09013 sl: 1.08713 tp: 1.08513]
2020.05.21 11:42:19.441 2020.04.16 07:31:01   CTrade::OrderSend: modify position #1118 EURUSD (sl: 1.08713, tp: 1.08513) [done]
2020.05.21 11:42:19.441 2020.04.16 07:31:02   position modified [#1116 sell 0.01 EURUSD 1.09036 sl: 1.08715 tp: 1.08536]
2020.05.21 11:42:19.443 2020.04.16 07:31:02   CTrade::OrderSend: modify position #1116 EURUSD (sl: 1.08715, tp: 1.08536) [done]
2020.05.21 11:42:19.443 2020.04.16 07:31:02   position modified [#1066 sell 0.01 EURUSD 1.09048 sl: 1.08715 tp: 1.08548]
2020.05.21 11:42:19.445 2020.04.16 07:31:02   CTrade::OrderSend: modify position #1066 EURUSD (sl: 1.08715, tp: 1.08548) [done]
2020.05.21 11:42:19.445 2020.04.16 07:31:02   position modified [#1065 sell 0.01 EURUSD 1.09049 sl: 1.08716 tp: 1.08549]
2020.05.21 11:42:19.447 2020.04.16 07:31:02   CTrade::OrderSend: modify position #1065 EURUSD (sl: 1.08716, tp: 1.08549) [done]
2020.05.21 11:42:19.447 2020.04.16 07:31:02   position modified [#1064 sell 0.01 EURUSD 1.09050 sl: 1.08718 tp: 1.08550]
2020.05.21 11:42:19.449 2020.04.16 07:31:02   CTrade::OrderSend: modify position #1064 EURUSD (sl: 1.08718, tp: 1.08550) [done]
2020.05.21 11:42:19.449 2020.04.16 07:31:03   position modified [#1063 sell 0.01 EURUSD 1.09029 sl: 1.08718 tp: 1.08529]
2020.05.21 11:42:19.451 2020.04.16 07:31:03   CTrade::OrderSend: modify position #1063 EURUSD (sl: 1.08718, tp: 1.08529) [done]
2020.05.21 11:42:19.451 2020.04.16 07:31:03   position modified [#1062 sell 0.01 EURUSD 1.09058 sl: 1.08718 tp: 1.08558]
2020.05.21 11:42:19.453 2020.04.16 07:31:03   CTrade::OrderSend: modify position #1062 EURUSD (sl: 1.08718, tp: 1.08558) [done]
2020.05.21 11:42:19.453 2020.04.16 07:31:03   position modified [#1061 sell 0.01 EURUSD 1.09068 sl: 1.08720 tp: 1.08568]
2020.05.21 11:42:19.455 2020.04.16 07:31:03   CTrade::OrderSend: modify position #1061 EURUSD (sl: 1.08720, tp: 1.08568) [done]
2020.05.21 11:42:19.455 2020.04.16 07:31:04   position modified [#1060 sell 0.01 EURUSD 1.09075 sl: 1.08721 tp: 1.08575]
2020.05.21 11:42:19.457 2020.04.16 07:31:04   CTrade::OrderSend: modify position #1060 EURUSD (sl: 1.08721, tp: 1.08575) [done]
2020.05.21 11:42:19.457 2020.04.16 07:31:04   position modified [#1059 sell 0.01 EURUSD 1.09079 sl: 1.08721 tp: 1.08579]
2020.05.21 11:42:19.459 2020.04.16 07:31:04   CTrade::OrderSend: modify position #1059 EURUSD (sl: 1.08721, tp: 1.08579) [done]

 

Você teria o relatório proveniente do EA operando na Negociação? (Que eu presumo que seja sinonimo de teste em conta demo/real para você)


Além do mais, acredito que para podermos ajudar seria necessário ao menos uma demonstração do seu código...

 
Alex Pons:


Pra ser sincero não sei exatamente qual parte do código pode estar relacionada .......


Alex, o código é seu e você não sabe onde é feito onde está o código do Trailing Stop !???   Não entendi.

 
Rogerio Giannetti Torres:

Alex, o código é seu e você não sabe onde é feito onde está o código do Trailing Stop !???   Não entendi.

famoso "meu código"

 
Yan Haeffner:

Você teria o relatório proveniente do EA operando na Negociação? (Que eu presumo que seja sinonimo de teste em conta demo/real para você)


Além do mais, acredito que para podermos ajudar seria necessário ao menos uma demonstração do seu código...

Exato, teste de negociação em conta demo. Não havia postado este relatório pois não me parecia relevante e quanto ao código posto a copia.

Obrigado Yan.

Na conta demo:

2020.05.21 09:55:58.824 Trades '27324707': order #606575613 sell 0.01 / 0.01 EURUSD at 1.09870 done in 294.250 ms
2020.05.21 10:37:59.971 Trades '27324707': instant buy 0.01 EURUSD at 1.09869 sl: 1.08869 tp: 1.10369 (deviation: 1)
2020.05.21 10:38:00.297 Trades '27324707': accepted instant buy 0.01 EURUSD at 1.09869 sl: 1.08869 tp: 1.10369 (deviation: 1)
2020.05.21 10:38:00.307 Trades '27324707': deal #585100068 buy 0.01 EURUSD at 1.09869 done (based on order #606640824)
2020.05.21 10:38:00.314 Trades '27324707': order #606640824 buy 0.01 / 0.01 EURUSD at 1.09869 done in 342.431 ms
2020.05.21 10:39:00.013 Trades '27324707': instant buy 0.01 EURUSD at 1.09885 sl: 1.08885 tp: 1.10385 (deviation: 1)
2020.05.21 10:39:00.300 Trades '27324707': accepted instant buy 0.01 EURUSD at 1.09885 sl: 1.08885 tp: 1.10385 (deviation: 1)
2020.05.21 10:39:00.317 Trades '27324707': deal #585101926 buy 0.01 EURUSD at 1.09885 done (based on order #606642616)
2020.05.21 10:39:00.320 Trades '27324707': order #606642616 buy 0.01 / 0.01 EURUSD at 1.09885 done in 308.025 ms
2020.05.21 10:40:00.232 Trades '27324707': instant buy 0.01 EURUSD at 1.09876 sl: 1.08876 tp: 1.10376 (deviation: 1)
2020.05.21 10:40:00.848 Trades '27324707': accepted instant buy 0.01 EURUSD at 1.09876 sl: 1.08876 tp: 1.10376 (deviation: 1)
2020.05.21 10:40:00.923 Trades '27324707': deal #585103240 buy 0.01 EURUSD at 1.09876 done (based on order #606643898)
2020.05.21 10:40:00.927 Trades '27324707': order #606643898 buy 0.01 / 0.01 EURUSD at 1.09876 done in 695.616 ms
2020.05.21 10:47:59.968 Trades '27324707': instant buy 0.01 EURUSD at 1.09885 sl: 1.08885 tp: 1.10385 (deviation: 1)
2020.05.21 10:48:00.252 Trades '27324707': accepted instant buy 0.01 EURUSD at 1.09885 sl: 1.08885 tp: 1.10385 (deviation: 1)
2020.05.21 10:48:00.266 Trades '27324707': deal #585115311 buy 0.01 EURUSD at 1.09885 done (based on order #606655478)
2020.05.21 10:48:00.270 Trades '27324707': order #606655478 buy 0.01 / 0.01 EURUSD at 1.09885 done in 301.855 ms
2020.05.21 10:50:00.111 Trades '27324707': instant buy 0.01 EURUSD at 1.09898 sl: 1.08898 tp: 1.10398 (deviation: 1)
2020.05.21 10:50:00.690 Trades '27324707': accepted instant buy 0.01 EURUSD at 1.09898 sl: 1.08898 tp: 1.10398 (deviation: 1)
2020.05.21 10:50:00.761 Trades '27324707': deal #585118056 buy 0.01 EURUSD at 1.09898 done (based on order #606658145)
2020.05.21 10:50:00.767 Trades '27324707': order #606658145 buy 0.01 / 0.01 EURUSD at 1.09898 done in 655.817 ms
2020.05.21 11:22:41.121 Experts expert ASP1002 (EURUSD,M1) removed
2020.05.21 11:22:41.144 Experts expert ASP1002 (EURUSD,M1) loaded successfully
2020.05.21 11:29:19.004 Experts expert ASP1002 (EURUSD,M1) removed
2020.05.21 11:29:19.033 Experts expert ASP1002 (EURUSD,M1) loaded successfully
2020.05.21 11:32:20.086 Experts expert ASP1002 (EURUSD,M1) removed
2020.05.21 11:32:20.114 Experts expert ASP1002 (EURUSD,M1) loaded successfully

Código:

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- 
   adxHandle=iADX(NULL,0,ADX_Period);
//--- 
   maHandle=iMA(_Symbol,_Period,MA_Period,0,MODE_EMA,PRICE_CLOSE);
//--- 
   if(adxHandle<0 || maHandle<0)
     {
      Alert("Error Creating Handles for indicators - error: ",GetLastError(),"!!");
      return(-1);
     }
//--- 
   STP = StopLoss;
   TKP = TakeProfit;
   if(_Digits==5 || _Digits==3)
     {
      STP = STP*10;
      TKP = TKP*10;
     }
//--- 
   if(MQLInfoInteger(MQL_TRADE_ALLOWED))
      MathSrand(GetTickCount());
//---
   if(InpTrailingStop!=0 && InpTrailingStep==0)
     {
      Alert(__FUNCTION__," ERROR: Trailing is not possible: the parameter \"Trailing Step\" is zero!");
      return(INIT_PARAMETERS_INCORRECT);
     }
//---
   if(!m_symbol.Name(Symbol())) 
      return(INIT_FAILED);
   RefreshRates();
//---
   m_trade.SetExpertMagicNumber(Magic);
   m_trade.SetMarginMode();
   m_trade.SetTypeFillingBySymbol(m_symbol.Name());
//---
   m_trade.SetDeviationInPoints(m_slippage);
//--- 
   int digits_adjust=1;
   if(m_symbol.Digits()==3 || m_symbol.Digits()==5)
      digits_adjust=10;
   m_adjusted_point=m_symbol.Point()*digits_adjust;

   ExtTrailingStop   = InpTrailingStop    * m_adjusted_point;
   ExtTrailingStep   = InpTrailingStep    * m_adjusted_point;
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- Release our indicator handles
   IndicatorRelease(adxHandle);
   IndicatorRelease(maHandle);
  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 
   if(Bars(_Symbol,_Period)<60)
     {
      Alert("We have less than 60 bars, EA will now exit!!");
      return;
     }
//--- 
   static datetime Old_Time;
   datetime New_Time[1];
   bool IsNewBar=false;
//--- 
   int copied=CopyTime(_Symbol,_Period,0,1,New_Time);
   if(copied>0)
     {
      if(Old_Time!=New_Time[0])
        {
         IsNewBar=true;
         if ((bool)MQLInfoInteger(MQL_DEBUG))
            Print("We have new bar here ",New_Time[0]," old time was ",Old_Time);
         Old_Time=New_Time[0]; 
        }
     }
   else
     {
      Alert("Error in copying historical times data, error =",GetLastError());
      ResetLastError();
      return;
     }
//---
   if(IsNewBar==false)
     {
      return;
     }
//---
   int Mybars=Bars(_Symbol,_Period);
   if(Mybars<60) 
     {
      Alert("We have less than 60 bars, EA will now exit!!");
      return;
     }

//--- 
   MqlTick latest_price;      
   MqlTradeRequest mrequest;  
   MqlTradeResult mresult;    
   MqlRates mrate[];          
   ZeroMemory(mrequest);      
   ZeroMemory(mresult);
  
//--- 
   ArraySetAsSeries(mrate,true);
//--- 
   ArraySetAsSeries(plsDI,true);
//--- 
   ArraySetAsSeries(minDI,true);
//--- 
   ArraySetAsSeries(adxVal,true);
//--- 
   ArraySetAsSeries(maVal,true);
//---
   if(
   !SymbolInfoTick(_Symbol,latest_price))
     {
      Alert("Error getting the latest price quote - error:",GetLastError(),"!!");
      return;
     }
//--- 
   if(CopyRates(_Symbol,_Period,0,3,mrate)<0)
     {
      Alert("Error copying rates/history data - error:",GetLastError(),"!!");
      ResetLastError();
      return;
     }
//--- 
   if(CopyBuffer(adxHandle,0,0,3,adxVal)<0 || CopyBuffer(adxHandle,1,0,3,plsDI)<0
      || CopyBuffer(adxHandle,2,0,3,minDI)<0)
     {
      Alert("Error copying ADX indicator Buffers - error:",GetLastError(),"!!");
      ResetLastError();
      return;
     }
   if(CopyBuffer(maHandle,0,0,3,maVal)<0)
     {
      Alert("Error copying Moving Average indicator buffer - error:",GetLastError());
      ResetLastError();
      return;
     }
   bool Buy_opened=false;  
   bool Sell_opened=false; 

   if(PositionSelect(_Symbol)==true) 
     {
      if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY)
        {
         Buy_opened=true; 
        }
      else
         if(PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL)
           {
            Sell_opened=true; 
           }
     }
   p_close=mrate[1].close; 
//--- 
   bool Buy_Condition_1 = (maVal[0]>maVal[1]) && (maVal[1]>maVal[2]); 
   bool Buy_Condition_2 = (p_close > maVal[1]); 
   bool Buy_Condition_3 = (adxVal[0]>Adx_Min);  
   bool Buy_Condition_4 = (plsDI[0]>minDI[0]);  
//--- 
   if(Buy_Condition_1 && Buy_Condition_2)
     {
      if(Buy_Condition_3 && Buy_Condition_4)
        {
         //--- 
         if(Buy_opened)
           {
            Alert("We already have a Buy Position!!!");
            return;    // Don't open a new Buy Position
           }
         ZeroMemory(mrequest);
         ZeroMemory(mresult);
         mrequest.comment = Inp_EaComment;                                     
         mrequest.action = TRADE_ACTION_DEAL;                                  
         mrequest.price = NormalizeDouble(latest_price.ask,_Digits);           
         mrequest.sl = NormalizeDouble(latest_price.ask - STP*_Point,_Digits); 
         mrequest.tp = NormalizeDouble(latest_price.ask + TKP*_Point,_Digits); 
         mrequest.symbol = Symbol();                                           
         mrequest.volume = Lot;                                                
         mrequest.magic = Magic;                                               
         mrequest.type = ORDER_TYPE_BUY;                                       
         mrequest.type_filling = ORDER_FILLING_FOK;                            
         mrequest.deviation =(64||32||16);                                             
         //--- 
         if(!OrderSend(m_request,m_result))
         //--- 
         if(mresult.retcode==10009 || mresult.retcode==10008)
           {
            Alert("A Buy order has been successfully placed with Ticket#:",mresult.order,"!!");
           }
         else
           {
            Alert("The Buy order request could not be completed -error:",GetLastError());
            ResetLastError();
            return;
           }
        }
     }
  
//--- 
   bool Sell_Condition_1 = (maVal[0]<maVal[1]) && (maVal[1]<maVal[2]);  
   bool Sell_Condition_2 = (p_close <maVal[1]);                         
   bool Sell_Condition_3 = (adxVal[0]>Adx_Min);                         
   bool Sell_Condition_4 = (plsDI[0]<minDI[0]);                         
//--- 
   if(Sell_Condition_1 && Sell_Condition_2)
     {
      if(Sell_Condition_3 && Sell_Condition_4)
        {
         if(Sell_opened)
           {
            Alert("We already have a Sell position!!!");
            return;    
           }
         ZeroMemory(mrequest);
         ZeroMemory(mresult);
         mrequest.comment = Inp_EaComment;                                      
         mrequest.action = TRADE_ACTION_DEAL;                                   
         mrequest.price = NormalizeDouble(latest_price.bid,_Digits);            
         mrequest.sl = NormalizeDouble(latest_price.bid + STP* _Point,_Digits); 
         mrequest.tp = NormalizeDouble(latest_price.bid - TKP*_Point,_Digits);  
         mrequest.symbol = Symbol();                                           
         mrequest.volume = Lot;                                                 
         mrequest.magic = Magic;                                             
         mrequest.type = ORDER_TYPE_SELL;                                       
         mrequest.type_filling = ORDER_FILLING_FOK;                             
         mrequest.deviation =(64||32||16);                                      
         
         //--- send order
        if(!OrderSend(m_request,m_result))
         // get the result code
         if(mresult.retcode==10009 || mresult.retcode==10008) 
           {
            Alert("A Sell order has been successfully placed with Ticket#:",mresult.order,"!!");
           }
         else
           {
            Alert("The Sell order request could not be completed -error:",GetLastError());
            ResetLastError();
            return;
           }
        //---
         if(MQLInfoInteger(MQL_TRADE_ALLOWED))
            if(CalculateAllPositions()==0)
              {
               int rez=MathRand()/2;
               if(rez<32767/2)
                  m_trade.Buy(m_symbol.LotsMin());
               else
                  m_trade.Sell(m_symbol.LotsMin());
              }
         //---
         static bool selector=false;
         selector=!selector;
         if(selector)
            return;
         else
            Trailing();
        }
     }
   return;
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
//---

  }
//+------------------------------------------------------------------+
//| Trade function                                                   |
//+------------------------------------------------------------------+
void OnTrade()
  {
//---

  }
//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//---

  }
//+------------------------------------------------------------------+
//| Refreshes the symbol quotes data                                 |
//+------------------------------------------------------------------+
bool RefreshRates(void)
  {
   if(!m_symbol.RefreshRates())
     {
      Print("RefreshRates error");
      return(false);
     }
   if(m_symbol.Ask()==0 || m_symbol.Bid()==0)
      return(false);
//---
   return(true);
  }
//+------------------------------------------------------------------+
//| Trailing                                                         |
//+------------------------------------------------------------------+
void Trailing()
  {
   if(InpTrailingStop==0)
      return;
   for(int i=PositionsTotal()-1; i>=0; i--) 
      if(m_position.SelectByIndex(i))
         if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==Magic)
           {
            if(m_position.PositionType()==POSITION_TYPE_BUY)
              {
               if(m_position.PriceCurrent()-m_position.PriceOpen()>ExtTrailingStop+ExtTrailingStep)
                  if(m_position.StopLoss()<m_position.PriceCurrent()-(ExtTrailingStop+ExtTrailingStep))
                    {
                     if(!m_trade.PositionModify(m_position.Ticket(),
                                                m_symbol.NormalizePrice(m_position.PriceCurrent()-ExtTrailingStop),
                                                m_position.TakeProfit()))
                        Print("Modify ",m_position.Ticket(),
                              " Position -> false. Result Retcode: ",m_trade.ResultRetcode(),
                              ", description of result: ",m_trade.ResultRetcodeDescription());
                     continue;
                    }
              }
            else
              {
               if(m_position.PriceOpen()-m_position.PriceCurrent()>ExtTrailingStop+ExtTrailingStep)
                  if((m_position.StopLoss()>(m_position.PriceCurrent()+(ExtTrailingStop+ExtTrailingStep))) ||
                     (m_position.StopLoss()==0))
                    {
                     if(!m_trade.PositionModify(m_position.Ticket(),
                                                m_symbol.NormalizePrice(m_position.PriceCurrent()+ExtTrailingStop),
                                                m_position.TakeProfit()))
                        Print("Modify ",m_position.Ticket(),
                              " Position -> false. Result Retcode: ",m_trade.ResultRetcode(),
                              ", description of result: ",m_trade.ResultRetcodeDescription());
                    }
                }
            }
  }
//+------------------------------------------------------------------+
//| Calculate all positions                                          |
//+------------------------------------------------------------------+
int CalculateAllPositions()
  {
   int total=0;

   for(int i=PositionsTotal()-1; i>=0; i--)
      if(m_position.SelectByIndex(i)) 
         if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==Magic)
            total++;
//---
   return(total);
  }
//+------------------------------------------------------------------+
//| Tester function                                                  |
//+------------------------------------------------------------------+
double OnTester()
  {
//---
   double ret=0.0;
//---

//---
   return(ret);
  }
//+------------------------------------------------------------------+
//| TesterInit function                                              |
//+------------------------------------------------------------------+
void OnTesterInit()
  {
//---

  }
//+------------------------------------------------------------------+
//| TesterPass function                                              |
//+------------------------------------------------------------------+
void OnTesterPass()
  {
//---

  }
//+------------------------------------------------------------------+
//| TesterDeinit function                                            |
//+------------------------------------------------------------------+
void OnTesterDeinit()
  {
//---

  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---

  }
//+------------------------------------------------------------------+
//| BookEvent function                                               |
//+------------------------------------------------------------------+
void OnBookEvent(const string &symbol)
  {
//---

  }
//+------------------------------------------------------------------+
 
Alex Pons:

Exato, teste de negociação em conta demo. Não havia postado este relatório pois não me parecia relevante e quanto ao código não sei exatamente como demonstra-lo então mando uma copia.

Obrigado Yan.

Na conta demo:

2020.05.21 09:55:58.824 Trades '27324707': order #606575613 sell 0.01 / 0.01 EURUSD at 1.09870 done in 294.250 ms
2020.05.21 10:37:59.971 Trades '27324707': instant buy 0.01 EURUSD at 1.09869 sl: 1.08869 tp: 1.10369 (deviation: 1)
2020.05.21 10:38:00.297 Trades '27324707': accepted instant buy 0.01 EURUSD at 1.09869 sl: 1.08869 tp: 1.10369 (deviation: 1)
2020.05.21 10:38:00.307 Trades '27324707': deal #585100068 buy 0.01 EURUSD at 1.09869 done (based on order #606640824)
2020.05.21 10:38:00.314 Trades '27324707': order #606640824 buy 0.01 / 0.01 EURUSD at 1.09869 done in 342.431 ms
2020.05.21 10:39:00.013 Trades '27324707': instant buy 0.01 EURUSD at 1.09885 sl: 1.08885 tp: 1.10385 (deviation: 1)
2020.05.21 10:39:00.300 Trades '27324707': accepted instant buy 0.01 EURUSD at 1.09885 sl: 1.08885 tp: 1.10385 (deviation: 1)
2020.05.21 10:39:00.317 Trades '27324707': deal #585101926 buy 0.01 EURUSD at 1.09885 done (based on order #606642616)
2020.05.21 10:39:00.320 Trades '27324707': order #606642616 buy 0.01 / 0.01 EURUSD at 1.09885 done in 308.025 ms
2020.05.21 10:40:00.232 Trades '27324707': instant buy 0.01 EURUSD at 1.09876 sl: 1.08876 tp: 1.10376 (deviation: 1)
2020.05.21 10:40:00.848 Trades '27324707': accepted instant buy 0.01 EURUSD at 1.09876 sl: 1.08876 tp: 1.10376 (deviation: 1)
2020.05.21 10:40:00.923 Trades '27324707': deal #585103240 buy 0.01 EURUSD at 1.09876 done (based on order #606643898)
2020.05.21 10:40:00.927 Trades '27324707': order #606643898 buy 0.01 / 0.01 EURUSD at 1.09876 done in 695.616 ms
2020.05.21 10:47:59.968 Trades '27324707': instant buy 0.01 EURUSD at 1.09885 sl: 1.08885 tp: 1.10385 (deviation: 1)
2020.05.21 10:48:00.252 Trades '27324707': accepted instant buy 0.01 EURUSD at 1.09885 sl: 1.08885 tp: 1.10385 (deviation: 1)
2020.05.21 10:48:00.266 Trades '27324707': deal #585115311 buy 0.01 EURUSD at 1.09885 done (based on order #606655478)
2020.05.21 10:48:00.270 Trades '27324707': order #606655478 buy 0.01 / 0.01 EURUSD at 1.09885 done in 301.855 ms
2020.05.21 10:50:00.111 Trades '27324707': instant buy 0.01 EURUSD at 1.09898 sl: 1.08898 tp: 1.10398 (deviation: 1)
2020.05.21 10:50:00.690 Trades '27324707': accepted instant buy 0.01 EURUSD at 1.09898 sl: 1.08898 tp: 1.10398 (deviation: 1)
2020.05.21 10:50:00.761 Trades '27324707': deal #585118056 buy 0.01 EURUSD at 1.09898 done (based on order #606658145)
2020.05.21 10:50:00.767 Trades '27324707': order #606658145 buy 0.01 / 0.01 EURUSD at 1.09898 done in 655.817 ms
2020.05.21 11:22:41.121 Experts expert ASP1002 (EURUSD,M1) removed
2020.05.21 11:22:41.144 Experts expert ASP1002 (EURUSD,M1) loaded successfully
2020.05.21 11:29:19.004 Experts expert ASP1002 (EURUSD,M1) removed
2020.05.21 11:29:19.033 Experts expert ASP1002 (EURUSD,M1) loaded successfully
2020.05.21 11:32:20.086 Experts expert ASP1002 (EURUSD,M1) removed
2020.05.21 11:32:20.114 Experts expert ASP1002 (EURUSD,M1) loaded successfully

Código:

Essa ta facil


Olhe bem esse trecho e vc vai entender!


         static bool selector=false;
         selector=!selector;
         if(selector)
            return;
         else
            Trailing();
        }

se tiver duvida, crie um script e teste.


void OnStart()
  {
//---

   static bool selector=false;
   selector=!selector;
   if(selector)
      Print("não faz nada!");
   else
      Print("faz algo!");
  }
 
seu traling stop esta fantando partes para a venda, esta completo somente para quando existe posicao na compra
 

Oi Jonathan,

Esse trecho do código dele está dentro da OnTick().

O código dele vai alternar entre "não faz nada" e "faz algo" a cada vez que OnTick() for executada.

Se for isso mesmo que ele quer fazer, está certo.

Confira aqui o comportamento desse trecho de código quando executado dentro de um loop:

void OnStart()
{
   static bool selector=false;

   for (;;)
   {
      selector=!selector;
      if(selector)
         Print("não faz nada!");
      else
         Print("faz algo!");
      Sleep(1000);
   }
}
 
Trader_Patinhas:

Oi Jonathan,

Esse trecho do código dele está dentro da OnTick().

O código dele vai alternar entre "não faz nada" e "faz algo" a cada vez que OnTick() for executada.

Se for isso mesmo que ele quer fazer, está certo.

Confira aqui o comportamento desse trecho de código quando executado dentro de um loop:

eu rodei uma vez só, mas me pareceu estranho, rsrsrsrs...

=D

 

Jonathan, Eduardo e Trader_Patinhas

Agradeço suas respostas.

Realmente comi parte do código obrigado por alertar. 

Minha duvida era quanto ao funcionamento deste código, que dentro do Testador de Estratégia aparentemente é perfeito quanto as funções (compra, venda, stoploss ,takeprofit , trailingstop, etc...) porem ao testar este mesmo código numa Conta Demo o trailingstop não funciona. 

Obviamente esta mal encodado, pois sou um wannabe.

Valeu, abraços!

Como testar um robô de negociação antes da compra
Como testar um robô de negociação antes da compra
  • www.mql5.com
A compra de um robô de negociação no Mercado MQL5 apresenta uma vantagem distinta em relação a todas as outras opções similares - um sistema automatizado oferecido pode ser inteiramente testado diretamente no terminal MetaTrader 5. Antes da compra, um Expert Advisor pode e deve ser cuidadosamente executado em todos os modos não favoráveis no...