Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 282

 
Алексей Барбашин:

void OnTick() { int period = 15 ; int timeis = returntick(period, 1).curtime ; Print("timeis= ", TimeToStr(timeis,TIME_SECONDS)) ; C'est ici que j'essaie de détruire le pointeur }


On ne sait pas exactement ce qui peut être détruit ici. Pas étonnant que la mémoire fuit. Qu'est-ce qu'un pointeur ? Un pointeur est une référence à l'adresse mémoire où est stockée la variable dynamique créée. Essentiellement, vous appelez la procédure d'obtention d'un pointeur sur la variable de classe, dans cette procédure l'objet classe est créé, placé en mémoire, puis le pointeur est renvoyé à la fonction d'obtention des ticks et..... est détruit lorsque vous quittez la fonction. Notez que le pointeur est détruit, mais que la mémoire n'est pas effacée ! Et à chaque nouveau tic, de plus en plus de mémoire est consommée ! Pour éviter ce point dans votre code, vous devez d'abord supprimer l'abréviation et placer le pointeur dans une autre variable :TickReturn* temptick =returntick(period, 1);// récupérer le pointeur et le placer dans une variable int timeis = temptick.curtime ; // Récupère la valeur requise de l'objet par le pointeur ...... delete temptick ; // Détruit le pointeur et vide la mémoire

Et avant de détruire le pointeur, il est préférable de vérifier s'il est correct pour éviter l'erreur de suppression.

Dans l'ensemble, je ne m'embêterais pas avec les pointeurs et la classe en particulier, car la tâche est beaucoup plus facile en fait et il n'y a pas besoin d'utiliser la classe. Créez une structure avec les champs nécessaires, déclarez une variable globale avec le type de cette structure, créez une fonction pour mettre à jour les informations dans cette structure à chaque tick et utilisez-la pour collecter ce dont vous avez besoin, car la variable sera globale, vous n'aurez pas besoin de l'utiliser dans les fonctions et vous n'aurez pas besoin de pointeurs.


Merci, je me suis souvenu pourquoi j'ai utilisé la sténographie, la variable n'est pas mise à jour dans les boucles (enfin, évidemment la fonction n'est pas appelée) et je dois en créer une nouvelle pour chaque éternuement, puis la tuer. De toute façon, il est plus facile de passer du returntick au switch.

 
Vitaly Muzichenko:

Envoyer une post-requête au serveur avec le numéro de compte

Sur le serveur, vérifiez le numéro entrant par rapport à toutes les lignes du fichier CSV, et s'il y a une correspondance, envoyez une réponse au terminal à partir de cette ligne du fichier. Il ne reste plus qu'à lire la réponse du serveur dans le terminal et à l'afficher sur le graphique.

En général, il est plus facile d'implémenter de telles choses sur MySQL que sur un fichier.


Merci pour la réponse, Vitaly !

J'essaie de le comprendre depuis trois jours, mais ce n'est pas si loin (je suis un débutant - au début de ma carrière)...

Pouvez-vous la décrire plus en détail ? Je voulais juste vous donner un exemple...

Désolé pour mon manque de compréhension...

 

Et une dernière question...

Je voulais que la poutre dessine une ligne à partir du prix actuel - jusqu'à la fin de la journée jusqu'à la fin du niveau (23:59) (blanc2), mais elle dessine jusqu'à la fin de la journée (comme requis), mais pas au niveau (blanc2), et descend profondément jusqu'au graphique de bordure.

Et je lui donne n'importe lequel des niveaux (rouge1, rouge2, etc.), mais il rayonne toujours vers le haut ou vers le bas à l'infini. Est-ce que j'ai écrit correctement pour que le faisceau commence toujours à partir deHigh[0], c'est-à-dire qu'avec un nouveau chandelier, il se déplace vers un nouveau chandelier (c'est-à-dire qu'il suit le prix) ou il ne dessine le faisceau qu'une seule fois ? Les niveaux sont obtenus à partir de CSV. S'il vous plaît, aidez-moi...

if(уровни==Daily)
        {
         double red1 = d_input[0];
         double red2 = d_input[1];
         double blue1 = d_input[2];
         double blue2 = d_input[3];
         double white = d_input[4];
         double signal= d_input[5];
         double z_1 = d_input[6];
         double z_2 = d_input[7];
         double white2 = d_input[8];
                 
         t0 = дата_уровней + 1*PeriodSeconds(PERIOD_M1);
         t1 = дата_уровней + 24*PeriodSeconds(PERIOD_H1);

         Draw_Level("red1", red1, c_day_1, STYLE_SOLID, 2);  
         Draw_Level("red2", red2, c_day_1, STYLE_SOLID, 2);  
         Draw_Level("blue1", blue1, c_day_2, STYLE_SOLID, 2);  
         Draw_Level("blue2", blue2, c_day_2, STYLE_SOLID, 2);  
         Draw_Level("white", white,c_day_3, STYLE_SOLID,2);
         Draw_Level("white2", white2,c_day_3, STYLE_DOT,0);
        
         Draw_Level("green1",z_1, c_day_4, STYLE_SOLID,2);
         Draw_Level("green2",z_2,c_day_3, STYLE_DOT,2);
               
        string name = "Ray";
         int window = 0, time1 = (int)Time[0], time2 = (int)StrToTime(txt_data+" 23:59");
          double price1 = High[0], price2= white2;
         
          ObjectCreate(name, OBJ_TREND, window, time1, price1, time2, price2);
          ObjectSet(name, OBJPROP_COLOR, clrAqua);
          ObjectSet(name, OBJPROP_RAY_RIGHT, false);
          ObjectSet(name,OBJPROP_WIDTH,1);
          ObjectSet(name,OBJPROP_STYLE,2);
              
        
        if(показ_не отработанных)
            if(!check_white_level(дата_уровней,white))
               draw_line(t0,white,c_day_3);
                 else(Draw_Level("white", white,c_day_3, STYLE_SOLID,1));// меняет толщину белой при достижении ценой
                
        }
 
MosheDayan:

Et une dernière question...

Je voulais que la poutre dessine une ligne à partir du prix actuel - jusqu'à la fin de la journée jusqu'à la fin du niveau (23:59) (blanc2), mais elle dessine jusqu'à la fin de la journée (comme requis), mais pas au niveau (blanc2), et descend profondément jusqu'au graphique de bordure.

Et je le place à n'importe quel niveau (rouge1, rouge2, etc.), mais il rayonne toujours vers le haut ou vers le bas à l'infini. Niveaux obtenus à partir de CSV. Aidez-nous...

Découvrez (vérifiez) la valeur de white2 avec Alert ou Print.
 
STARIJ:
Vérifiez la valeur de white2 en utilisant Alert ou Print.
L'alerte écrit immédiatement "EURUSD ErrorFileOpen() for write" et tous les niveaux de la journée en cours disparaissent... Les niveaux d'hier et tous les niveaux précédents sont toujours là... Alors... Le faisceau commence là où il devrait et va jusqu'au niveau du blanc2 d'hier, mais pas en fin de journée, et aujourd'hui, en descendant verticalement, il s'arrête visuellement au niveau du blanc2 d'hier.
 
MosheDayan:
J'ai essayé de le vérifier en utilisant Alert et j'ai immédiatement écrit "EURUSD Error FileOpen() for writing" et tous les niveaux du jour courant disparaissent... Les niveaux d'hier et tous les niveaux précédents sont toujours là... Alors... Le faisceau sur le point commence là où il devrait et va jusqu'au niveau du blanc2 d'hier, mais pas en fin de journée, et aujourd'hui, verticalement vers le bas, on peut visuellement voir qu'il s'arrête au niveau du blanc2 d'hier.

Pourquoi avez-vous besoin d'accéder au fichier ? Vous avez la valeur white2 et vous l'affichez avec Alert("white2 = ", white2) avant de l'utiliser ;

 
STARIJ:

Pourquoi avez-vous besoin de vous référer au fichier ? Vous avez la valeur de white2 et l'affichez avec Alert("white2 = ", white2) avant de l'utiliser ;

Merci pour cette précision.... Voilà ce que ça dit : blanc2 = 0,0

p.s. C'est moi qui suis stupide... White2 = 0.0 est pour les autres paires de devises qui n'ont pas de niveaux dans le CSV. Mais il y a des niveaux pour EURUSD dans le CSV et Alert les montre hier (white2 1.1720) et aujourd'hui (white2 1.1810).

Le rayon commence là où il devrait, mais il va au niveau du white2 d'hier à 1.1720, au lieu du white2 d'aujourd'hui à 1.1810 et il ne va pas jusqu'à la fin de la journée 23:59, mais aujourd'hui il s'arrête au white2 d'hier, c'est-à-dire 1.1720.

 

quelque chose d'incompréhensible

a décrit une fonction

int IsBelow

//>>>>>>>>>>>>>>>>>>>>>

{

Alert("beg IsBelow") ;

Alert("NextTick=",NextTick) ;

//---------------------------


//---------------------------

Alert("NextTick=",NextTick) ;

Alert("end IsBelow") ;

}

//>>>>>>>>>>>>>>>>>>>>>>>

a obtenu un message avant le point-virgule expexted body {

Question : quel point-virgule est attendu ?

Veuillez expliquer ...

 
buyanov:

quelque chose d'incompréhensible

a décrit une fonction

int IsBelow

//>>>>>>>>>>>>>>>>>>>>>

{

Alert("beg IsBelow") ;

Alert("NextTick=",NextTick) ;

//---------------------------


//---------------------------

Alert("NextTick=",NextTick) ;

Alert("end IsBelow") ;

}

//>>>>>>>>>>>>>>>>>>>>>>>

a reçu un message avant le point-virgule expexted body {

Question : quel point-virgule est attendu ?

Veuillez expliquer...


void IsBelow()

 
buyanov:

quelque chose d'incompréhensible

a décrit une fonction

int IsBelow

//>>>>>>>>>>>>>>>>>>>>>

{

Alert("beg IsBelow") ;

Alert("NextTick=",NextTick) ;

//---------------------------


//---------------------------

Alert("NextTick=",NextTick) ;

Alert("end IsBelow") ;

}

//>>>>>>>>>>>>>>>>>>>>>>>

a reçu un message avant le point-virgule expexted body {

Question : quel point-virgule est attendu ?

Veuillez expliquer ...

La réponse est ici
Функции - Основы языка - Справочник MQL4
Функции - Основы языка - Справочник MQL4
  • docs.mql4.com
Функции - Основы языка - Справочник MQL4