Je fais partie d'un expert-conseil sur lequel j'ai travaill? pour tester une ?gie de trading, mais j'ai des probl?mes avec les limitations de MQL4 quand je travaille avec des tableaux. Ce que je veux, c'est utiliser un tableau pour stocker des informations sur les positions que j'ai ouvertes et pour red?finir les valeurs de certains ?l?ments. Ce que je veux mettre en ??uvre est une s?rie de trois fonctions qui d'abord, reconstruit le tableau des ordres ouverts. Cela serait fait apr?s chaque ouverture ou fermeture de poste. La prochaine fonction s?quentielle est cens?e trier les ordres ouverts en fonction de leurs prix d'ouverture respectifs. La derni?re fonction s?quentielle consiste ? red?finir le stop loss et ? prendre des valeurs de profit pour les trades ouverts. Les valeurs red?finies pour les pertes d'arr?t et les valeurs b?n?ficiaires doivent ?tre bas?es sur le prix d'ouverture de la premi?re commande. Je voulais que l'EA ex?cute la stop loss et prenne des valeurs de profit silencieusement. Je suis conscient qu'il y a des risques ? mettre en place une ?valuation environnementale de cette fa?on et je souhaite proc?der de cette mani?re.
double OrderStack [7] [9];/Tableau d'informations de commande
if ((OrderStack [TotalOrders 1] [1] lt; Ench?re) (TotalOrders lt; 2))/Ouvre une nouvelle position de vente ? un prix plus avantageux
{//3
TicketNum = OrderSend (Symbol (), OP_SELL, LotSize2, Ench?re, 3,0,0, CommentString, 0,0, Rouge);/Ouvre la commande.
if (TicketNumlt; 0)
{//4
Imprimer (Erreur lors de l'ouverture du commerce: Code d'erreur =, GetLastError (), Lotsize:, Lots);
}/3
autre
{//4
if (OrderSelect (TicketNum, SELECT_BY_TICKET))
{//5
Imprimer (ordre de vente ouvert au prix:, OrderOpenPrice ());
OrderFlagS = 1;/Utilis? par la fonction EA principale pour les commentaires
Terminal();/Appel ? la fonction qui cr?e un tableau de donn?es d'ordre ouvert
}/4
}/3
}/2
} /1
}/0
//------------------------------------------------ --------------------
//Terminal.mqh
//------------------------------------------------ ------------------------------ 1 --
//Fonction de comptabilit? de commande
//Variables globales:
//OrderStack [7] [9]
//Le dernier tableau d'ordres connu
//1er indice = num?ro de commande
//[] [0] non d?fini
//[] [1] commander prix ouvert (prix absolu)
//[] [2] StopLoss de la commande (valeur abs.
//[] [3] TakeProfit de la commande (valeur abs.
//[] [4] num?ro de commande
//[] [5] volume de commande en lots (valeur de prix abs.)
//[] [6] type de commande 0 = B, 1 = S, 2 = BL, 3 = SL, 4 = BS, 5 = SS
//[] [7] ordre nombre magique
//[] [8] 0/1 commentaire disponibilit?
//Mas_Tip [6]
//Tableau du nombre de commandes de tous types
//[] type de commande: 0 = B, 1 = S, 2 = BL, 3 = SL, 4 = BS, 5 = SS
//------------------------------------------------ ------------------------------ 2 -
double terminal ()
{ /1
int Mas_Tip [6];
int Qnt = 0;
int i;
//Compteur de commandes
//------------------------------------------------ ------------------------------ 3 -
ArrayInitialize (OrderStack, 0.0);/Mettre ? z?ro le tableau
ArrayInitialize (Mas_Tip, 0);/Mettre ? z?ro le tableau
//------------------------------------------------ ------------------------------ 4 -
pour (i = 0; i lt; OrdersTotal (); i )/Pour les ordres de march? et en attente
{//2
if ((OrderSelect (i, SELECT_BY_POS) == vrai) (OrderSymbol () == Symbol ()))
//S'il y a le prochain .. et notre paire de devises
{//3
//------------------------------------------------ --------------------- 5 -
Qnt ;/Montant des commandes
OrderStack [Qnt] [1] = OrderOpenPrice ();/Commande prix ouvert
OrderStack [Qnt] [2] = OrderStopLoss ();/SL prix
OrderStack [Qnt] [3] = OrderTakeProfit ();/TP prix
OrderStack [Qnt] [4] = OrderTicket ();/Num?ro de commande
OrderStack [Qnt] [5] = OrderLots ();/Montant des lots
Mas_Tip [OrderType ()] ;/Montant des commandes du type
OrderStack [Qnt] [6] = OrderType ();/Type de commande
OrderStack [Qnt] [7] = OrderMagicNumber ();/Nombre magique
si (OrderComment () ==)
{//4
OrderStack [Qnt] [8] = 0;/S'il n'y a pas de commentaire
}/3
autre
{//4
OrderStack [Qnt] [8] = 1;/S'il y a un commentaire
}/3
}/2
//------------------------------------------------ --------------------- 6 -
OrderStack [0] [0] = Qnt;/Montant des commandes
//------------------------------------------------ ------------------------------ 7 --
FillStack (OrderStack, Trend_Up);/Appel ? la fonction qui trie les donn?es d'?change ouvertes en fonction de la direction de la tene et du prix d'?change initial
retour (0);
} /1
}/0
//------------------------------------------------ ------------------------------ 8 -
//
//Fonction de tri des commandes existantes
//
double SortStack (double OrderStack [7] [9], bool?en Trend_Up)/Fonction de tri du tableau d'ordre reconstruit
//commande bas?e sur le prix initial de la commande initiale
{ /1
int i, TotalOrders;
TotalOrders = OrderStack [0] [0];
if (Trend_Up == true)
{//2
ArraySort (OrderStack [TotalOrders] [1], TotalOrders, 1, MODE_DECEND);
} /1
if (Trend_Up == false)
{//2
ArraySort (OrderStack [TotalOrders] [1], TotalOrders, 1, MODE_ASCEND);
} /1
FillStack (OrderStack, Trend_Up);/Appel ? la fonction qui d?finit les param?tres commerciaux pour les effets ind?sirables
//transactions sur le march? dans le tableau des ordres
retour (0);
}/0
//
//Enregistrement des param?tres de n?goce de march? d?favorable
//
double FillStack (double OrderStack [7] [9], bool?en Trend_Up)/D?finit les param?tres de n?goce de march? d?favorables
//bas? sur la commande initiale du piercing Bollinger
{ /1
double prix;
PriceIn = OrderStack [1] [1];
{//2
if (Trend_Up == true)
{//3
OrderStack [1] [2] = Prix In - StopLossVal;/Colonne 2, colonne d'entr?e Stop Loss
OrderStack [1] [3] = prix en cours 0,0030;/Colonne 3, colonne d'entr?e de prise de b?n?fices
OrderStack [2] [1] = PriceIn - 0.0010;/Colonne 1, Ordonnance moyenne en baisse Acheter
OrderStack [2] [3] = Prix en - 0,0005;/Colonne 3, Prendre le profit pour Avg Down Market Entry
}/2
if (Trend_Up == false)
{//3
OrderStack [1] [2] = Prix In StopLossVal;/Colonne 2, colonne d'entr?e Stop Loss
OrderStack [1] [3] = Prix en - 0,0030;/Colonne 3, colonne d'entr?e de prise de b?n?fices
OrderStack [2] [1] = prix 0,0010;/Colonne 1, Ordonnance moyenne en baisse Acheter
OrderStack [2] [3] = prix en 0,0005;/Colonne 3, Prendre le profit pour Avg Down Market Entry
}/2
} /1
retour (0);
}/0
Le probl?me que j'ai avec l'impl?mentation de cette EA est que le compilateur me donne des messages d'erreur ? propos de ???l'?l?ment de tableau ne peut pas ?tre assign???? pour le code dans ma fonction FillStack (). Ce qui est curieux, c'est que c'est exactement ce qui est fait dans la fonction Terminal () au-dessus de ma fonction FillStack (). Quoi qu'il en soit, j'esp?re que l'un des programmeurs exp?riment?s peut me donner une solution pour ce bug particulier.
Il est difficile de croire qu'avec toutes les similitudes que MQL4 a avec C , la possibilit? d'assigner des valeurs aux ?l?ments du tableau comme C ne serait pas aussi pr?sente dans MQL4. Merci pour l'aide.