Problèmes liés à l'affectation d'éléments de tableau 2D
Résultats de 1 é 3 sur 3

Sujet : Problèmes liés à l'affectation d'éléments de tableau 2D

  1. #1
    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.

  2. #2

    Citation Envoy? par ;
    OrderStack [0] [0] = Qnt;/Montant des commandes TotalOrders = OrderStack [0] [0];
    salut, juste une note que la r?servation d'espace pour neuf doubles pour les informations qui peuvent ?tre conserv?es dans un entier, comme indiqu? dans le texte cit? ci-dessus, est mauvaise gestion de l'espace. ?tudiez et apprenez les fonctions du tableau dans le fichier d'aide de MetaEditor (Navigator) et gardez toujours ? l'esprit que plus le nombre de donn?es flottant autour de votre codeordinateur est ?lev?, plus elles flottent.

  3. #3
    Cette erreur indique une ?criture dans un tableau en lecture seule. Depuis que ce post est si vieux, je suppose que soit vous avez trouv? une solution et n'a pas poster de suivi ou trouv? une solution alternative. Code ins?r? double OrderStack # 91; 7 # 93; # 91; 9 # 93; fonction void (double tableau # 91; # 93; # 91; # 93 {Alerte (taille du tableau, ArraySize (tableau)); tableau # 91; 0 # 93; # 91; 0 # 93; = EURUSD;/Erreur non autoris?e ? ?crire} Le secret des tableaux en lecture?criture pass?s ? la fonction est dans la d?claration. Le bloc de code suivant ne provoquera pas d'erreur. Code ins?r? double OrderStack # 91; 7 # 93; # 91; 9 # 93; fonction vide (n ? 91, couleur = violet n ? 93, double n ? 91, couleur n ? 93, n ? 91, n ? 93, n ? 91, couleur = n ? 93, n ? 91, n ? 93, n ? 91) # 93; array # 91; # 93; # 91; # 93 {Alert (taille du tableau, ArraySize (tableau)); tableau # 91; 0 # 93; # 91; 0 # 93; = EURUSD;/erreur non autoris?e ? ?crire} le double dans la d?claration de fonction pointe la fonction vers le tableau global (ou le tableau dans l'appelant de fonction). J'esp?re que cela fait gagner du temps pour les gens, qui peuvent rencontrer vos malheurs.

Régles des messages

  • Vous ne pouvez pas cr?er de sujets
  • Vous ne pouvez pas r?pondre aux sujets
  • Vous ne pouvez pas importer de fichiers joints
  • Vous ne pouvez pas ?diter vos messages
  •  
  • Les BB codes sont Activés
  • Les Smileys sont Activés
  • Le BB code [IMG] est Activé
  • Le code [VIDEO] est Activé
  • Le code HTML est Désactivé
Le site d'sundytrading utilise des cookies
Le site d'sundytrading utilise des cookies pour vous assurer la meilleure expérience sur notre site ; certains sont déjà effectifs. Vous pouvez consulter plus de détails sur leurs usages ici. Veuillez cliquer sur le bouton à droite pour accepter nos cookies. Si vous continuez à utiliser le site internet d???sundytrading, nous considérerons que vous acceptez nos cookies.