Toute question de débutant, afin de ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 6. - page 900

 
lufer:
Cela ne résout pas le problème, maintenant il semble que quelque chose ne va pas dansOnTick() - quand je charge l'EA dans la fenêtre du terminal rien ne se passe, et quand j'essaie de le supprimer, le terminal se bloque pendant un très long moment puis le supprime après un certain temps. J'ai essayé d'attribuer manuellement des valeurs à certains éléments, tout est OK. Quelque chose à propos de la boucle d'initialisation du tableau semble être faux.

Que voulez-vous dire par "ne résout pas" ? Vous introduisez des données dans le tableau Int avec une double précision inférieure à 1. La sortie contiendra naturellement des zéros. Eh bien, la boucle a été paralysée aussi.

Ce code devrait fonctionner :

#property strict

extern int N=100;                       // Количество баров

double Mas[];                             // Объявление массива
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+

int OnInit()
  { 
    ArrayResize(Mas,N);
     return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+

void OnDeinit(const int reason)
  {

  }

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+

void OnTick()
  {                                       
       for(int i=0; i<N; i++)                     // Цикл записи данных
         {                      
    
              Mas[i]=iATR(NULL,0,5,i+1);           // Вычисление значений          
         }
           Print(DoubleToStr(Mas[0],_Digits),"," ,DoubleToStr(Mas[50],_Digits),"," ,DoubleToStr(Mas[99],_Digits));      // Вывод значений
  }
 
evillive:

Que voulez-vous dire par "ne fonctionne pas" ? Vous poussez des données doubles inférieures à 1 dans le tableau int, bien sûr la sortie sera des zéros. Et la boucle était en désordre.

C'est le genre de code qui devrait fonctionner :

Bien sûr, vous avez tout à fait raison au sujet dedouble Mas[] (j'ai considéré que ATP compte les points en valeurs entières pour une raison quelconque). Le fait est que cela n'apparaissait pas même après avoir changé le type de tableau, mais j'ai réalisé mon erreur. Merci beaucoup pour votre aide !
 
Je ne veux pas créer un sujet séparé, je vais donc poser la question ici. La documentation de la fonction OrderSelect indique que toutes les données de la commande sont copiées dans "l'environnement du programme" . L'"environnement du programme" se réfère-t-il uniquement au tableau actuel ou à l'ensemble du terminal ? Je pose cette question car j'ai un problème pour travailler simultanément avec plusieurs ordres provenant de différents graphiques sur lesquels est installé le même EA.
 
.roman.:
Je ne veux pas créer un sujet séparé, je vais donc poser la question ici. La documentation de la fonction OrderSelect indique que toutes les données de la commande sont copiées dans "l'environnement du programme" . Cela concerne-t-il uniquement la carte en cours ou l'ensemble du terminal ? Je pose cette question car j'ai un problème pour travailler simultanément avec plusieurs ordres provenant de différents graphiques sur lesquels est installé le même EA.
Ces ordres sont disponibles pour toutes les applications utilisateur exécutées dans le terminal où cet ordre est ouvert.
 
evillive:
Ces ordres sont disponibles pour tous les programmes utilisateurs exécutés dans le terminal où l'ordre est ouvert.
Comment se prémunir alors contre la copie erronée dans l'environnement logiciel des données d'un autre ordre qui a été au même moment sélectionné dans un autre graphique ?
 
.roman.:
Comment se prémunir alors contre la copie erronée dans l'environnement du logiciel des données d'un autre ordre qui a été au même moment sélectionné à partir d'un autre graphique ?
Les données des différents ordres ne se chevauchent en aucune façon, il n'y a rien à protéger.
 
evillive:
Les données des différents ordres ne se chevauchent en aucune façon et il n'y a pas lieu de s'en protéger.

Nous parlons de choses différentes alors. À l'origine, je faisais référence à la question de savoir quel est l'"environnement logiciel" décrit dans la documentation. Est-ce que ça veut dire tout le terminal ?

Plus précisément, mon problème était que malgré la comparaison exclusive de OrderSymbol et Symbol dans la fonction OrderSelect, il y avait un problème lorsque les données (heure d'ouverture de l'ordre, prix d'ouverture, etc.) pouvaient apparaître sur le graphique d'une paire. En d'autres termes, je me demande s'il est possible que pendant la fonction OrderSelect de l'EA sur EURUSD, par exemple, l'EA commence également à travailler avec la fonction OrderSelect sur une autre paire de devises et que les données de l'ordre du dernier appel de cette fonction soient chargées dans l'"environnement du programme" ?

 
.roman.:

Nous parlons de choses différentes alors. À l'origine, je faisais référence à la question de savoir quel est l'"environnement logiciel" décrit dans la documentation. Est-ce que ça veut dire tout le terminal ?

Plus précisément, mon problème était que malgré la comparaison exclusive de OrderSymbol et Symbol dans la fonction OrderSelect, il y avait un problème lorsque les données (heure d'ouverture de l'ordre, prix d'ouverture, etc.) pouvaient apparaître sur le graphique d'une paire. Je me demande donc s'il est possible que pendant la fonction OrderSelect de l'EA sur EURUSD, par exemple, l'EA commence également à travailler avec la fonction OrderSelect sur une autre paire de devises et que les données d'ordre du dernier appel de cette fonction soient chargées dans l'"environnement du programme" ?

J'ai besoin du code. Il y a une erreur
 
.roman.:

Nous parlons de choses différentes alors. À l'origine, je faisais référence à la question de savoir quel est l'"environnement logiciel" décrit dans la documentation. Est-ce que ça veut dire tout le terminal ?

Plus précisément, mon problème était que malgré la comparaison exclusive de OrderSymbol et Symbol dans la fonction OrderSelect, il y avait un problème lorsque les données (heure d'ouverture de l'ordre, prix d'ouverture, etc.) pouvaient apparaître sur le graphique d'une paire. En d'autres termes, je me demande s'il est possible que pendant la fonction OrderSelect de l'EA sur EURUSD, par exemple, l'EA commence également à travailler avec la fonction OrderSelect sur une autre paire de devises et que les données de l'ordre du dernier appel de cette fonction soient chargées dans l'"environnement du programme" ?

Chaque commande possède des paramètres uniques qui la distinguent clairement des autres commandes. Il s'agit du ticket et de l'heure d'ouverture (ou de fermeture, si vous recherchez dans l'historique). Ils sont aussi uniques au sein d'un même compte de trading que le motif de la rétine.

Il ne suffit pas de sélectionner l'ordre à l'aide de la fonction OrderSelect, mais nous devons vérifier si c'est le bon ordre ou si nous devons sélectionner le suivant.

 
Vinin:
Vous avez besoin d'un code. Il y a une erreur
for(int i=OrdersTotal()-1;i>=0;i--)
        {
            if(OrderSelect(i,SELECT_BY_POS) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic)
               {
                  if(OrderType()==OP_BUY)
                     {
                        double openPrice = 0;
                        openPrice = OrderOpenPrice();
                        if(Ask>openPrice)
                           {
                              Print("OrderSymbol ",OrderSymbol()," OrderTicket ",OrderTicket()," OrderOpenPrice ",OrderOpenPrice());
                           }
                     }
                  if(OrderType()==OP_SELL)
                     {
                        double openPrice = 0;
                        openPrice = OrderOpenPrice();
                        if(Bid<openPrice)
                           {
                              Print("OrderSymbol ",OrderSymbol()," OrderTicket ",OrderTicket()," OrderOpenPrice ",OrderOpenPrice());
                           }
                     }
               }
        }

Les calculs inutiles (sans rapport avec le problème) ont été supprimés. Les imprimantes ont été ajoutées au code spécifiquement pour montrer le problème. Malgré la comparaison du symbole de l'ordre avec le symbole, sur lequel l'EA est ouvert, il peut le montrer (du graphique osi prendre les données de l'ordre sur l'euro, par exemple, comme dans ce cas) :


Raison: