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

 
Tenimagalon:
Je vois que nous avons une vraie discussion. Alex, tu y participes aussi :)) Eh bien, M. les programmeurs, avez-vous un consensus ? Regardez, la fonction principale est de fermer les ordres du même type sur la base du profit total. 4 positions sont ouvertes, 2 d'entre elles en EURUSD (achat et vente) et 2 en USDCHF (achat et vente).Si les ordres d'achat obtiennent un profit, il les ferme, laisse l'ordre de vente tranquille ou laisse l'ordre de vente tranquille.

Attrapez

double MyProfit=1000; // уровень профита
//+--------------------------------------------------------------------------------------------------------------------+
//| Expert tick function                                                                                               |
//+--------------------------------------------------------------------------------------------------------------------+
void OnTick()
  {
//---
   if(Open_Pr("",0)>MyProfit)DelOrders("",0); // закрываем покупки
   if(Open_Pr("",1)>MyProfit)DelOrders("",1); // закрываем продажи
//---
  }
//+--------------------------------------------------------------------------------------------------------------------+
//|  Суммарный профит в валюте депозита открытых позиций                                                               |
//| or_ty=0 - ордера типа BUY                                                                                          |
//| or_ty=1 - ордера типа SELL                                                                                         |
//+--------------------------------------------------------------------------------------------------------------------+
double Open_Pr(string sy="", int or_ty=0)
  { double p = 0;
   if (sy == "0") sy = Symbol();
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
     {
      if(OrderSelect(pos,SELECT_BY_POS)==true)
        {
         if(OrderSymbol() == sy || sy == "")
           {
            if(OrderType()==or_ty) {p+=OrderProfit()+OrderSwap()+OrderCommission();}
           }
        }
     }
   return(p);
  }
//+--------------------------------------------------------------------------------------------------------------------+
//| Функция удаления и закрытия ордеров                                                                                |
//| or_ty=0 - ордера типа BUY                                                                                          |
//| or_ty=1 - ордера типа SELL                                                                                         |
//+--------------------------------------------------------------------------------------------------------------------+
void DelOrders(string sy="", int or_ty=0)
  {
   while(true)
     {
      bool find_order=false;
      //----
      if (sy == "0") sy = Symbol();
      for(int pos=OrdersTotal()-1;pos>=0;pos--)
      if(OrderSelect(pos,SELECT_BY_POS)==true)
      if(OrderSymbol() == sy || sy == "")
        {
         find_order=true;
         //----
         if(OrderType()==or_ty)
           {
            RefreshRates(); int slip=(int)(((Ask-Bid)/Point)*2);
            if(OrderClose(OrderTicket(),OrderLots(),Bid,slip,clrBlue)==false){}
           }
         //----
         if(OrderType()==or_ty)
           {
            RefreshRates(); slip=(int)(((Ask-Bid)/Point)*2);
            if(OrderClose(OrderTicket(),OrderLots(),Ask,slip,clrRed)==false){}
           }
         Alert("Все ордера закрыты!");
        } 
      if(find_order==false) Alert("Нет ордеров!");break;
     } 
  }
//+--------------------------------------------------------------------------------------------------------------------+
 
Tenimagalon:
Je vois que nous avons une vraie discussion. Alex, tu es impliqué :)) Eh bien, messieurs les programmeurs, avez-vous un consensus ? Regardez, le problème est de fermer les ordres du même type pour un profit total. 4 positions sont ouvertes, 2 de EURUSD (achat et vente) et 2 de USDCHF (achat et vente).Si les ordres d'achat obtiennent un profit, il les ferme, laisse l'ordre de vente tranquille ou laisse l'ordre de vente tranquille.

comme ça ? :)

1

 
MakarFX:

Attrapez

Ummm intéressant. Merci beaucoup :)
 
Taras Slobodyanik:

comme ça ? :)


Si vous avez 3 positions ouvertes sur différentes paires, c'est-à-dire 2 Bai et un sit, alors oui, dans ce cas, le robot fermera les paires lorsque le profit total sera atteint. Si vous essayez d'ouvrir 4 positions sur 2 paires, vous n'obtiendrez jamais le bénéfice total ; dans ce cas, l'expert ferme les paires d'ordres, soit d'achat, soit de vente. Mais il ferme l'achat EURUSD et l'achat USDCHF ou toute autre paire sélectionnée.
 
Taras Slobodyanik:

comme ça ? :)


Avez-vous créé laboîte de dialogue vous-même ou le SB?
 
Tenimagalon:
Si vous avez 3 positions ouvertes sur différentes paires, c'est-à-dire 2 Bai et une Sell, alors oui, dans ce cas, le robot fermera les positions lorsque le profit total sera atteint. Si vous essayez d'ouvrir 4 positions sur 2 paires, vous n'obtiendrez jamais le bénéfice total ; dans ce cas, l'expert ferme les paires d'ordres, soit d'achat, soit de vente. Mais il ferme l'achat EURUSD et l'achat USDCHF ou toute autre paire sélectionnée.

ici, il y a beaucoup de baies et de selves)

2

 
MakarFX:
Avez-vous réalisé la boîte de dialogue vous-même ou SB?

Y a-t-il des panneaux ?

ps. à moins qu'il y ait des objets si vous le faites

 
Taras Slobodyanik:

Y a-t-il des panneaux ?

Oui, c'est pour ça que je demande.

Si vous l'avez fait vous-même, veuillez partager le code (réduire, étendre, déplacer).

 
Taras Slobodyanik:

ici, il y a beaucoup de baies et de selves)

Taras :) Vous devez ouvrir 4 positions, une par une sur l'EUR, une par une sur le CHF, puis deux autres, une vente sur l'EUR, une vente sur le CHF. Et regardez quand l'achat et la vente atteignent le profit commun, le robot fermera les deux positions ou pas. Et dans vos écrans, je vois des ordres pour un instrument qui ne devrait pas être a priori.
 
Tenimagalon:
Taras :) Vous devriez ouvrir 4 positions en une seule étape. 1 longue en EUR, une longue en CHF, puis deux autres, une vente en EUR, une vente en CHF. Et regardez quand l'achat et l'achat atteignent le profit total, le robot fermera les deux positions ou pas. Et dans vos écrans, je vois des ordres pour un instrument qui ne devrait pas être a priori.

grouper les paires par achat ou vente est une erreur.

Par exemple, sur une paire (achat), il pourrait y avoir un achat du dollar et sur l'autre paire (vente), il pourrait y avoir une vente du dollar.

Raison: