Questions des débutants MQL5 MT5 MetaTrader 5 - page 991

 
kopeyka2:

C'est exactement ce que je pensais. La question du malentendu est le mot "paramètres". J'ai donc commencé à regarder TOUTES les variables qui sont impliquées dans le handle --> CopyBuffer

1) Ma question depuis le début était de basculer l'écran de l'horizon temporel pour sauvegarder les données de la poignée. Comme c'est le cas dans MT4.

Et en fait, c'est ce qui se passe :

TOUJOURS et sur TOUS les horizons temporels donne la même valeur de 10

N'ayant rien obtenu ici, je suis passé à autre chose.

2) Et je cite :"Obtient les données du tampon spécifié de l'indicateur spécifié dans la quantité spécifiée dans le tableau du tampon".

C'est-à-dire qu'en réglantle compte à la main, nous devrions avoir un INTERVALLE avec les valeurs . Et les voilà ! BUT !!!!!! Seulement lorsque la période de la poignée correspond à

PERIOD_H1sur l'écran du moniteur. Toutes les valeurs sont transmises clairement. Mais en passant à une autre période de temps, il n'y a PAS de données à l'écran.

Ils ne sont PAS transmis de quelque manière que ce soit. ! !!! Et ma question était exactement ça. Et le nombre de barres n'est pas si important ici s'il n'y en a PAS !!!!.


J'ai regardé l'indicateur proposéMTF_LRMA.mq5 mais il a la même chose. Il passe à une autre période de l'écran et les données passent par la période de l'écran. J'en ai besoin sur un ordinateur de poche.

Par exemple : iClose(NULL, PERIOD_H1, 5) ; sur tous les horizons temporels, cela donnera la même valeur - 10 barres sur H1.

Jusqu'à présent, tous les exemples concernaient la correction dunombre de CopyBuffer. Mais le tableau est vide.


Vous avez tort. Le traitement donne des données à n'importe quel moment. Je vous donnerai un exemple dans une dizaine d'heures. Je ne peux pas le faire sur mon téléphone portable.
 
Artyom Trishkin:
Vous avez tort. Le traitement donne des données à n'importe quel moment. Je vous donnerai un exemple dans une dizaine d'heures. Je ne pourrai pas le faire depuis mon portable.

OK. Merci pour la réponse.


Je me suis corrigé.

Напррмер: iClose(NULL, PERIOD_H1, 5); на всех таймфреймах будут давать одно и тоже значение : Закрытие на 5 баре по Н1. 

Je pensais que ça pourrait être comme ça

MqlParam params[]; 
//--- create iMA("EURUSD",PERIOD_M15,8,0,MODE_EMA,PRICE_CLOSE); 
   ArrayResize(params,4); 
//--- set ma_period 
   params[0].type         =TYPE_INT; 
   params[0].integer_value=0; 
//--- set ma_shift 
   params[1].type         =TYPE_INT; 
   params[1].integer_value=0; 
//--- set ma_method 
   params[2].type         =TYPE_INT; 
   params[2].integer_value=MODE_EMA; 
//--- set applied_price 
   params[3].type         =TYPE_INT; 
   params[3].integer_value=PRICE_CLOSE; 
//--- create MA 
   h_MA=IndicatorCreate("EURUSD",PERIOD_M15,IND_MA,4,params); 
//--- release indicators (first h_MACD) 
   
  if(h_MA==INVALID_HANDLE)
     {
      Print("The iMA (",string(PERIOD_M15),") object was not created: Error ",GetLastError());
      return INIT_FAILED;
     }
//---
   return(INIT_SUCCEEDED);

Mais si vous changez d'avis, j'attendrai la première méthode pour obtenir la valeur de l'indicateur technique (iMA). Mais je ne comprends toujours pas.

 
kopeyka2:

OK. Merci pour la réponse.


Je me suis corrigé.

Je pensais que ça pourrait être comme ça

Mais si vous changez d'avis, j'attendrai la première méthode pour obtenir la valeur de l'indicateur technique (iMA). Mais je ne le comprends pas maintenant...

J'ai montré ci-dessus que le nombre de barres sur les différentes TF est différent, et donc un nombre différent de barres à copier, selon la TF où l'indicateur doit être calculé. Vous devez vérifier le nombre de barres, calculé par BarsCalculated() et l'utiliser comme base.

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
   if(rates_total==prev_calculated) return(rates_total);
//---
   int    i;
   double diff;
//--- check for rates count
   if(rates_total<=ExtPeriodRSI)
      return(0);
//---
   if(TF!=PERIOD_CURRENT)
   {
      if(handle==INVALID_HANDLE)
        {
         handle=iCustom(Symbol(),TF,ind_name,Variant,RSIPeriod,Levl_Up,Levl_Down,PERIOD_CURRENT);
         return(0);
        }
      else
        {
         int bars_calculated=BarsCalculated(handle);
                  //Print("Начнем расчет - " , bars_calculated);
         if(bars_calculated<=0) return(0);
         if(Bars(Symbol(),TF)!=bars_calculated)
           {
            for(i=rates_total-prev_calculated-1;i>=0;i--)
              {
               Delta[i]=0.0;   
              }
            return(prev_calculated);
           } 
        }
 
Aleksey Vyazmikin:

J'ai montré ci-dessus que le nombre de barres sur les différentes TF est différent, et donc vous devriez demander un nombre différent de barres à copier, selon la TF, qui devrait être calculé par l'indicateur. Vous devriez vérifier le nombre de barres, calculé par l'indicateur via BarsCalculated() et l'utiliser comme base, voici un exemple pour MTF

Merci. Je vais l'essayer. Mais comme indiqué précédemment, le tableau est totalement vide. J'ai fait des recherches manuscrites sur le tableau. C'est vide.
 
kopeyka2:
Merci. Je vais essayer. Mais comme nous l'avons souligné précédemment, le tableau est totalement vide. J'ai fait des recherches manuscrites sur le tableau. C'est vide.
Ignorez-vous que nous devons attendre le chargement des données d'une autre période ? Je vous ai donné des exemples. Les données de l'indicateur présenté proviennent uniquement d'échelles de temps supérieures. Si nous définissons une valeur inférieure ou égale à la période actuelle, les données sont prises dans la période actuelle. Tout cela est dans le code, mais vous n'avez pas pris la peine de le consulter. Mais vous faites une déclaration.
 
Artyom Trishkin:
Ignorez-vous que vous devez attendre le chargement des données d'une autre période ? Je vous ai donné des exemples. Les données de l'indicateur présenté proviennent uniquement d'échelles de temps supérieures. Si nous définissons une valeur inférieure ou égale à la période actuelle, les données sont prises dans la période actuelle. Tout cela est dans le code, mais vous n'avez pas pris la peine de le consulter. Mais vous faites une déclaration.
Je ne me suis pas contenté de regarder, j'ai démonté votre indicateur en morceaux. J'ai eu l'idée de retarder les données dès le début. Et immédiatement, dès le premier visionnage, j'ai vu votre Timer. Je vais regarder dans cette direction.
 
kopeyka2:
Non seulement j'ai regardé, mais j'ai démonté votre indicateur pièce par pièce. Voici l'idée du retard des données dès le début. Et immédiatement, dès le premier visionnage, j'ai vu votre Timer. Je vais regarder dans cette direction.
Le dernier cycle avec la conversion des données à l'horizon temporel actuel commenté, et dans n'importe quel tampon graphique passer les données des tampons calculés MAshek, et vous verrez sur le graphique ce que vous voulez voir.
 

pour le moment

autre délai (non-natif)


 
kopeyka2:

pour le moment

autre délai (non-natif)


Avez-vous délibérément commenté la chaîne de retour au cas où les données ne seraient pas reçues ? Pourquoi ? Si vous dévissez les roues et dites que le moteur ronronne, que le volant tourne, mais que la voiture ne roule pas, et qu'elle est donc hors d'usage, c'est un peu dur.
 
kopeyka2:
Je vais essayer. Je vais l'essayer. Mais comme je l'ai déjà souligné, le tableau n'est pas du tout vide. J'ai utilisé mes mains pour faire des lectures du tableau. C'est vide.

Plus tôt, je t'ai donné un morceau de code de ton indicateur avec print, as-tu essayé de le copier ? Rien n'apparaît dans le journal, pas d'erreurs ni de chiffres ?

Raison: