Discussion de l'article "Migration de MQL4 vers MQL5" - page 3

[Supprimé]  

Je propose de migrer le double MarketInfo(string symbol, int type) comme un ensemble de fonctions renvoyant différents types de données, en fonction de la spécification des paramètres d'entrée


Par exemple, ces fonctions :

int MarketInfoInt(string symbol, int type) ;

string MarketInfoStr(string symbol, int type)....

J'ai communiqué une fois avec les développeurs au sujet des REFERENCES et des résultats des fonctions, mais ils ont refusé de le faire (et c'est dommage).


PS

Sur cette base, je pense que la meilleure solution pour le moment sera la bibliothèque MarketInfo, qui contiendra toutes les fonctions nécessaires.

D'ailleurs, c'est exactement ce que j'ai fait dans ma propre bibliothèque :)

 
Interesting:

À mon avis, deux fonctions sont nécessaires pour gérer la FO dans un environnement de migration :

1. Convertir le nombre de secondes en TF - par exemple ENUM_TIMEFRAMES SecondToPeriod (int Value) ;

2. Convertit la période en secondes - disons int PeriodToSecond(ENUM_TIMEFRAMES Value).


Ce que j'ai fait avec succès dans mon module de migration au tout début (il y a aussi une option DLL).


PS

Pour maximiser la conformité avec MQL4, je me suis personnellement débarrassé de toutes les périodes non standard.



la fonction est bonne et utile, mais l'exécution....

Je procéderais de la manière suivante

//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
void FixTF(int &tf)
  {
   switch(tf)
     {
      case 0: tf = 0;break;
      case 1: tf = PERIOD_M1;break;
      case 5: tf = PERIOD_M5;break;
      case 15: tf = PERIOD_M15;break;
      case 30: tf = PERIOD_M30;break;
      case 60: tf = PERIOD_H1;break;
      case 240: tf= PERIOD_H4;break;
      case 1440: tf=PERIOD_D1;break;
      case 10080: tf = PERIOD_W1;break;
      case 43200: tf = PERIOD_MN1;break;
      default: tf=0;break;
     }
  }
//+------------------------------------------------------------------+



dans toutes les fonctions, il suffit de définir la taille des tableaux

comme az buki vedi.

 
CoreWinTT:

la fonction est bonne et utile, mais l'exécution..... est une hérésie.

votre travail ??

WHERE BREAK !!!!!! programmeurs de chagrin !!!!


En quoi return est-il pire que break ?
 
Je m'excuse.
 
CoreWinTT:

Dans toutes les fonctions, il suffit de définir la taille des tableaux
simplement comme az'buki vedi.

Pas toujours, voir la section Accès aux séries temporelles et aux indicateurs:

Fonctions permettant de travailler avec des séries temporelles et des indicateurs. Une série temporelle diffère d'un tableau ordinaire dans la mesure où l'indexation des éléments de la série temporelle se fait de la fin du tableau vers le début (des données les plus récentes vers les plus anciennes). Il est recommandé de n'utiliser que des tableaux dynamiques pour copier les valeurs des séries temporelles et des indicateurs, car les fonctions de copie allouent la taille nécessaire des tableaux-récepteurs de valeurs de manière indépendante.

Il y a une exception importante àcette règle : si la copie des valeurs des séries temporelles et des indicateurs doit être effectuée fréquemment, par exemple, à chaque appel de OnTick() dans les Expert Advisors ou à chaque appel de OnCalculate() dans les indicateurs, alors dans ce cas il est préférable d'utiliser des tableaux statiquement distribués, car les opérations d'allocation de mémoire pour les tableaux dynamiques nécessitent du temps supplémentaire et cela affectera les tests et l'optimisation des Expert Advisors.

 

Comme le montre ma pratique, il est préférable de le faire plutôt que de ne pas le faire.

Sinon, une erreur d'accès aux données apparaît

en particulier avec les tableaux globaux.


Premièrement, parce que dans un tableau de taille déterminée, l'indexation est statique et qu'il n'y a pas ces moments dangereux de tableaux d'inversions.

deuxièmement, l'espace pour les tableaux est alloué avec plus de parcimonie

et troisièmement, la probabilité d'une erreur d'accès à un tableau est considérablement réduite.

C'est pourquoi je pense que ces fonctions ont simplement besoin d'une fonction pour déterminer la taille du tableau.

 
CoreWinTT:

la fonction est bonne et utile, mais voici l'exécution....

Je le ferais de cette manière

L'article a été modifié :

  • rétablissement de la fonction TFMigrate() dans sa forme originale
  • modification des fonctions de la section 18
 
Ajout de la fonction iMAOnArray(...) au manuel de référence
 
Correction de la fonction iMAOnArray. En mode MODE_SMA, le temps de calcul est considérablement réduit.
[Supprimé]  

J'ai commencé à douter de la fonctionnalité de cette conception. J'ai eu beau essayer de comprendre la logique du bloc, je n'y suis pas parvenu (et j'ai bien essayé)....

int iBarShiftMQL4(string symbol,
                  int tf,
                  datetime time,
                  bool exact=false)
  {
   if(time<0) return(-1);
   ENUM_TIMEFRAMES timeframe=TFMigrate(tf);
   datetime Arr[],time1;
   CopyTime(symbol,timeframe,0,1,Arr);
   time1=Arr[0];
   if(CopyTime(symbol,timeframe,time,time1,Arr)>0)
      return(ArraySize(Arr)-1);
   else return(-1);
  }