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é).
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.
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 :
- Premièrement, "boopa26" doit apprendre les bases du codage (comme le C).
- Ensuite, "boopa26" doit lire et suivre le livre/tutoriel (même s'il est vieux et périmé).
- 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.
- Ensuite, "boopa26" doit étudier plusieurs exemples de code pour les Indicateurs, les Expert Advisors (EAs) et les Scripts dans la base de code utilisateur.
- 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.
- 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é".
Je pense que "boopa26" doit faire ce qui suit :
- Premièrement, "boopa26" doit apprendre les bases du codage (comme le C).
- Ensuite, "boopa26" doit lire et suivre le livre/tutoriel (même s'il est vieux et périmé).
- 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.
- Ensuite, "boopa26" doit étudier plusieurs exemples de code pour les Indicateurs, les Expert Advisors (EAs) et les Scripts dans la base de code utilisateur.
- 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.
- 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
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation
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 ?