Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 60

 
Sergey Gritsay:
Il y avait un problème dans le bloc de fermeture des commandes, je l'ai corrigé.
Merci beaucoup, je vais le vérifier maintenant !
 

Pouvez-vous me dire pourquoi les commandes ne s'ouvrent pas. Il donne une erreur 130

input double RSIperiod=14;
input double Urov_70=70;
input double Urov_30=30;
input double Lot=0.01;
input int    TakeProfit=100;
input int    StopLoss=100;
input int    MagicNumber=523;
input int    slippage=30;

double tp=0,sl=0,OrderBuy=0,OrderSell=0;
int tiket;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   tp=NormalizeDouble(TakeProfit*_Point,_Digits);
   sl=NormalizeDouble(StopLoss*_Point,_Digits);
  return(INIT_SUCCEEDED);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber)
           {
            if(OrderType()==OP_BUY){}
            if(OrderType()==OP_SELL){}
           }
     }
   double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0);
   double rsi1=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,1);
//+------------------------------------------------------------------+
   if(OrderBuy<1 && rsi>Urov_70 && rsi1<Urov_70)
     {
     tiket= OrderSend(_Symbol,OP_BUY,Lot,Ask,slippage,sl,tp,NULL,MagicNumber,0,clrBlue);
     }
   if(OrderSell<1 && rsi<Urov_30 && rsi1>Urov_30)
     {
      tiket=OrderSend(_Symbol,OP_SELL,Lot,Bid,slippage,sl,tp,NULL,MagicNumber,0,clrRed);
     }
  }
//+------------------------------------------------------------------+

 

Je ne suis pas un pro - je peux me tromper !

ces lignes

tp=NormalizeDouble(TakeProfit*_Point,_Digits) ;

sl=NormalizeDouble(StopLoss*_Point,_Digits);

Tu comprendras mieux si tu fais comme ça.

tp=NormalizeDouble(Ask+ TakeProfit*_Point,_Digits) ;

sl=NormalizeDouble(Bid- StopLoss*_Point,_Digits);

De plus, il n'est pas nécessaire de remettre à zéro les variables globales tp et sl.

 
Ibragim Dzhanaev:

Pouvez-vous me dire pourquoi les commandes ne s'ouvrent pas. Erreur 130.

...

L'erreur 130 est un arrêt proche. Vérifiez-les pour la distance minimale de réglage de l'arrêt - StopLevel

Et, oui, comme déjà noté ci-dessus - vous les calculez de manière incorrecte.

 

Je l'ai fait - rien n'a changé (

Oui, je viens de l'annoncer.

input double RSIperiod=14;
input double Urov_70=70;
input double Urov_30=30;
input double Lot=0.01;
input int    TakeProfit=100;
input int    StopLoss=100;
input int    MagicNumber=523;
input int    slippage=30;

double tp=0,sl=0,OrderBuy=0,OrderSell=0;
int tiket;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   tp=NormalizeDouble(Ask+TakeProfit*_Point,_Digits);
   sl=NormalizeDouble(Bid-StopLoss*_Point,_Digits);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber)
           {
            if(OrderType()==OP_BUY){}
            if(OrderType()==OP_SELL){}
           }
     }
   double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0);
   double rsi1=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,1);
//+------------------------------------------------------------------+

   double StopLossLevel;
   double TakeProfitLevel;
   if(StopLoss>0) StopLossLevel=Bid-StopLoss*Point; else StopLossLevel=0.0;
   if(TakeProfit>0) TakeProfitLevel=Ask+TakeProfit*Point; else TakeProfitLevel=0.0;
///---
  
   if(OrderBuy<1 && rsi>Urov_70 && rsi1<Urov_70)
     {
      tiket=OrderSend(_Symbol,OP_BUY,Lot,Ask,slippage,sl,tp,NULL,MagicNumber,0,clrBlue);
     }
   if(OrderSell<1 && rsi<Urov_30 && rsi1>Urov_30)
     {
      tiket=OrderSend(_Symbol,OP_SELL,Lot,Bid,slippage,sl,tp,NULL,MagicNumber,0,clrRed);
     }
  }
//+------------------------------------------------------------------+
 
Ibragim Dzhanaev:

Je l'ai fait - rien n'a changé (

input double RSIperiod=14;
input double Urov_70=70;
input double Urov_30=30;
input double Lot=0.01;
input int    TakeProfit=100;
input int    StopLoss=100;
input int    MagicNumber=523;
input int    slippage=30;

double tp=0,sl=0,OrderBuy=0,OrderSell=0;
int tiket;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   tp=NormalizeDouble(Ask+TakeProfit*_Point,_Digits);
   sl=NormalizeDouble(Bid-StopLoss*_Point,_Digits);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber)
           {
            if(OrderType()==OP_BUY){}
            if(OrderType()==OP_SELL){}
           }
     }
   double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0);
   double rsi1=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,1);
//+------------------------------------------------------------------+

   double StopLossLevel;
   double TakeProfitLevel;
   if(StopLoss>0) StopLossLevel=Bid-StopLoss*Point; else StopLossLevel=0.0;
   if(TakeProfit>0) TakeProfitLevel=Ask+TakeProfit*Point; else TakeProfitLevel=0.0;
///---
  
   if(OrderBuy<1 && rsi>Urov_70 && rsi1<Urov_70)
     {
      tiket=OrderSend(_Symbol,OP_BUY,Lot,Ask,slippage,sl,tp,NULL,MagicNumber,0,clrBlue);
     }
   if(OrderSell<1 && rsi<Urov_30 && rsi1>Urov_30)
     {
      tiket=OrderSend(_Symbol,OP_SELL,Lot,Bid,slippage,sl,tp,NULL,MagicNumber,0,clrRed);
     }
  }
//+------------------------------------------------------------------+


Déplacer le calcul des arrêts vers l'ontique

   tp=NormalizeDouble(Ask+TakeProfit*_Point,_Digits);
   sl=NormalizeDouble(Bid-StopLoss*_Point,_Digits);


..

 

tp=NormalizeDouble(Ask+TakeProfit*_Point,_Digits) ;
sl=NormalizeDouble(Bid-StopLoss*_Point,_Digits);

Il s'agit de la variante pour OP_BUY

pour OP_SELL

tp=NormalizeDouble(Bid-TakeProfit*_Point,_Digits);

sl=NormalizeDouble(Ask+StopLoss*_Point,_Digits);
 

Erreur 148. A chaque tic, il s'ouvre.

input double RSIperiod=14;
input double Urov_70=70;
input double Urov_30=30;
input double Lot=0.01;
input int    TakeProfit=100;
input int    StopLoss=100;
input int    MagicNumber=523;
input int    slippage=30;

double tp,sl,OrderBuy=0,OrderSell=0;
int tiket;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber)
           {
            if(OrderType()==OP_BUY){}
            if(OrderType()==OP_SELL){}
           }
     }
   double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0);
   double rsi1=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,1);
//+------------------------------------------------------------------+

   double StopLossLevel;
   double TakeProfitLevel;
   if(StopLoss>0) StopLossLevel=Bid-StopLoss*Point; else StopLossLevel=0.0;
   if(TakeProfit>0) TakeProfitLevel=Ask+TakeProfit*Point; else TakeProfitLevel=0.0;

   tp=NormalizeDouble(Ask+TakeProfit*_Point,_Digits);
   sl=NormalizeDouble(Bid-StopLoss*_Point,_Digits);

   tp=NormalizeDouble(Bid-TakeProfit*_Point,_Digits);
   sl=NormalizeDouble(Ask+StopLoss*_Point,_Digits);

///---

   if(OrderBuy<1 && rsi>Urov_70 && rsi1<Urov_70)
     {
      tiket=OrderSend(_Symbol,OP_BUY,Lot,Ask,slippage,sl,tp,NULL,MagicNumber,0,clrBlue);
     }
   if(OrderSell<1 && rsi<Urov_30 && rsi1>Urov_30)
     {
      tiket=OrderSend(_Symbol,OP_SELL,Lot,Bid,slippage,sl,tp,NULL,MagicNumber,0,clrRed);
     }
  }
//+------------------------------------------------------------------+
 

deux valeurs différentes de sl tp

Appelez-les différemment : slSell , slBuy, tpSell, tpBuy

 
RichLux:

deux valeurs différentes de sl tp

Appelez-les différemment : slSell , slBuy, tpSell, tpBuy

Cela n'a pas aidé (

double tp,sl,OrderBuy=0,OrderSell=0;
double slSell,slBuy,tpSell,tpBuy;
int tiket;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==MagicNumber)
           {
            if(OrderType()==OP_BUY){}
            if(OrderType()==OP_SELL){}
           }
     }
   double rsi=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,0);
   double rsi1=iRSI(_Symbol,0,RSIperiod,PRICE_CLOSE,1);
//+------------------------------------------------------------------+

   double StopLossLevel;
   double TakeProfitLevel;
   if(StopLoss>0) StopLossLevel=Bid-StopLoss*Point; else StopLossLevel=0.0;
   if(TakeProfit>0) TakeProfitLevel=Ask+TakeProfit*Point; else TakeProfitLevel=0.0;

   tpBuy=NormalizeDouble(Ask+TakeProfit*_Point,_Digits);
   slBuy=NormalizeDouble(Bid-StopLoss*_Point,_Digits);

   tpSell=NormalizeDouble(Bid-TakeProfit*_Point,_Digits);
   slSell=NormalizeDouble(Ask+StopLoss*_Point,_Digits);
///---
   if(OrderBuy<1 && rsi>Urov_70 && rsi1<Urov_70)
     {
      tiket=OrderSend(_Symbol,OP_BUY,Lot,Ask,slippage,sl,tp,NULL,MagicNumber,0,clrBlue);      
     }      
   if(OrderSell<1 && rsi<Urov_30 && rsi1>Urov_30)
     {
      tiket=OrderSend(_Symbol,OP_SELL,Lot,Bid,slippage,sl,tp,NULL,MagicNumber,0,clrRed);      
     }
  }
//+------------------------------------------------------------------+