[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 141

 
Begemot7:
Veuillez préciser ce que vous entendez par "perdre des variables", c'est-à-dire les trouver aussi pour que l'EA les vérifie ?

Dans tous les EAs pour le trading réel et démo, je ne stocke pas de données importantes sur les ordres et les positions dans des variables. Le maximum que je puisse écrire les données, qui sont nécessaires pour la logique de l'EA, dans le commentaire de l'ordre. Lorsque j'ai besoin de savoir s'il y a des positions, combien il y en a, s'il y a des ordres, des positions fermées, comment elles ont été fermées, j'exécute une boucle sur les positions/ordres du marché ou les données historiques, je trouve l'ordre dont j'ai besoin et je récupère les informations dont j'ai besoin. Ainsi, je ne stocke pas toutes les informations importantes dans des variables, car elles peuvent être perdues lors d'un arrêt inattendu de l'ordinateur. Il peut toujours être récupéré plus tard. J'ai essayé de les stocker dans les variables globales du terminal - il s'est avéré que les informations ne sont pas toujours sauvegardées à cet endroit lorsque l'ordinateur se bloque. Et pour moi, superviser constamment l'écriture d'informations fraîches est trop difficile... Je trouve qu'il est plus facile de trouver ce dont j'ai besoin au moment où j'en ai besoin.
 
PapaYozh:

Vous pouvez obtenir les coordonnées du point sur lequel l'indicateur a été déposé en utilisant les fonctions :

WindowXOnDropped()

WindowYOnDropped()

Prix et heure :

FenêtrePrixOnDropped()

WindowTimeOnDropped()


Je vais essayer de l'intégrer. Un exemple serait similaire...
 

Je suis confronté à une situation étrange. Pourriez-vous me dire...

Il y a trois AE auto-écrites. La stratégie est la même, juste une mise en œuvre différente, en fonction de l'instrument. Paires : EURUSD, EURGBP et USDJPY. J'ai une bonne relation de travail avec les deux premiers, mais le dernier ne fonctionne pas. Le courtier est FX-Trend. Mon compte est un compte mini avec un lot minimum de 0,01 (il a été utilisé jusqu'à présent pour des tests).

En même temps : tout est OK sur un compte de démonstration. Lorsque je l'exécute dans le testeur, les transactions sont ouvertes sur le même compte réel dans le testeur. Mais ils ne le font pas pendant les transactions réelles. Les marqueurs graphiques d'ouverture de l'ordre (et tous les autres marqueurs) sont placés avec succès. Il n'y a absolument rien dans les journaux.

Tout fonctionne sur un VPS.


Je pense que ce sont toutes les informations. Je serais reconnaissant de tout conseil sur la direction à prendre pour creuser.

 
Sepulca:

Mieux comme ceci (au cas où l'EA est redémarré) :



S'il n'y a qu'un seul ordre, on peut s'en passer.


si(OrdersTotal()<1)

{

}

......

 
artmedia70:
Je ne stocke pas de données importantes sur les ordres et les positions dans des variables dans tous les EAs réels et de démonstration. Le maximum que je puisse écrire les données nécessaires à la logique de l'EA est dans le commentaire de l'ordre. Lorsque j'ai besoin de savoir s'il y a des positions, combien il y en a, s'il y a des ordres, des positions fermées, comment elles ont été fermées, j'exécute une boucle sur les positions/ordres du marché ou les données historiques, je trouve l'ordre dont j'ai besoin et je récupère les informations dont j'ai besoin. De cette façon, je ne stocke pas toutes les informations importantes dans des variables, car elles peuvent être perdues lors d'un arrêt inattendu de l'ordinateur. Il peut toujours être récupéré plus tard. J'ai essayé de les stocker dans les variables globales du terminal - il s'est avéré que les informations ne sont pas toujours sauvegardées à cet endroit lorsque l'ordinateur se bloque. Et pour moi, superviser constamment l'écriture d'informations fraîches est trop difficile... Je trouve qu'il est plus facile de trouver ce dont j'ai besoin au moment où j'en ai besoin.

C'est vrai... ...pour être encore plus rassuré. La bonne chose à faire est bien sûr de passer par toutes les commandes. Mais c'est un cas particulier. Si nous avons perdu GlobalVariables, nous devrions quitter cette société de courtage. Les GlobalVariables ne sont pas stockées sur votre ordinateur, mais dans la société de courtage jusqu'à trois mois si vous ne les modifiez pas. Ou ai-je tort ?
 
On dirait que je l'ai compris moi-même :). Ce qu'on dit est vrai - l'essentiel est de le formuler. En général, lorsque l'on exécute sur le marché, on fixe des positions stop et take à zéro. Et puis nous l'avons réglé correctement. Peut-être que quelqu'un le trouvera utile...
 
Sepulca:
C'est vrai... un réconfort supplémentaire. La bonne chose à faire, bien sûr, est de passer en revue toutes les commandes. Mais c'est un cas particulier. Et si GlobalVariables est perdu, nous devrions quitter cette société de courtage.

Que voulez-vous dire ? Cette société de courtage le fait-elle exprès ? On m'a dit que MT4 est un terminal qui peut être facilement contrôlé par le courtier et donc qu'il peut y avoir beaucoup de tricherie, qui en a entendu parler ?
 
Begemot7:

Je veux dire, est-ce que le DC fait ça exprès ? On m'a dit que MT4 est un terminal qui peut facilement être contrôlé par un courtier et donc que beaucoup de tricheries sont possibles. Qui a entendu parler de cela ?


Je ne comprends pas vraiment. Quel est l'intérêt de détruire vos variables globales, à moins bien sûr que vous n'en ayez accumulé un grand nombre (x......). Citation de la documentation :
"Les variables globales du terminal client ne doivent pas être mélangées avec les variables déclarées dans la portée globale du programme MQL4. Les variables globales existent dans le terminal client pendant 4 semaines depuis le dernier accès, après quoi elles sont automatiquement supprimées. Les variables globales du terminal client sont accessibles simultanément à partir de tous les programmes MQL4 lancés dans le terminal client."Si vous travaillez avec 0,01 ou 0,1 lot, personne ne vous opprimera, car c'est une bagatelle..... Mais si vous avez ouvert 100 lots sur le compte réel, vous feriez mieux d'être prêt à vous battre pour votre argent.

 

Besoin de l'aide des pros !!! Je me suis déjà creusé la tête avec ce code... Il y a 4 buffers ; 2 d'entre eux fonctionnent correctement (Buffer &buffer2), mais les 2 autres ne le font pas. Lorsqu'une certaine condition se produit, le tampon est rempli, lorsque cette valeur augmente pour l'un et diminue pour le second, les tampons sont supprimés (mis à zéro), mais les 2 tampons restants sont toujours suspendus dans le graphique. Pouvez-vous me dire comment le réparer ?

      //--- Функция расчета буферов CountZZ(BuferUp,BuferDn,iPeriod,Dev,Step);
int CountZZ( double& ExtMapBuffer[], double& ExtMapBuffer1[], double& ExtMapBuffer2[], double& ExtMapBuffer3[], int ExtDepth, int ExtDeviation, int ExtBackstep )
{
   int    shift, back,lasthighpos,lastlowpos;
   double val,res;
   double curlow,curhigh,lasthigh,lastlow,lastlow1,lasthigh1;
   int count = iBars(pair,tf)-ExtDepth;

   for(shift=count; shift>=0; shift--)
     {
     //--- Расчитываем буфер BuferUp
      val = iLow(pair,tf,iLowest(pair,tf,MODE_LOW,ExtDepth,shift));
      if(val==lastlow) val=0.0;
      else
        {
         lastlow=val;
         if((iLow(pair,tf,shift)-val)>(ExtDeviation*Point)) val=0.0;
         else
           {
            for(back=1; back<=ExtBackstep; back++)
              {
               res=ExtMapBuffer[shift+back];
               if((res!=0)&&(res>val)) ExtMapBuffer[shift+back]=0.0;
              }
           }
        }
       
          ExtMapBuffer[shift]=val;
      //--------------------------------------------------------------------    
          
     //--- Расчитываем буфер BuferUp2
      if (ExtMapBuffer[shift]>0.0)
      {
             if(use.narrow.bands) val = MathMin(iClose(pair,tf,shift),iOpen(pair,tf,shift));
                else {val = MathMax(iClose(pair,tf,shift),iOpen(pair,tf,shift));
             val = MathMin(val,MathMin(iHigh(pair,tf,shift+1),iHigh(pair,tf,shift-1)));}
      if(ExtMapBuffer[shift+back]==0.0) ExtMapBuffer1[shift+back]=0.0;
      } 
          ExtMapBuffer1[shift]=val;
      //--------------------------------------------------------------------    
          
      //--- Расчитываем буфер BuferDn
      val=iHigh(pair,tf,iHighest(pair,tf,MODE_HIGH,ExtDepth,shift));
     
      if(val==lasthigh) val=0.0;
      else
        {
         lasthigh=val;
         if((val-iHigh(pair,tf,shift))>(ExtDeviation*Point)) val=0.0;
         else
           {
            for(back=1; back<=ExtBackstep; back++)
              {
               res=ExtMapBuffer2[shift+back];
               if((res!=0)&&(res<val)) ExtMapBuffer2[shift+back]=0.0;
              }
           }
        }
      ExtMapBuffer2[shift]=val;
      //-------------------------------------------------------------------
      
      //--- Расчитываем буфер BuferDn2
      if (ExtMapBuffer2[shift]>0.0)
      {
             if(use.narrow.bands) val = MathMax(iClose(pair,tf,shift),iOpen(pair,tf,shift));
                else {val = MathMin(iClose(pair,tf,shift),iOpen(pair,tf,shift));
             val = MathMax(val,MathMax(iLow(pair,tf,shift-1),iLow(pair,tf,shift+1)));}
      if(ExtMapBuffer2[shift+back]==0.0) ExtMapBuffer3[shift+back]=0.0;
      }
      ExtMapBuffer3[shift]=val;
      //-------------------------------------------------------------------
      
     }
           
   // Отсееваем ненужные значения
   lasthigh=-1; lasthighpos=-1;
   lastlow=-1;  lastlowpos=-1;

   for(shift=count; shift>=0; shift--)
     {
      curlow=ExtMapBuffer[shift];
      curhigh=ExtMapBuffer2[shift];
      if((curlow==0)&&(curhigh==0)) continue;
      //---
      if(curhigh!=0)
        {
         if(lasthigh>0)
           {
            if(lasthigh<curhigh) ExtMapBuffer2[lasthighpos]=0;
            else ExtMapBuffer2[shift]=0;
           }
         //---
         if(lasthigh<curhigh || lasthigh<0)
           {
            lasthigh=curhigh;
            lasthighpos=shift;
           }
         lastlow=-1;
        }
      //----
      if(curlow!=0)
        {
         if(lastlow>0)
           {
            if(lastlow>curlow) ExtMapBuffer[lastlowpos]=0;
            else ExtMapBuffer[shift]=0;
           }
         //---
         if((curlow<lastlow)||(lastlow<0))
           {
            lastlow=curlow;
            lastlowpos=shift;
           }
         lasthigh=-1;
        }
     }
 
   for(shift=iBars(pair,tf)-1; shift>=0; shift--)
   {
      if(shift>=count) ExtMapBuffer[shift]=0.0;
         else
         {
            res=ExtMapBuffer2[shift];
            if(res!=0.0) ExtMapBuffer2[shift]=res;
         }
   }
}

 
artmedia70:

IMHO - mieux vaut rechercher votre ordre et voir s'il est sur le marché ou fermé, et comment il a été fermé, à la prise, au stop ou manuellement. A partir de là, nous commencerons à danser dans des directions différentes.

Alors tout sera précis. Et les variables globales peuvent être perdues...



Lesvariables globales, comme je l'ai entendu, peuvent être écrites dans un fichier...
Raison: