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

 
Alexandr Sokolov:
Où puis-je trouver le délai d'expiration de l'ordre dans le testeur de stratégie? L'onglet colonnes ne l'a pas
Comment définir le délai d'expiration ?
 
MakarFX:
Comment définir le délai d'expiration ?
void Open_Order(ENUM_ORDER_TYPE  Type,
                double           price,
                double           sl_price,
                double           tp_price,
                datetime         close)
  {
   
   MqlTradeRequest  request;
   MqlTradeResult   result;
   
   ZeroMemory(request);
   ZeroMemory(result);
   
   request.action        = TRADE_ACTION_PENDING;
   request.magic         = id_number;
   request.symbol        = _Symbol;
   request.volume        = volume;
   request.price         = price;
   request.sl            = sl_price;
   request.tp            = tp_price;
   request.deviation     = slippage;
   request.type          = Type;
   request.type_filling  = ORDER_FILLING_FOK;
   request.type_time     = ORDER_TIME_SPECIFIED;
   request.expiration    = close;
   
   if(!OrderSend(request,result)) Print("Error - ",result.retcode);
   
  }


 
Alexandr Sokolov:


Ajouter un commentaire sur le mandat, je ne vois pas d'autres options(
 
MakarFX:
Ajouter au commentaire sur la commande, je ne vois pas d'autres options(

Merci.

 
C'est mon premier commentaire sur le forum et je ne suis pas particulièrement familier avec la communauté, alors ne me lancez pas trop de tomates. Pour aller droit au but. Lorsque j'ai écrit mon EA, j'ai été confronté au problème que OrdersTotal() fonctionne (ce qui est logique) pour tous les ordres ouverts et en cas de mise en place de conditions pour "un ordre fermé, le suivant ouvert", j'ai été surpris de découvrir que même si j'ai mis en place des maîtres dans les conditions et dupliqué le code, deux ou plusieurs EA sur des graphiques ouverts sur mon compte ne se laissent pas travailler simultanément (jusqu'à ce qu'un ordre soit fermé, un autre ne sera pas ouvert). J'ai cherché à plusieurs endroits sur le sujet - j'ai obtenu beaucoup de solutions et comme je le comprends c'est élémentaire, mais dans tous les cas, rien n'a fonctionné. Quelle condition dois-je fixer lors de l'ouverture et/ou de la fermeture de "if... (...) " pour rendre unique OrdersTotal seulement pour un EA spécifique qui est attaché et l'autre (son OrdersTotal) ne serait pas lié de quelque façon que ce soit et garderait son propre compte de tous les ordres. Merci.
 
Порт-моне тв:
C'est mon premier commentaire sur le forum, je ne suis pas particulièrement familier avec la communauté, alors ne me lancez pas de tomates. Pour aller droit au but. Lorsque j'ai écrit mon EA, j'ai été confronté au problème suivant : OrdersTotal() fonctionne (ce qui est logique) pour tous les ordres ouverts et j'ai été surpris de constater que même si j'ai défini un maître dans les conditions et copié le code, deux EA ou plus sur des graphiques ouverts en même temps ne se laissent pas travailler mutuellement (tant qu'un ordre n'est pas fermé, le suivant ne s'ouvre pas). J'ai cherché à plusieurs endroits sur le sujet - j'ai obtenu beaucoup de solutions et comme je le comprends c'est élémentaire, mais dans tous les cas, rien n'a fonctionné. Quelle condition dois-je fixer lors de l'ouverture et/ou de la fermeture de "if... (...) " pour rendre unique OrdersTotal seulement pour un EA spécifique qui est attaché, et l'autre (son OrdersTotal) ne serait pas lié de quelque façon que ce soit et garderait son propre compte de tous les ordres. Merci.

Joignez votre code et les erreurs vous seront signalées.

 
//+------------------------------------------------------------------+
//| sova_2bars.mq4 |
//| Copyright 2020, MetaQuotes Software Corp.
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp.
#lien de propriété "https://www.mql5.com"
#propriété version "1.00"
#propriété stricte

extern int Magic = 6477 ;
extern double Lot = 0.01 ;
extern int Slippage = 3 ;
extern int TakeProfit = 1600 ;
extern int StopLoss = 800 ;
extern int Experation = 0 ;

double Openone, //prix d'ouverture de la première bougie
Opentwo, //prix d'ouverture de la deuxième bougie
Closeone, //prix de clôture de la première bougie
Closetwo, //la scène de la deuxième bougie
Lowone, //prix minimum de la première bougie
Lowtwo, //prix de la première bougie
Lowthree, //la scène du minimum de la troisième bougie
Openthree, //prix d'ouverture d'une troisième bougie
Closethree, //prix de clôture de la troisième bougie
CloseOrder, //clôturer l'ordre
Highone, /prix maximum de la première bougie
Hightwo, //le prix maximum de la deuxième bougie
Highhree, //le prix maximum de la deuxième bougie
Highfour, //le prix est le maximum de la deuxième bougie
Highfive, //prix d'un maximum d'une deuxième bougie
Highsix, //prix de la deuxième bougie maximale.
Highseven, //prix du maximum de la deuxième bougie
Highheight, //prix d'un maximum d'une deuxième bougie
Lowfour, //le prix du minimum de la quatrième bougie
Lowfive, //premier prix d'une cinquième bougie
Lowsix, //la scène du minimum d'une sixième bougie
Lowseven, //la scène d'un minimum d'une septième bougie
Loweight, //la scène du minimum de la huitième bougie
Closefour, //le prix de clôture de la quatrième bougie
Openfour,
Low15,
Low25,
SLbuy, TPbuy, SLsell, TPsell, //prix d'ouverture de la quatrième bougie
OrderOpenPrice ;
int ticket, ticketclose ;

//+------------------------------------------------------------------+
//| Fonction d'initialisation de l'expert |
//+------------------------------------------------------------------+
int OnInit()
{
return(INIT_SUCCEEDED) ;
}
//+------------------------------------------------------------------+
//| Fonction de désinitialisation experte |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}
//+------------------------------------------------------------------+
//| fonction tick expert |
//+------------------------------------------------------------------+
void OnTick()
{
//--- déterminer les prix des barres nécessaires
Openone = NormalizeDouble(iOpen(Symbol(), Period(), 0), Digits) ;
Highone = NormalizeDouble(iHigh(Symbol(), Period(), 0), Digits) ;
Hightwo = NormalizeDouble(iHigh(Symbol(), Period(), 1), Digits) ;
Highthree = NormalizeDouble(iHigh(Symbol(), Period(), 2), Digits) ;
Highfour = NormalizeDouble(iHigh(Symbol(), Period(), 3), Digits) ;
Highfive = NormalizeDouble(iHigh(Symbol(), Period(), 4), Digits) ;
Highsix = NormalizeDouble(iHigh(Symbol(), Period(), 5), Digits) ;
Highseven = NormalizeDouble(iHigh(Symbol(), Period(), 6), Digits) ;
Higheight = NormalizeDouble(iHigh(Symbol(), Period(), 7), Digits) ;
Opentwo = NormalizeDouble(iOpen(Symbol(), Period(), 1), Digits) ;
Openthree = NormalizeDouble(iOpen(Symbol(), Period(), 2), Digits) ;
Openfour = NormalizeDouble(iOpen(Symbol(), Period(), 3), Digits) ;
Closeone = NormalizeDouble(iClose(Symbol(), Period(), 0), Digits) ;
Closetwo = NormalizeDouble(iClose(Symbol(), Period(), 1), Digits) ;
Closethree = NormalizeDouble(iClose(Symbol(), Period(), 2), Digits) ;
Closefour = NormalizeDouble(iClose(Symbol(), Period(), 3), Digits) ;
Lowone = NormalizeDouble(iLow(Symbol(), Period(), 0), Digits) ;
Lowtwo = NormalizeDouble(iLow(Symbol(), Period(), 1), Digits) ;
Lowthree = NormalizeDouble(iLow(Symbol(), Period(), 2), Digits) ;
Lowfour = NormalizeDouble(iLow(Symbol(), Period(), 3), Digits) ;
Lowfive = NormalizeDouble(iLow(Symbol(), Period(), 4), Digits) ;
Lowsix = NormalizeDouble(iLow(Symbol(), Period(), 5), Digits) ;
Lowseven = NormalizeDouble(iLow(Symbol(), Period(), 6), Digits) ;
Low15 = NormalizeDouble(iLow(Symbol(), Period(), 14), Digits) ;
Low25 = NormalizeDouble(iLow(Symbol(), Period(), 24), Digits) ;

//----индикатор - условия--------------------------------------


double BigTrand = iMA(NULL, 0,50,0,MODE_SMA, PRICE_CLOSE, 1) ;
double SmallTrand = iMA(NULL, 0,5,0,MODE_SMA, PRICE_CLOSE, 1) ;
double LowerBB = iBands(_Symbol,_Period,17,1,0,PRICE_CLOSE,MODE_LOWER,1) ;
double UpperBB = iBands(_Symbol,_Period,17,1,0,PRICE_CLOSE,MODE_UPPER,1) ;
double MiddleBB = iBands(_Symbol,_Period,17,1,0,PRICE_CLOSE,MODE_MAIN,1) ;
double Bears = iBearsPower(_Symbol,_Period, 5, PRICE_CLOSE,0) ;
double Bulls = iBullsPower(_Symbol,_Period, 5, PRICE_CLOSE,0) ;
double Parab = iSAR(_Symbol,_Period,0.002, 1, 0) ;

SLbuy = NormalizeDouble(Ask - StopLoss*Point, 5) ;
TPbuy = NormalizeDouble(Ask + TakeProfit*Point, 5) ;
SLsell = NormalizeDouble(Bid + StopLoss*Point, 5) ;
TPsell = NormalizeDouble(Bid - TakeProfit*Point, 5) ;

//-------------функции---------------------------------------

si ( Ask>0 && Bid >0)
{

si (OrdersTotal()<1)
si (Close[1]>Open[1])
if(Bears < -0.00035 && MiddleBB > Ask)
{
ticket = OrderSend(Symbol(),OP_BUY, Lot, Ask, Slippage, SLbuy, TPbuy, "open buy order", Magic, 0, Blue)
}
si(OrdersTotal()==1)
if(Bulls > 0.00035 && MiddleBB < Ask && Bears > 0 && Opentwo < Closetwo && Openthree < Closethree && BigTrand < Ask)
CloseBuyPositions1() ;
}





//---- fin de la fonction
}
//---------------------------------------------------------------------
void CloseBuyPositions1()
{
for(int i=OrdersTotal()-1 ; i>=0 ; i--)
{
OrderSelect(i, SELECT_BY_POS,MODE_TRADES) ;
string CurrencyPair=OrderSymbol() ;
if(_Symbol==CurrencyPair)
si(OrderType()==OP_BUY)
{
OrderClose(OrderTicket(), OrderLots(), Bid, 3, NULL) ;
}
}
}




 
 int OrderOfSymbol=CounterOrderTradeType(-1);
 
//-------------функции---------------------------------------

if ( Ask>0 && Bid >0)
   {

 if (OrderOfSymbol<1)
    if (Close[1]>Open[1])
    if(Bears < -0.00035 && MiddleBB > Ask)
         {
    ticket = OrderSend(Symbol(),OP_BUY, Lot, Ask, Slippage, SLbuy, TPbuy, "открыт ордер на покупку", Magic, 0, Blue);
         }
         
   
if (OrderOfSymbol==1)
   if(Bulls > 0.00035 && MiddleBB < Ask && Bears > 0 && Opentwo < Closetwo && Openthree < Closethree && BigTrand < Ask)
    CloseBuyPositions1();
   } 
//+------------------------------------------------------------------+
//| Подсчет ордеров потекущему символу                               |
//+------------------------------------------------------------------+
int CounterOrderTradeType(ENUM_ORDER_TYPE order_type)
   {
   int cnt=0;
   //----
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
      {
      if(OrderSelect(pos, SELECT_BY_POS, MODE_TRADES)==false) continue;
      if(OrderSymbol()!=_Symbol) continue;
      if(order_type == OrderType() || order_type == -1) cnt++;
      }
   //----
   return(cnt);
   }
 
Порт-моне тв:
//+------------------------------------------------------------------+
//| sova_2bars.mq4 |
//| Copyright 2020, MetaQuotes Software Corp.
//| https://www.mql5.com |
//+------------------------------------------------------------------+

OrdersTotal() retourne le montant total de toutes les positions et ordres dans Metatrader 4

   for(int i = OrdersTotal() - 1; i >= 0; i--)
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         if(OrderMagicNumber() == iMagicNumber)
            if(OrderSymbol() == Symbol())
              {

               }

De cette façon, vous pouvez séparer les ordres pour un MedgX et un symbole...

 

@MakarFX, merci..... J'obtiens ces erreurs lors de la compilation

CounterOrderTradeType' - fonction non définie test for many expt trade.mq4 48 19

CounterOrderTradeType' - les déclarations de fonctions ne sont autorisées qu'au niveau global, de l'espace de noms ou de la classe test for many expt trade.mq4 141 5


MakarFX
MakarFX
  • www.mql5.com
Добавил тему Окно модификации Доброго времени суток. В терминале, если я дважды щелкаю мышью на линию ордера, то открывается окно модификации. Но если на линии находится цена открытия одного ордера и тейк профит другого, то открывается последний измененный ордер. Уважаемые Профи Добавил тему Нужен индикатор. Кто может написать такое? Я уже...