[ARCHIVE]Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Je ne peux aller nulle part sans toi - 5. - page 265

 

Question pour les professionnels : nous devons extraire des données sur la dernière fermeture.
commande, il n'est pas possible de garder le compte des numéros de commande car
Si vous voulez obtenir les données sur le dernier ordre clôturé, vous devez compter tous les numéros d'ordre, c'est impossible car plusieurs EAs fonctionnent et tout le monde met et ferme.
Chaque EA a son propre assistant.
La question porte sur les données du dernier ordre clôturé dans le terminal ?

QUI CONNAÎT LA RÉPONSE S'IL VOUS PLAÎT ! !!

 
vasabu2012:
Question pour les professionnels : Nous devons extraire les données de la dernière fermeture.
Il n'est pas possible de tenir le compte des numéros de commande, car
J'ai quelques EAs qui fonctionnent et tous mettent et ferment.
Chaque EA a son propre assistant.
Laquestion porte sur les données du dernier ordre clôturé dans le terminal ?

Je ne suis pas un scientifique, mais si vous cherchez le dernier ordre, trouvez-le par le temps...
 
PRÉCISÉMENT COMMENT ?
 
Comment faire pour qu'un EA ne fonctionne pas seulement sur la démo ?
Dossiers :
sovetnik.ex4  31 kb
 
sergio7:
Comment faire pour qu'un EA ne fonctionne pas seulement sur la démo ?
Celui que vous avez posté ici - RIEN
 
sergio7:
Comment faire pour qu'un EA ne fonctionne pas seulement sur la démo ?

Ce n'est pas le code source ! Ça devrait être mq4, pas eh4 !
 
paladin80:
Celui que vous avez posté ici n'est RIEN.


Le même intrus dans un autre fil :

sergio704.04.2013 21:04
Aidez à faire fonctionner l'EA pas seulement sur la démo.
Fichiers joints :
tpyokfcx.ex4(30.27 KB)
 

J'ai décidé de vérifier les bibliothèques écrites parTarasBy. J'ai commencé par celui-cihttps://www.mql5.com/ru/code/10659

Il y a quelques questions. Je vais être cohérent. Par exemple :

//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
//|  Автор : TarasBY, taras_bulba@tut.by                                              |
//+-----------------------------------------------------------------------------------+
//|        Получаем торговую информацию по символу                                    |
//IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII+
void fGet_MarketInfo (string fs_Symbol, int fi_Ticket = 0)
{
//----
         if (fs_Symbol != bs_Symbol || fi_Ticket < 0)
         {
                  if (fi_Ticket > 0)
                  {
                     bs_Symbol = OrderSymbol();
                  }
                  else
                  {
                     bs_Symbol = fs_Symbol;
                  }
                  if (bs_Symbol == Symbol())
                  {
                      bi_SymDigits = Digits;
                      bd_SymPoint = Point;
                  }
                  else
                  {
                      bi_SymDigits = MarketInfo (fs_Symbol, MODE_DIGITS);
                      bd_SymPoint = MarketInfo (fs_Symbol, MODE_POINT);
                  }
        if (bd_SymPoint == 0.0)
        {
           bd_SymPoint = fGet_Point (fs_Symbol);
        }
                  bd_ProfitMIN = NDP (ProfitMIN_Pips);
         }
         if (fi_Ticket > 0)
         {
            fGet_OrderDetails (fi_Ticket);
         }
    //---- Получаем текущие цены по инструменту
    RefreshRates();
    bda_Price[0] = NDD (fGet_TradePrice (0, bb_RealTrade, bs_Symbol));
    bda_Price[1] = NDD (fGet_TradePrice (1, bb_RealTrade, bs_Symbol));
    bd_Spread = NDD (bda_Price[1] - bda_Price[0]);
//----
}

Nous pouvons le voir dans le paramètre de la fonction elle-même :

fi_Ticket = 0

En général, ces fonctions sont appelées dès la sélection de la commande, ce qui signifie qu'elles auront un ticket. Pourquoi devrions-nous alors attribuer une valeur par défaut de zéro?

L'étape suivante est encore plus intéressante :

if (fs_Symbol != bs_Symbol || fi_Ticket < 0)
{
   if (fi_Ticket > 0)
   {
      bs_Symbol = OrderSymbol();
   }
   else
   {
     bs_Symbol = fs_Symbol;
                  }
                  if (bs_Symbol == Symbol())
                  {
                      bi_SymDigits = Digits;
                      bd_SymPoint = Point;
                  }

La variable fs_Symbol est immédiatement comparée à bs_Symbol.

Lebs_Symbol ci-dessus n'a pas été initialisé, à l'endroit où la fonctionfGet_MarketInfo()elle-même est appelée. Et à quoi sert ce symbole bs_Symbol?

également dans l'état :

if (fs_Symbol != bs_Symbol || fi_Ticket < 0)

condition, sifi_Ticket < 0, alors suivant...

if (fi_Ticket > 0)
{
   bs_Symbol = OrderSymbol();
}

et cela contredit déjà la condition. Au début du code la conditionfi_Ticket < 0 doit tenir, et ensuite à l'intérieur de cette condition le ticket > 0. Où est la logique ?

 
hoz:

Dans le paramètre de la fonction elle-même, nous voyons :

fi_Ticket = 0

Habituellement, ces fonctions sont appelées après que les commandes ont été sélectionnées, ce qui signifie qu'elles auront un ticket. Pourquoi alors attribuer la valeur par défaut à zéro?

Si nous appelons la fonction sans ce paramètre, pas un seul if ne sera exécuté, et la fonction commencera par la chaîne de caractères

RefreshRates();

L'étape suivante est encore plus intéressante :

if (fs_Symbol != bs_Symbol || fi_Ticket < 0)
{
   if (fi_Ticket > 0)
   {
      bs_Symbol = OrderSymbol();
   }
   else
   {
     bs_Symbol = fs_Symbol;
                  }
                  if (bs_Symbol == Symbol())
                  {
                      bi_SymDigits = Digits;
                      bd_SymPoint = Point;
                  }

La variable fs_Symbol est immédiatement comparée à bs_Symbol.

Lebs_Symbol ci-dessus n'a pas été initialisé, là où la fonctionfGet_MarketInfo()elle-même est appelée. Et à quoi sert ce bs_Symbol de toute façon ? Si la bibliothèque se compile sans erreur,

Si la bibliothèque compile sans erreur, alors la variable bs_Symbol doit être déclarée quelque part au niveau global. C'est là (ou dans une autre fonction) qu'il faut chercher son initialisation...

Également en l'état :
if (fs_Symbol != bs_Symbol || fi_Ticket < 0)

Sifi_Ticket < 0, la prochaine chose à faire...

if (fi_Ticket > 0)
{
   bs_Symbol = OrderSymbol();
}

et cela contredit déjà la condition. Au début du code, la conditionfi_Ticket < 0 doit être vérifiée, puis à l'intérieur de cette condition , le ticket > 0. Où est la logique ?

Note : pour que le code fonctionne, la conditionfi_Ticket < 0 OU fs_Symbol != bs_Symbol doit tenir, ce qui signifie que s'il y a un autre if (fi_Ticket > 0) à la fin du code, cela signifie que seule la condition d'entrée alternative doit tenir.
Raison: