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

 

Bon après-midi ! !!

Aidez-moi. Je suis en train d'ajouter un stop suiveur à une grille EA, jusqu'à présent seulement au premier ordre. Le sentier n'a pas encore été déclenché. Quel est le problème ?

Voici le fragment de code où les ordres simples sont ouverts

double JAW = iAlligator(Symbol(),TimeframesIndicators,13,8,5,8,5,3,MODE_SMMA,PRICE_MEDIAN,MODE_GATORJAW,0);
     double TEETH = iAlligator(Symbol(),TimeframesIndicators,13,8,5,8,5,3,MODE_SMMA,PRICE_MEDIAN,MODE_GATORTEETH,0);
     double LIPS = iAlligator(Symbol(),TimeframesIndicators,13,8,5,8,5,3,MODE_SMMA,PRICE_MEDIAN,MODE_GATORLIPS,0);
     double DI_PLUSCurrent=iADX(Symbol(),TimeframesIndicators,14, PRICE_CLOSE,MODE_PLUSDI,0);
     double DI_MINUSCurrent=iADX(Symbol(),TimeframesIndicators,14, PRICE_CLOSE,MODE_MINUSDI,0);
     double MacdCurrent=iMACD(Symbol(),TimeframesIndicators,12,26,9, PRICE_CLOSE,MODE_MAIN,0);
     double MacdPrevious=iMACD(Symbol(),TimeframesIndicators,12,26,9, PRICE_CLOSE,MODE_MAIN,2 ); 
     double ATR = iATR(Symbol(), TimeframesVolatility, BarCount, 0);
     if (CountTrade() == 0)
     { 
        if((UseHour==1&&Hour()>=StartTime&&Hour()<=StopTime)||UseHour==0)
        if(LIPS>TEETH&& TEETH>JAW&&DI_PLUSCurrent>18&&DI_PLUSCurrent>DI_MINUSCurrent&&MacdCurrent>MacdPrevious)                              
         {
           FirstLots = Lots();
           tp = NormalizeDouble(Ask + TakeProfitFirstOrder*Point, Digits);
           ticket = OrderSend(Symbol(), OP_BUY, FirstLots, Ask, slip, 0, tp, "1-ый ордер", Magic, 0, Blue); 
            {
             if(Bid - OrderOpenPrice() > TrailingStop*Point) 
              Trailing();
            }
         }
        if((UseHour==1&&Hour()>=StartTime&&Hour()<=StopTime)||UseHour==0)
        if(LIPS<TEETH&& TEETH<JAW&&DI_MINUSCurrent>18&&DI_MINUSCurrent>DI_PLUSCurrent&&MacdCurrent<MacdPrevious)                            
         {
           FirstLots = Lots();
           tp = NormalizeDouble(Bid - TakeProfitFirstOrder*Point, Digits);
           ticket = OrderSend(Symbol(), OP_SELL, FirstLots, Bid, slip, 0, tp, "1-ый ордер", Magic, 0, Red); 
           {
           if(OrderOpenPrice() - Ask > TrailingStop*Point)
              Trailing();
           }
         }
       }

Voici la fonction de modification pour les commandes uniques

//+----------------------------------------------------------------------------+
//| Трейлинг стоп одиночных ордеров                                            |
//+----------------------------------------------------------------------------+
void Trailing()
{
   for(int i = OrdersTotal()-1; i>=0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
         {
           if(OrderType() == OP_BUY)
           {
             if(Bid - OrderOpenPrice() > TrailingStop*Point || OrderStopLoss() == 0)
             {
                if(OrderStopLoss() < Bid - (TrailingStep + TrailingStop)*Point || OrderStopLoss() == 0)
                {
                  if(!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Bid - TrailingStop*Point, Digits), tp, 0))
                    Print("Ошибка модификации ордера на покупку!");
                }
             }
           }
           if(OrderType() == OP_SELL)
           {
             if(OrderOpenPrice() - Ask > TrailingStop*Point || OrderStopLoss() == 0)
             {
                if(OrderStopLoss() > Ask + (TrailingStep + TrailingStop)*Point || OrderStopLoss() == 0)
               {
                  if(!OrderModify(OrderTicket(), OrderOpenPrice(), NormalizeDouble(Ask + TrailingStop*Point, Digits), tp, 0))
                    Print("Ошибка модификации ордера на продажу!");
               }
             }
           }
         }
      }
   }
}

Merci !!!!

 
EVGENII SHELIPOV #:

Bon après-midi ! !!

Aidez-moi. Je suis en train d'ajouter un stop suiveur à une grille EA, jusqu'à présent seulement au premier ordre. Le sentier n'a pas encore été déclenché. Quel est le problème ?

Voici le fragment de code où les ordres simples sont ouverts

Voici la fonction de modification pour les commandes uniques

Merci !!!!

Vous n'avez recours au chalutage que lorsqu'il n'y a pas de commandes...
 
MakarFX #:
Vous avez raison, ça marche... il y a une erreur dans les docks.
Le mode multidevise dans la version 1345 fonctionne). Je l'ai vérifié sur 10 paires majeures, il récupère les données des 10 paires et dessine ce que vous voulez)
Et pousser des boutons dans le testeur)
 
MakarFX #:
Vous n'avez un appel au chalut que lorsqu'il n'y a pas de commandes...

Changé rien n'a changé

void OnTick()
{
     double JAW = iAlligator(Symbol(),TimeframesIndicators,13,8,5,8,5,3,MODE_SMMA,PRICE_MEDIAN,MODE_GATORJAW,0);
     double TEETH = iAlligator(Symbol(),TimeframesIndicators,13,8,5,8,5,3,MODE_SMMA,PRICE_MEDIAN,MODE_GATORTEETH,0);
     double LIPS = iAlligator(Symbol(),TimeframesIndicators,13,8,5,8,5,3,MODE_SMMA,PRICE_MEDIAN,MODE_GATORLIPS,0);
     double DI_PLUSCurrent=iADX(Symbol(),TimeframesIndicators,14, PRICE_CLOSE,MODE_PLUSDI,0);
     double DI_MINUSCurrent=iADX(Symbol(),TimeframesIndicators,14, PRICE_CLOSE,MODE_MINUSDI,0);
     double MacdCurrent=iMACD(Symbol(),TimeframesIndicators,12,26,9, PRICE_CLOSE,MODE_MAIN,0);
     double MacdPrevious=iMACD(Symbol(),TimeframesIndicators,12,26,9, PRICE_CLOSE,MODE_MAIN,2 ); 
     double ATR = iATR(Symbol(), TimeframesVolatility, BarCount, 0);
     if (CountTrade() == 0)
     { 
        if((UseHour==1&&Hour()>=StartTime&&Hour()<=StopTime)||UseHour==0)
        if(LIPS>TEETH&& TEETH>JAW&&DI_PLUSCurrent>18&&DI_PLUSCurrent>DI_MINUSCurrent&&MacdCurrent>MacdPrevious)                              
         {
           FirstLots = Lots();
           tp = NormalizeDouble(Ask + TakeProfitFirstOrder*Point, Digits);
           ticket = OrderSend(Symbol(), OP_BUY, FirstLots, Ask, slip, 0, 0, "1-ый ордер", Magic, 0, Blue); 
         }
        if((UseHour==1&&Hour()>=StartTime&&Hour()<=StopTime)||UseHour==0)
        if(LIPS<TEETH&& TEETH<JAW&&DI_MINUSCurrent>18&&DI_MINUSCurrent>DI_PLUSCurrent&&MacdCurrent<MacdPrevious)                            
         {
           FirstLots = Lots();
           tp = NormalizeDouble(Bid - TakeProfitFirstOrder*Point, Digits);
           ticket = OrderSend(Symbol(), OP_SELL, FirstLots, Bid, slip, 0, 0, "1-ый ордер", Magic, 0, Red); 
         }
         if (CountTrade() == 1) Trailing();

       }
 
EVGENII SHELIPOV #:

Changé rien n'a changé

Tu n'as rien changé.

votre conversion

 if (CountTrade() == 1) Trailing();

est à l'intérieur.

if (CountTrade() == 0)
 
Bonjour, pourriez-vous me dire s'il est possible d'ajouter une transaction à sens unique (achat ou vente) dans moving averages-expert pour mt5 ?
 
amsgif80 moving averages-expert pour mt5 ?

Écrivez-le dans le code MQL5 du conseiller expert et vous aurez cette option.

 
Vladimir Karputov #:

Écrivez-le dans le code MQL5 du conseiller expert et vous aurez cette option.

J'ai essayé, mais ça n'a pas marché. Je suis un zéro absolu dans ce domaine :(
 
amsgif80 #:
J'ai essayé, ça n'a pas marché. Je suis complètement novice en la matière :(
Montrez-moi vos tentatives...
 
amsgif80 #:
J'ai essayé, mais ça n'a pas marché. Je suis complètement novice dans ce domaine :(

Voici le code que j'ai essayé d'insérer :

En haut du code, lancez ceci :
enum ENUM_DIRECTION{
DIRECTION_BUY = 0, // achat seulement
DIRECTION_SELL = 1, // vente seulement
DIRECTION_ANY = 2, // achat et vente
} ;

input ENUM_DIRECTION inp_direction = DIRECTION_ANY ; // direction de transaction autorisée


plus loin, trouvez où dans le code ouvre l'achat et où vend. Regardez dans la fonction start() ou OnTick()
où l'achat est dans les conditions ajouter :
if(inp_direction!=DIRECTION_SELL)
où la vente est dans les conditions ajouter :
if(inp_direction!=DIRECTION_BUY )

Raison: