Question sur la fonction OrderSelect

 

boopa26 peut écrire le code d'envoi d'ordre mais ne peut pas écrire la fonction de sélection d'ordre pour fermer des ordres. veut écrire la fonction de sélection d'ordre pour fermer des ordres sans cycles for ou while. boopa26 veut écrire la fonction de sélection d'ordre pour fermer des ordres avec des conditions if mais boopa26 ne comprend pas pour assembler la fonction de sélection d'ordre pour fermer des ordres.


exemple d'envoi d'un ordre d'achat

if(OrdersTotal()==0)OrderSend(Symbol(),OP_BUY,.1,Ask,3,0,0,NULL,9,0,clrNONE) ;


Exemple de sélection de commande. boopa26 ne comprend pas

OrderSelect(int index,int select,int pool)


Qu'est-ce que int index ?

qu'est-ce que int select ?

Qu'est-ce que int pool ?

Comment fonctionne OrderSelect ?

 

Avez-vous lu la documentation ?

Parameters

ticket

[index de la commande ou ticket de commande selon le deuxième paramètre.

select

[in] Sélection des drapeaux. Il peut s'agir de l'une des valeurs suivantes :

SELECT_BY_POS - indice dans le pool d'ordres,
SELECT_BY_TICKET - l'index est un ticket de commande.

pool=MODE_TRADES

[in] Indice facultatif du pool de commandes. Utilisé lorsque le paramètre sélectionné est SELECT_BY_POS. Il peut s'agir de l'une des valeurs suivantes :

MODE_TRADES (par défaut) - ordre sélectionné dans le pool d'ordres (ordres ouverts et en attente),
MODE_HISTORY - ordre sélectionné dans le pool d'historique (ordre fermé et annulé).


 
lire la documentation maintenant https://docs.mql4.com/trading/orderselect
 
gumrai aurait pu inclure un lien vers la documentation. je plaisante. merci gumrai
 
bool  OrderSelect(
   int     index,            // index or order ticket
   int     select,           // flag
   int     pool=MODE_TRADES  // mode
   );

boopa26 veut fermer les ordres ouverts, donc boopa choisit MODE_TRADES comme troisième paramètre.


boopa26 fait-il SELECT_BY_POS ou SELECT_BY_TICKET ? boopa26 ne sait pas.

SELECT_BY_POS //index inside order pool,
SELECT_BY_TICKET //index is order ticket.
 

boopa26 choisit MODE_TRADES comme troisième paramètre

boopa26 choisit SELECT_BY_POSITION comme deuxième paramètre

boopa26 choisit l'indice de commande comme premier paramètre.


exemple

static int order_index;

if(OrderSelect(order_index,SELECT_BY_POSITION,MODE_TRADES)==1
 

https://docs.mql4.com/trading/orderclose

comment boopa26 fait-il un cycle sans cycles for ou while mais avec des conditions if pour clôturer des ordres ouverts avec la fonction de sélection des ordres ?

la documentation de la fermeture de l'ordre exige que le ticket de l'ordre soit trouvé mais boopa26 sélectionne l'ordre pour trouver la position de l'ordre et non pas le ticket.

bool  OrderClose(
   int        ticket,      // ticket
   double     lots,        // volume
   double     price,       // close price
   int        slippage,    // slippage
   color      arrow_color  // color
   );

1. sélectionner l'ordre

2. fermer l'ordre

ne sait pas comment

 
//+------------------------------------------------------------------+
//|                                               Moving Average.mq4 |
//|                   Copyright 2005-2014, MetaQuotes Software Corp. |
//|                                              http://www.mql4.com |
//+------------------------------------------------------------------+
#property copyright   "2005-2014, MetaQuotes Software Corp."
#property link        "http://www.mql4.com"
#property description "Moving Average sample expert advisor"

#define  MAGICMA  20131111
//--- Inputs
input double Lots          =0.1;
input double MaximumRisk   =0.02;
input double DecreaseFactor=3;
input int    MovingPeriod  =12;
input int    MovingShift   =6;
//+------------------------------------------------------------------+
//| Calculate open positions                                         |
//+------------------------------------------------------------------+
int CalculateCurrentOrders(string symbol)
  {
   int buys=0,sells=0;
//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderSymbol()==Symbol() && OrderMagicNumber()==MAGICMA)
        {
         if(OrderType()==OP_BUY)  buys++;
         if(OrderType()==OP_SELL) sells++;
        }
     }
//--- return orders volume
   if(buys>0) return(buys);
   else       return(-sells);
  }
//+------------------------------------------------------------------+
//| Calculate optimal lot size                                       |
//+------------------------------------------------------------------+
double LotsOptimized()
  {
   double lot=Lots;
   int    orders=HistoryTotal();     // history orders total
   int    losses=0;                  // number of losses orders without a break
//--- select lot size
   lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/1000.0,1);
//--- calcuulate number of losses orders without a break
   if(DecreaseFactor>0)
     {
      for(int i=orders-1;i>=0;i--)
        {
         if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false)
           {
            Print("Error in history!");
            break;
           }
         if(OrderSymbol()!=Symbol() || OrderType()>OP_SELL)
            continue;
         //---
         if(OrderProfit()>0) break;
         if(OrderProfit()<0) losses++;
        }
      if(losses>1)
         lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);
     }
//--- return lot size
   if(lot<0.1) lot=0.1;
   return(lot);
  }
//+------------------------------------------------------------------+
//| Check for open order conditions                                  |
//+------------------------------------------------------------------+
void CheckForOpen()
  {
   double ma;
   int    res;
//--- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//--- get Moving Average 
   ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//--- sell conditions
   if(Open[1]>ma && Close[1]<ma)
     {
      res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,"",MAGICMA,0,Red);
      return;
     }
//--- buy conditions
   if(Open[1]<ma && Close[1]>ma)
     {
      res=OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,3,0,0,"",MAGICMA,0,Blue);
      return;
     }
//---
  }
//+------------------------------------------------------------------+
//| Check for close order conditions                                 |
//+------------------------------------------------------------------+
void CheckForClose()
  {
   double ma;
//--- go trading only for first tiks of new bar
   if(Volume[0]>1) return;
//--- get Moving Average 
   ma=iMA(NULL,0,MovingPeriod,MovingShift,MODE_SMA,PRICE_CLOSE,0);
//---
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue;
      //--- check order type 
      if(OrderType()==OP_BUY)
        {
         if(Open[1]>ma && Close[1]<ma)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
      if(OrderType()==OP_SELL)
        {
         if(Open[1]<ma && Close[1]>ma)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,White))
               Print("OrderClose error ",GetLastError());
           }
         break;
        }
     }
//---
  }
//+------------------------------------------------------------------+
//| OnTick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- check for history and trading
   if(Bars<100 || IsTradeAllowed()==false)
      return;
//--- calculate open orders by current symbol
   if(CalculateCurrentOrders(Symbol())==0) CheckForOpen();
   else                                    CheckForClose();
//---
  }
//+------------------------------------------------------------------+
moyenne mobile que le conseiller expert utilise pour le cycle de fermeture des ordres ouverts
 

Je pense que "boopa26" doit faire ce qui suit :

  1. Premièrement, "boopa26" doit apprendre les bases du codage (comme le C).
  2. Ensuite, "boopa26" doit lire et suivre le livre/tutoriel (même s'il est vieux et périmé).
  3. En même temps, "boopa26" doit lire toute la documentation avec une attention particulière aux mises à jour de MQL4 qui ne sont pas mentionnées dans le livre/tutoriel.
  4. Ensuite, "boopa26" doit étudier plusieurs exemples de code pour les Indicateurs, les Expert Advisors (EAs) et les Scripts dans la base de code utilisateur.
  5. Ensuite, "boopa26" peut commencer à créer ses propres indicateurs, mais très simples, et les développer lentement jusqu'à ce qu'il soit capable de comprendre et de créer des indicateurs plus complexes.
  6. Ensuite, "boopa26" peut commencer à créer ses propres EA, mais très simples, et les développer lentement jusqu'à ce qu'il soit capable de comprendre et de créer des EA plus complexes.

"boopa26" doit aussi apprendre une leçon très importante, à savoir que "boopa26" ne doit pas sauter toutes les étapes nécessaires, car sinon "boopa26" ne fera que perdre le temps de tout le monde, et au lieu d'un "beau gâteau", tout ce que "boopa26" aura sera du "charbon brûlé".

 
FMIC:

Je pense que "boopa26" doit faire ce qui suit :

  1. Premièrement, "boopa26" doit apprendre les bases du codage (comme le C).
  2. Ensuite, "boopa26" doit lire et suivre le livre/tutoriel (même s'il est vieux et périmé).
  3. En même temps, "boopa26" doit lire toute la documentation avec une attention particulière aux mises à jour de MQL4 qui ne sont pas mentionnées dans le livre/tutoriel.
  4. Ensuite, "boopa26" doit étudier plusieurs exemples de code pour les Indicateurs, les Expert Advisors (EAs) et les Scripts dans la base de code utilisateur.
  5. Ensuite, "boopa26" peut commencer à créer ses propres indicateurs, mais très simples, et les développer lentement jusqu'à ce qu'il soit capable de comprendre et de créer des indicateurs plus complexes.
  6. Ensuite, "boopa26" peut commencer à créer ses propres EAs, mais très simples, et les développer lentement jusqu'à ce qu'il soit capable de comprendre et de créer des EAs plus complexes.

"boopa26" doit aussi apprendre une leçon très importante, à savoir que "boopa26" ne doit pas sauter toutes les étapes nécessaires, car sinon "boopa26" ne fera que perdre le temps de tout le monde, et au lieu d'un "beau gâteau", tout ce qu'il aura sera du "charbon de bois brûlé".

1. ne nécessite pas de connaissances en informatique. mql4 a des fonctions différentes.

2. déjà lu le livre

3. déjà lu la documentation

4. déjà écrit le code

5. ?

6. ?

boopa26 ne perd pas le temps des gens

Professeur de FMIC qui apprend à "boopa26" à faire des gâteaux au charbon de bois

Classe de gâteau au charbon de bois FMIC