Caractéristiques du langage mql4, subtilités et techniques - page 4

 
Alexey Kozitsyn:
Wow, c'est un point subtil. L'ont-ils écrit dans le SD ?

L'auteur a écrit. Les capacités du langage ont longtemps été en contradiction avec l'ancienne documentation, c'est-à-dire que des choses non documentées sont effectivement utilisées, ce qui est une étrange affirmation à faire en conséquence.

Forum sur le trading, les systèmes de trading automatisés et les tests de stratégie

Comment comparer rapidement double et QNaN ?

fxsaber, 2016.10.11 15:56

Laissée inaperçue.

double QNaN   =Nan(0x7FF7000000000000);  

La valeur initiale d'une variable globale peut désormais être déclarée via une fonction !

Il en va de même pour le reste des variables statiques.

Il est étrange que les développeurs aient gardé le silence sur cette innovation.


Документация по MQL5: Основы языка / Переменные / Статические переменные
Документация по MQL5: Основы языка / Переменные / Статические переменные
  • www.mql5.com
Основы языка / Переменные / Статические переменные - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
fxsaber:
Il y a un point subtil concernant les statiques dans les deux langues.

Alexey Kozitsyn:
Wow, quel bon point... Vous l'avez écrit en SD ?

C'est bien que l'aide dise qu'une variable statique... Lisez-le vous-même.

Une variable statique peut être initialisée par une constante ou une expression constante appropriée à son type, contrairement à une simple variable locale qui peut être initialisée par n'importe quelle expression.


Mais pas une fonction.

Voici comment cela fonctionne

#property strict
#property indicator_chart_window

int TestBrokenStatic()
{
   static int stInt = 101;
   stInt++;
   return stInt;
}

int OnInit()
{
   static int result = 0;
   result = TestBrokenStatic();
   Print("TestStatic Expected result 102   - Actual result=", result);
   result = TestBrokenStatic();
   Print("TestStatic Expected result 103   - Actual result=", result);
   
   return INIT_SUCCEEDED;
}

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   return rates_total;
}
2017.04.29 13:49:51.546 !Test USDCHF,M15: TestStatic Expected result 103   - Actual result=103
2017.04.29 13:49:48.457 !Test USDCHF,M15: TestStatic Expected result 102   - Actual result=102
2017.04.29 13:49:40.089 Custom indicator Test\!Test USDCHF,M15: loaded successfully
Статические переменные - Переменные - Основы языка - Справочник MQL4
Статические переменные - Переменные - Основы языка - Справочник MQL4
  • docs.mql4.com
Статические переменные - Переменные - Основы языка - Справочник MQL4
 
Alexey Viktorov:

C'est bien que l'aide dise qu'une variable statique... Lisez-le vous-même.

Mais pas une fonction.

C'est comme ça que ça marche.

Alors le compilateur doit donner une erreur...
 
Alexey Viktorov:

C'est bien que l'aide dise qu'une variable statique... Lisez-le vous-même.

C'est normal que je donne un lien vers la documentation en même temps qu'un lien vers une discussion de code d' il y a six mois... Suivez vos propres conseils.

Surtout avec les constantes statiques.

 
fxsaber:

Est-ce que c'est correct que je donne un lien vers la documentation à la fois et un lien vers une discussion de code des développeurs d'il y a six mois... suivez vos propres conseils.

Surtout avec les constantes statiques.

Je n'ai pas regardé le lien parce que je ne connais pas la langue aglitskiy, et la traduction mécanique est parfois plus incompréhensible que le chinois/japonais avec un soupçon de coréen.

Et tu n'as pas besoin d'être si sensible. Il n'y a pas un soupçon de reproche dans mes paroles que vous n'ayez pas prêté attention à une telle bagatelle.

 
Alexey Viktorov:

Je n'ai pas regardé le lien en raison de ma méconnaissance de la langue aglitsky, et la traduction mécanique est parfois plus incompréhensible que le chinois/japonais avec un soupçon de coréen.

Oh, et il n'y a pas besoin d'être si morbide à ce sujet. Mes paroles ne contiennent pas un soupçon de reproche sur le fait que vous n'ayez pas prêté attention à une telle bagatelle.


Forum sur le trading, les systèmes de trading automatisés et le testeur de stratégie

Caractéristiques du langage mql4, subtilités et astuces

fxsaber, 2017.04.29 11:07

Les caractéristiques du langage sont depuis longtemps incompatibles avec l'ancienne documentation, c'est-à-dire que des éléments non documentés sont utilisés, et qu'il est donc étrange de faire des déclarations à leur sujet.

 
Alexey Kozitsyn:
Alors le compilateur devrait donner une erreur...

Peut-être que ça devrait, mais... nous avons ce que nous avons.

 
fxsaber:

Ce n'était pas comme ça dans l'ancienne documentation ?


ps. Bien tardivement, j'ai compris le sens de ces références...

Mais voici une réfutation de l'affirmation

fxsaber:

Laissée inaperçue.

La valeur initiale d'une variable globale peut désormais être déclarée via une fonction !

Il en va de même pour le reste des variables statiques.

Il est étrange que les développeurs restent silencieux sur cette innovation.

Ou s'agit-il de quelque chose d'entièrement différent ? Déclarer ou initialiser ?
 
static const bool IsTester = (::MQLInfoInteger(MQL_TESTER) || ::MQLInfoInteger(MQL_OPTIMIZATION) ||
                              ::MQLInfoInteger(MQL_VISUAL_MODE) || ::MQLInfoInteger(MQL_FRAME_MODE));
 
fxsaber:

Je ne peux pas vérifier pour le moment, mais MQL_TESTER semble inclure tout le reste. Mais tout le reste séparément ne s'inclut pas.

En d'autres termes, pour comprendre que le programme fonctionne dans le testeur (dans l'un des modes énumérés), il suffit de vérifier le tout premier drapeau.