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

 
EVGENII SHELIPOV #:

Bonne journée à tous ! !!

J'écris le code d'un EA pour le Trailing Stop des ordres groupés à partir du prix moyen d'une grille d'ordres.

Aucune erreur dans le journal, mais le chalut ne fonctionne pas non plus. Voici le code, veuillez suggérer où se trouve l'erreur. Merci !

Le chalut est au mauvais endroit !

Cela devrait ressembler à quelque chose comme ceci

Si prix d'équilibre+profit-tral ! = TakeProfit, commencer le chalut !

D'où proviennent ces données ?

//+----------------------------------------------------------------------------+
//| Трейлинг стоп групповых ордеров                                            |
//+----------------------------------------------------------------------------+
void TrailingGroupOrder()
{
    price += OrderOpenPrice() * OrderLots();
    order_lots += OrderLots() ;
    for(int i = OrdersTotal()-1; i>=0; i--)
    {
     if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))

OrderOpenPrice

Renvoie le prix ouvert de l'ordre sélectionné

doubleOrderOpenPrice() ;

Note :

La commande doit être présélectionnée à l'aide de la fonction OrderSelect().

 
MakarFX #:

Merci.)

 
MakarFX #:

Ce n'est pas là que se trouve le chalut !

Ça devrait être comme ça :

si le prix d'équilibre+profit-tral ! = TakeProfit lancer le chalut

Bon après-midi Makar !!!!

D'après ce que je comprends, c'est la ligne en question. Dans ce cas, un ordre d'achat :

if(Bid - NormalizeDouble(price / order_lots, Digits) > TrailingStopGroupOrder*Point || OrderStopLoss() == 0)

Makar, si vous pouviez expliquer plus en détail

 
MakarFX #:

Ce n'est pas là que se trouve le chalut !

Ça devrait être comme ça :

si le prix d'équilibre+profit-tral ! = TakeProfit lancer le chalut

D'où proviennent ces données ?

Vous parlez par énigmes aujourd'hui, Makar.

On peut aussi se demander pourquoi nous calculons le prix d'équilibre sans vérifier ????.

 
MakarFX #:

Ce n'est pas là que se trouve le chalut !

Ça devrait être comme ça :

si le prix d'équilibre+profit-tral ! = TakeProfit lancer le chalut

D'où proviennent ces données ?

OrderOpenPrice

Renvoie le prix ouvert de l'ordre sélectionné

doubleOrderOpenPrice() ;

Note :

La commande doit être présélectionnée à l'aide de la fonction OrderSelect().

Oui, j'ai pensé à ça et vous avez déjà écrit

 
EVGENII SHELIPOV #:

Bon après-midi Makar !!!!

D'après ce que je comprends, c'est la ligne en question. Dans ce cas, un ordre d'achat :

Makar, si vous pouvez expliquer plus en détail

Vous avez un groupe d'ordres, vous définissez un seuil de rentabilité et créez une ligne, et il est préférable de le faire en tant que fonction séparée !

    avg_price = NormalizeDouble(price / order_lots, Digits);
     {
     ObjectDelete(0, "AveragePriceLine");
     ObjectCreate(0,"AveragePriceLine" ,OBJ_HLINE, 0, 0, avg_price);
     ObjectSet("AveragePriceLine",OBJPROP_COLOR, Magenta);
     }

Ensuite, vous avez la valeur de profit en pips que vous voulez obtenir et ajouter / soustraire à / de avg_price.

    if (otype == OP_BUY) tp = NormalizeDouble (avg_price + TakeProfitGroupOrder*Point, Digits);
    if (otype == OP_SELL) tp = NormalizeDouble (avg_price - TakeProfitGroupOrder*Point, Digits);

Et ensuite une fonction de chalutage séparée

pour l'achat : si BID > avg_price = OrderModify()

for sales : if avg < avg_price = OrderModify()


Malheureusement dans votre code je ne vois pas d'actions logiques (subjectivement)

 
EVGENII SHELIPOV #:

C'est ce que je pensais et que vous avez déjà écrit.

Séparez les fonctions pour faciliter la navigation.

Voici un exemple de OnTick()

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   if(GetProfitFromStart()>CountProfit || GetProfitFromStart()<CountLoss*-1)
     {
      CloseOrder();
     }
   sl  = MathMax(Stoploss, MarketInfo(_Symbol, MODE_STOPLEVEL)) * Point();
   SL  = NormalizeDouble(sl*Point(),Digits);
   tp  = MathMax(Takeprofit, MarketInfo(_Symbol, MODE_STOPLEVEL)) * Point();
   TP  = NormalizeDouble(tp*Point(),Digits);
   //---
   if(CountOrders()==0&&ObjectGetInteger(0,"lab_Button",OBJPROP_STATE))
     {
      if(TradeSignal()>=0)
        {
         SendOrder(TradeSignal());
        }
     }
   //---
   if (!IsTradeAllowed()) 
     {DrawLABEL("lab_Торговля",0,0,0,clrRed,"Торговля запрещена"); return;} 
   else
     {DrawLABEL("lab_Торговля",0,0,0,clrLime,"Торговля разрешена");}
  }
//+------------------------------------------------------------------+

Comme vous pouvez le voir, il n'y a que des appels de fonction

 
MakarFX #:

Séparez les fonctions pour faciliter la navigation.

Voici un exemple de OnTick()

Comme vous pouvez le constater, il n'y a que des appels à des fonctions.

Merci, Makar. Je vais concentrer mes pensées et penser de cette façon.

 
EVGENII SHELIPOV #:

Merci, Makar. Je vais rassembler mes idées et penser dans cette direction.

(Parlez plus fort)
 
Question : Comment puis-je obtenir une ordonnance de retrait de la garde de l'EA ? Peut-être existe-t-il déjà des captures d'écran ou des fonctions mt4 dont je n'ai pas connaissance. S'il vous plaît, éclairez-moi. Je n'ai pas l'envie et les possibilités d'étudier le mql 3, 4, 5 etc.
Raison: