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

 
Boss11:

Bonjour, chers utilisateurs du forum.

Veuillez m'aider à accomplir la tâche suivante :

J'ai besoin d'obtenir les données de l'indicateur dans mt4 en utilisant mql, par exemple MA5 avec 1d timeframe, à partir de 14.30 d'avant-hier.

Par exemple, si j'avais exécuté le script avec iMA avant-hier à 14h30, aucune question ne se poserait, mais comment l'obtenir aujourd'hui.

dis-moi au moins où creuser

C'est très simple. Vous devez définir 7 paramètres pour calculer l'iMA. Le premier paramètre, le nom du symbole, est évident. Comme deuxième cadre temporel, définissez M1. Le troisième paramètre - la période - définit autant de fois que vous le souhaitez, combien de jours sont supérieurs à une minute. Le quatrième paramètre - shift = 0. Les deux paramètres suivants - la méthode de calcul de la moyenne et le type de prix - vous les connaissez. Le dernier est le numéro de barre. Veuillez calculer le numéro de barre si vous connaissez le temps dont vous avez besoin. C'est tout ! Vérifiez-le en effectuant des calculs pour les échéances M5 et M15. Peut-être même pour le M30.

 
STARIJ:

C'est très simple. Afin de calculer l'iMA, 7 paramètres sont nécessaires. Le premier paramètre, le nom du symbole, est évident. Comme deuxième paramètre, le cadre temporel, définissez M1. Le troisième paramètre - la période - définit autant de fois que vous le souhaitez, combien de jours sont supérieurs à une minute. Le quatrième paramètre - shift = 0. Les deux paramètres suivants - la méthode de calcul de la moyenne et le type de prix - vous les connaissez. Le dernier est le numéro de barre. Veuillez calculer le numéro de barre si vous connaissez le temps dont vous avez besoin. C'est tout ! Vérifiez-le en effectuant des calculs pour les échéances M5 et M15. Peut-être même pour le M30.

Malheureusement, ce n'est pas facile. Si nous prenons la MA5, time frame 1440 (1 jour), sélectionnons la barre numéro 2 (avant-hier), nous obtiendrons la MA5 pour l'ouverture ou la fermeture de la dernière bougie, mais pas le moment de 14.30. Et c'est ce que nous devons préciser. Encore une fois. Les indicateurs techniques sont calculés à partir de plusieurs chandeliers, ils s'ouvrent à 00.00 (si on parle d'une journée), ils se ferment à 23.59, mais le dernier chandelier (si c'est une barre 0) n'est pas fermé, et on prend le dernier prix de la barre 0 pour son calcul. Si la MA est à la barre zéro, c'est facile, mais si elle n'est pas à la barre zéro mais au milieu du jour précédent, que devons-nous faire ? Comment peut-on calculer МА au milieu du jour précédent dans TF 1440 ?

 
Artyom Trishkin:

Merci beaucoup ! Je vais me mettre à écrire le code :) Je vous ferai part des résultats.

 
Boss11:

Malheureusement, ce n'est pas facile. Si nous prenons la MA5, time frame 1440 (1 jour), sélectionnons la barre numéro 2 (avant-hier), nous obtiendrons la MA5 pour l'ouverture ou la fermeture de la dernière bougie, mais pas le moment de 14.30. Et c'est ce que nous devons préciser. Encore une fois. Les indicateurs techniques sont calculés à partir de plusieurs chandeliers, ils s'ouvrent à 00.00 (si on parle d'une journée), ils se ferment à 23.59, mais le dernier chandelier (si c'est une barre 0) n'est pas fermé, et on prend le dernier prix de la barre 0 pour son calcul. Si la MA est à la barre zéro, c'est facile, mais si elle n'est pas à la barre zéro mais au milieu du jour précédent, que devons-nous faire ? Comment puis-je calculer МА au milieu de la journée précédente avec l'intervalle de temps 1440 ?


C'est très simple

void OnStart()
  {
// Формируем время  
   Alert("14.30  позавчерашнего дня = ",StrToTime(TimeToStr(iTime(NULL,1440,2),TIME_DATE)+" "+"14:30"));

//14.30  позавчерашнего дня
   datetime time=StrToTime(TimeToStr(iTime(NULL,1440,2),TIME_DATE)+" "+"14:30");

//Бар 14.30  позавчерашнего дня
   int     shift=iBarShift(NULL,0,time);

//Машка 14.30  позавчерашнего дня  
   double ma=iMA(NULL,0,13,0,MODE_SMMA,PRICE_MEDIAN,shift);

   Alert("Машка 14.30  позавчерашнего дня = ",DoubleToString(ma,Digits));
}

Comme ceci

 

Une idée de comment organiser l'envoi de signaux par script ?

 

J'ai besoin de l'aide des personnes compétentes

J'ai un code source d'EA, il a été compilé en 2014 et tout allait bien.

J'ai décidé de créer un nouveau compte et de compiler l'EA sur celui-ci, mais il ne veut pas compiler.

J'ai eu 23 erreurs comme celles-ci ( } )

Que dois-je faire et qu'est-ce qui a changé depuis 2014 ?

 
Boss11:

Malheureusement, ce n'est pas facile. Si nous prenons la MA5, time frame 1440 (1 jour), sélectionnons la barre numéro 2 (avant-hier), nous obtiendrons la MA5 pour l'ouverture ou la fermeture de la dernière bougie, mais pas le moment de 14.30. Et c'est ce que nous devons préciser. Encore une fois. Les indicateurs techniques sont calculés à partir de plusieurs chandeliers, ils s'ouvrent à 00.00 (si on parle d'une journée), ils se ferment à 23.59, mais le dernier chandelier (si c'est une barre 0) n'est pas fermé, et on prend le dernier prix de la barre 0 pour son calcul. Si la MA est à la barre zéro, c'est facile, mais si elle n'est pas à la barre zéro mais au milieu du jour précédent, que devons-nous faire ? Comment puis-je calculer la MA au milieu du jour précédent dans le TF 1440 ?

C'est très simple. Afin de calculer l'iMA, 7 paramètres sont nécessaires. Le premier paramètre, le nom du symbole, est évident. Comme deuxième paramètre, le cadre temporel, définissez M1. Le troisième paramètre - la période - définit autant de fois que vous le souhaitez, combien de jours sont supérieurs à une minute. Le quatrième paramètre - shift = 0. Les deux paramètres suivants - la méthode de calcul de la moyenne et le type de prix - vous les connaissez. Le dernier est le numéro de barre. Veuillez calculer le numéro de barre si vous connaissez le temps dont vous avez besoin. C'est tout ! Vérifiez-le en effectuant des calculs pour les échéances M5 et M15. Peut-être même pour le M30.
 

Bonjour. Merci àSTARIJ etArtyom Trishkin pour la dernière consultation. Mais comme je suis encore un débutant, d'autres questions se posent. Par exemple, ce qui suit. J'utilise la fonction suivante pour ouvrir une seule position dans une barre :

void Fun_New_Bar()                              // Ф-ия обнаружения нового бара   
  {                                             
   static datetime New_Time=0;                  // Время текущего бара  
   New_Bar=false;                               // Нового бара нет  
   if(New_Time!=Time[0])                        // Сравниваем время  
     {  
      New_Time=Time[0];                         // Теперь время такое  
      New_Bar=true;                             // Поймался новый бар  
     }  
  }

Et une question se pose immédiatement : pourquoi dois-je envoyer une variable statique "au début du temps" chaque fois que j'accède à la fonction ? Après tout, il accepte la valeur zéro par lui-même au premier appel, et ensuite le laisser stocker la valeur de la barre zéro précédente jusqu'à l'appel suivant, au lieu d'être remis à zéro. Cette fonction simple pourrait peut-être être simplifiée. Cependant, j'ai moi-même peur de tout gâcher. Et encore une question sur cette fonction : ne se peut-il pas que l'expressionNew_Time=Time[0] ; n'attrape pas la milliseconde quand une nouvelle barre s'ouvre ? Que se passera-t-il alors ? Merci.

 
novichok2018:

Bonjour. Merci également àSTARIJ pour la dernière consultation. Mais comme je suis encore un débutant, d'autres questions se posent. Par exemple, ce qui suit. J'utilise la fonction suivante pour ouvrir une seule position dans une barre :

Et une question se pose immédiatement : pourquoi dois-je envoyer une variable statique "au début du temps" chaque fois que j'accède à la fonction ? Après tout, il accepte la valeur zéro par lui-même au premier appel, et permet ensuite de stocker la valeur de la barre zéro précédente jusqu'à l'appel suivant, au lieu d'être remis à zéro. Cette fonction simple pourrait peut-être être simplifiée. Cependant, j'ai moi-même peur de tout gâcher. Et encore une question sur cette fonction : ne se peut-il pas que l'expressionNew_Time=Time[0] ; n'attrape pas la milliseconde quand une nouvelle barre s'ouvre ? Que se passera-t-il alors ? Merci.

Et vous pouvez lire combien de fois une variable statique est initialisée. Et la question elle-même disparaîtra pour son absurdité ;)
 
novichok2018:

Bonjour. Merci àSTARIJ etArtyom Trishkin pour la dernière consultation. Mais comme je suis encore un débutant, d'autres questions se posent. Par exemple, ce qui suit. J'utilise la fonction suivante pour ouvrir une seule position dans une barre :

Et une question se pose immédiatement : pourquoi dois-je envoyer une variable statique "au début du temps" chaque fois que j'accède à la fonction ? Après tout, il accepte la valeur zéro par lui-même au premier appel, et permet ensuite de stocker la valeur de la barre zéro précédente jusqu'à l'appel suivant, au lieu d'être remis à zéro. Cette fonction simple pourrait peut-être être simplifiée. Cependant, j'ai moi-même peur de tout gâcher. Et j'ai encore une question concernant cette fonction : n'est-il pas possible que l'expressionNew_Time=Time[0] ; n'attrape pas la milliseconde quand une nouvelle barre s'ouvre ? Que se passera-t-il alors ? Merci.


En ce qui concerne la deuxième question,

si le premier tic n'attrape pas, le second le fera.