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

 
Alexey Viktorov #:

Je ne discute pas. " Les gris sont présentés sur la photo de ce post.


Sans le matériel source, ce sont ceux


Eh bien, je parlais de "ces". Lorsque j'ai eu un débordement et que les indicateurs ne s'affichaient pas, je n'ai pas regardé ce qui était affiché dans le menu présenté dans la capture d'écran du post que vous avez mentionné. Je ne peux rien dire de sûr ici.

Mais si les indicateurs ne sont pas dans le navigateur, mais qu'ils sont dans le dossier, cela signifie que les nouveaux indicateurs n'apparaîtront pas dans le navigateur tant que certains des anciens indicateurs n'auront pas été supprimés du dossier.

Je suis passé par là, j'ai fait ça. Je ne suis pas le seul.

 

Je voulais contourner la nécessité de redimensionner manuellement un tableau dynamique en l'assignant simplement comme tampon indicateur. Mais je n'arrive pas à me débarrasser de ArrayResize() comme s'il s'agissait d'un tableau dynamique de tampon indicateur dont la taille doit être surveillée par le terminal lui-même et qui ne doit pas être redimensionné manuellement :

https://www.mql5.com/ru/docs/series/bufferdirection:

Индикаторный буфер представляет из себя динамический массив типа double, размером которого управляет клиентский терминал с тем, чтобы он всегда соответствовал количеству баров, на которых индикатор рассчитывается. Обычный динамический массив типа double назначается в качестве индикаторного буфера с помощью функции SetIndexBuffer(). Для индикаторных буферов не требуется задавать размер с помощью функции ArrayResize(), исполняющая система терминала сама позаботится об этом.

Nous allons sur https://www.mql5.com/ru/docs/array/arrayisdynamic, exécutons le code et découvrons soudainement que :

2022.01.24 21:25:27.543 t (NZDUSD,D1) 3. Vérification du tampon de l'indicateur :

2022.01.24 21:25:27.543 t (NZDUSD,D1) Taille avant libération de la mémoire = 7278

2022.01.24 21:25:27.543 t (NZDUSD,D1) C'est un tableau dynamique = Aucun

2022.01.24 21:25:27.543 t (NZDUSD,D1) Taille après libération de la mémoire = 0

en même temps :

double ExtBuff[];      // индикаторный буфер
SetIndexBuffer(0,ExtBuff);

Je regarde dans le livre - je vois une figue. Ou avons-nous été trompés pendant tout ce temps ?

Ou peut-être est-ce dynamique une fois (à la première initialisation) et puis c'est tout ?

 
x572intraday #:

Je n'arrive pas à me débarrasser de ArrayResize(), qui est censé être un tableau dynamique de tampons indicateurs dont la taille doit être contrôlée par le terminal lui-même et qui ne doit pas être redimensionné manuellement :

https://www.mql5.com/ru/docs/series/bufferdirection:

Nous allons sur https://www.mql5.com/ru/docs/array/arrayisdynamic, exécutons le code et découvrons soudainement que :

En même temps, il :

Je regarde dans le livre - je vois une figue. Ou avons-nous été trompés pendant tout ce temps ?

Ou peut-être est-ce dynamique une fois (à la première initialisation) et puis c'est tout ?

22:23:17.002 Dynamic EURCAD,H1 : +============================+

0 22:23:17.002 Dynamic EURCAD,H1 : 1. Vérification d'un tableau dynamique :

0 22:23:17.002 Dynamic EURCAD,H1 : Taille avant libération de la mémoire = 100

0 22:23:17.002 Dynamic EURCAD,H1 : C'est un tableau dynamique = Oui

0 22:23:17.002 Dynamic EURCAD,H1 : Taille après libération de la mémoire = 0

0 22:23:17.002 Dynamic EURCAD,H1 : 2. Vérification des tableaux statiques :

0 22:23:17.002 Dynamic EURCAD,H1 : Taille avant libération de la mémoire = 100

0 22:23:17.002 Dynamic EURCAD,H1 : C'est un tableau dynamique = Aucun

0 22:23:17.002 Dynamic EURCAD,H1 : Taille après libération de la mémoire = 0

0 22:23:17.002 Dynamic EURCAD,H1 : 3. Vérifiez le tampon de l'indicateur :

0 22:23:17.002 Dynamic EURCAD,H1 : Taille avant libération de la mémoire = 2725

0 22:23:17.002 Dynamic EURCAD,H1 : C'est un tableau dynamique = Oui

0 22:23:17.002 Dynamic EURCAD,H1 : Taille après libération de la mémoire = 0

0 22:23:24.754 Dynamic EURCAD,H1 : raison de désinit 1

0 22:23:24.758 Indicateur personnalisé Dynamic EURCAD,H1 : supprimé

C'est à 4.

 
x572intraday #:

Je voulais contourner la nécessité de redimensionner manuellement un tableau dynamique en l'assignant simplement comme tampon indicateur. Mais je n'arrive pas à me débarrasser de ArrayResize() comme s'il s'agissait d'un tableau dynamique de tampon indicateur dont la taille doit être surveillée par le terminal lui-même et qui ne doit pas être redimensionné manuellement :

https://www.mql5.com/ru/docs/series/bufferdirection:

Nous allons sur https://www.mql5.com/ru/docs/array/arrayisdynamic, exécutons le code et découvrons soudainement que :

En même temps, il :

Je regarde dans le livre - je vois une figue. Ou avons-nous été trompés pendant tout ce temps ?

Ou peut-être est-ce une dynamique ponctuelle (à la première initialisation) et c'est tout ?

oui, alors c'est ça :-)

...après SetIndexBuffer il est impossible d'utiliser ArrayResize et du point de vue du programme, le tableau est statique, avec une taille prédéfinie (contrôlée par l'extérieur).

 
Alekseu Fedotov #:

22:23:17.002 Dynamic EURCAD,H1 : +============================+

0 22:23:17.002 Dynamic EURCAD,H1 : 1. Vérification d'un tableau dynamique :

0 22:23:17.002 Dynamic EURCAD,H1 : Taille avant libération de la mémoire = 100

0 22:23:17.002 Dynamic EURCAD,H1 : C'est un tableau dynamique = Oui

0 22:23:17.002 Dynamic EURCAD,H1 : Taille après libération de la mémoire = 0

0 22:23:17.002 Dynamic EURCAD,H1 : 2. Vérification des tableaux statiques :

0 22:23:17.002 Dynamic EURCAD,H1 : Taille avant libération de la mémoire = 100

0 22:23:17.002 Dynamic EURCAD,H1 : C'est un tableau dynamique = Aucun

0 22:23:17.002 Dynamic EURCAD,H1 : Taille après libération de la mémoire = 0

0 22:23:17.002 Dynamic EURCAD,H1 : 3. Vérifiez le tampon de l'indicateur :

0 22:23:17.002 Dynamic EURCAD,H1 : Taille avant libération de la mémoire = 2725

0 22:23:17.002 Dynamic EURCAD,H1 : C'est un tableau dynamique = Oui

0 22:23:17.002 Dynamic EURCAD,H1 : Taille après libération de la mémoire = 0

0 22:23:24.754 Dynamic EURCAD,H1 : raison de désinit 1

0 22:23:24.758 Indicateur personnalisé Dynamic EURCAD,H1 : supprimé

C'est à 4.

Fantastique ! Quelle est cette magie ? Je viens de vérifier sur EURCAD,H1 - encore non.

Et qu'est-ce que le 4 ? Il n'y a que trois points dans l'exemple.

 
x572intraday #:

Fantastique ! Quelle est cette magie ? Je viens de vérifier sur EURCAD,H1 - "Non" encore.

Et c'est quoi le 4? Il n'y a que trois points dans l'exemple.

Terminal MT4

 
x572intraday #:

Fantastique ! Quelle est la magie ? Je viens de vérifier sur EURCAD,H1 - "Non" encore.

Et c'est quoi le 4 ? Il n'y a que trois points dans l'exemple.

0 23:33:06.088 test (EURUSD,D1) +============================+

0 23:33:06.088 test (EURUSD,D1) 1. Vérification du tableau dynamique :

0 23:33:06.088 test (EURUSD,D1) Taille avant libération de la mémoire = 100

0 23:33:06.088 test (EURUSD,D1) Ceci est un tableau dynamique = Oui

0 23:33:06.088 test (EURUSD,D1) Taille après libération de la mémoire = 0

0 23:33:06.088 test (EURUSD,D1) 2. Test de réseau statique :

0 23:33:06.088 test (EURUSD,D1) Taille avant libération de la mémoire = 100

0 23:33:06.088 test (EURUSD,D1) Ceci est un tableau dynamique = None

0 23:33:06.088 test (EURUSD,D1) Taille après libération de la mémoire = 100

0 23:33:06.088 test (EURUSD,D1) 3. Vérifiez le tampon de l'indicateur :

0 23:33:06.088 test (EURUSD,D1) Taille avant libération de la mémoire = 1054

0 23:33:06.088 test (EURUSD,D1) Ceci est un tableau dynamique = Aucun

0 23:33:06.088 test (EURUSD,D1) Taille après libération de la mémoire = 0


Terminal MT5, aucune idée.

 
x572intraday #:

Je voulais contourner la nécessité de redimensionner manuellement un tableau dynamique en l'assignant simplement comme tampon indicateur. Mais je n'arrive pas à me débarrasser de ArrayResize() comme s'il s'agissait d'un tableau dynamique de tampon indicateur dont la taille doit être surveillée par le terminal lui-même et qui ne doit pas être redimensionné manuellement :

https://www.mql5.com/ru/docs/series/bufferdirection:

Nous allons sur https://www.mql5.com/ru/docs/array/arrayisdynamic, exécutons le code et découvrons soudainement que :

En même temps, il :

Je regarde dans le livre - je vois une figue. Ou avons-nous été trompés pendant tout ce temps ?

Ou peut-être est-il dynamique une fois (à la première initialisation) et ensuite c'est tout ?

Le tableau de la mémoire tampon est dynamique. Dans MQL, les tableaux dynamiques ont des signes d'objets, pour autant que j'ai compris en travaillant avec eux (comme dans les langages de très haut niveau). Mais si vous déclarez un tableau dynamique comme un tampon (en utilisant SetIndexBuffer), cette zone de mémoire deviendra réservée. C'est pourquoi la plupart des fonctions standard ne peuvent pas modifier sa taille. J'utilise parfois des tableaux d'objets comme tampons d'indicateurs. Et si je le fais, la mémoire de ces tableaux est libérée dans le destructeur de l'objet. Ainsi, la libération de la mémoire tampon des indicateurs par l'application(ou l'objet) elle-même est autorisée. Mais cela ne signifie pas que le tableau peut être libéré pendant le fonctionnement de l'indicateur. Tout doit être fait avec sagesse.

 

Après-midi

Pouvez-vous me conseiller, j'essaie d'écrire un conseiller expert, et quand je le teste, une chose étrange se produit...

J'ai une fonction

CalcAngleTrend(NormalizeDouble((a[0]-a[1]), MA_DIGITS));

double CalcAngleTrend(double d)
 {
  double a = (double) ((atan(d*pow(10,_Digits-2)))*(180/M_PI)*coefAngle);
Print("d: ", d);
  return(NormalizeDouble(a, ANGLE_DIGITS));
 }

Quelle est la situation, je lance une instance de l'EA fonctionnant sur un graphique, et j'exécute la seconde en mode débogage sur le même graphique avec MT4
Les données d'entrée pour la fonction sont les mêmes, mais les données de sortie sont différentes ! !!? Il y a quelque chose que je ne comprends pas, il me semble...(

Это выдает запущеный вариант:

2022.01.25 15:01:12.880 USDJPY,M5: d: 0.0014887
2022.01.25 15:01:12.880 USDJPY,M5: d: -0.0060861
2022.01.25 15:01:12.880 USDJPY,M5: Angle Slow: +1.70580000
2022.01.25 15:01:12.880 USDJPY,M5: Angle Fast: -6.96560000

это в режиме отладки:

2022.01.25 15:01:14.330 USDJPY,M5: d: 0.0014887
2022.01.25 15:01:14.330 USDJPY,M5: d: -0.0060861
2022.01.25 15:01:14.330 USDJPY,M5: Angle Slow: +4.26450000
2022.01.25 15:01:14.330 USDJPY,M5: Angle Fast: -17.41390000

me conseiller sur le chemin à suivre pour trouver des informations !!!

PS : a calculé la différence d'exactement 2,5 fois le rendement
 
Владимир Казаков écrire un conseiller expert, et quand je le teste, une chose étrange se produit...

J'ai une fonction

Quelle est la situation, j'exécute une instance de l'EA sur un graphique, et j'exécute la seconde en mode débogage sur le même graphique avec MT4
Les données d'entrée pour la fonction sont les mêmes, mais les données de sortie sont différentes ! !!? Il y a quelque chose que je ne comprends pas, il me semble...(

pouvez-vous me dire dans quel sens il faut creuser pour trouver des informations ? !

PS : a calculé la différence d'exactement 2,5 fois le rendement

Il s'agit de la formule de calcul de l'angle. Dans le code, on peut voir que pour son calcul, on utilise une seule coordonnée et un certain coefficient, dont le but n'est pas clair. Qu'est-ce que c'est ? Veuillez préciser les données que vous utilisez pour calculer l'angle.