Les indicateurs standard sont prioritaires ! - page 3

 
Rosh, ce que j'essaie de comprendre, c'est si l'erreur se produit parce que la barre USDCHF commence plus tard. Pour suivre cela, j'ai supprimé la MA (elle ne fait que gêner), et j'ai introduit en plus Close[1] et Open[1]. Cela signifie que l'Open[1] sera toujours correct, et que si c'est le problème, l'écart se situera dans l'Open[0] et pas dans l'Open[1]. Vérifiez maintenant. Qu'est-ce que j'ai manqué ?
 
Eh bien, j'ai joint 2 images, qui montrent que lorsqu'une nouvelle barre apparaît sur GBPJPY, vous vous référez à d'anciennes données graphiques inchangées sur USDCHF, et donc votre algorithme calcule de manière incorrecte. Il ne comptera correctement que dans un seul cas - si vous le placez sur la "carte" du natif - mais l'objectif est inverse.
 
Je suis d'accord. Mais seulement si le test avec Open[1] montre qu'il n'y a pas d'erreurs. Dans ce cas, je serai sûr que oui, il n'y a pas de bug dans MT. Il y a une certaine... Un euphémisme, en quelque sorte.

De plus, le défi consiste à trouver un moyen de contourner la limitation. Par exemple, interdire le redessin de l'indicateur EURUSD jusqu'à ce que les données USDCHF arrivent. Je teste maintenant la variante suivante

while(nPos > 1 || (nPos == 1 && Time[0] <= iTime("USDCHF", 0, 0))))



Mais tout dépend de la façon dont MT calcule IndicatorCounted. Si par l'heure d'arrivée du tic-tac - ça ne marchera pas, si par le fait du redécoupage des barres - ça marchera. Voyons voir.

 
Ici, il est maintenant 11-56 MSK ou 9-56 heure du serveur.
Ouverture [1] EURUSD H1 est 1.2755
Ouverture [1] USDCHF H1 est 1.2443

Une nouvelle barre d'une heure apparaît sur l'EUR, rien n'a encore changé sur le Franc. Que va faire votre algoitm ?
 
Je suis d'accord. Mais seulement si тестирование avec Open[1] montre qu'aucune erreur ne se produit. Dans ce cas, je serai sûr que oui, il n'y a pas de bug dans MT. Il y a une certaine... réticence ou autre.

De plus, le défi consiste à trouver un moyen de contourner la limitation. Par exemple, interdire le redessin de l'indicateur EURUSD jusqu'à ce que les données USDCHF arrivent. Je teste maintenant la variante suivante

while(nPos > 1 || (nPos == 1 && Time[0] <= iTime("USDCHF", 0, 0))))



Mais ici, tout dépend de la façon dont MT calcule l'IndicatorCounted. Si c'est par l'heure d'arrivée du tic-tac - cela ne fonctionnera pas, si c'est par le fait du redécoupage de la barre - cela fonctionnera. Voyons voir.




Arrêtez, arrêtez. C'est ici que vous écrivez :
Comme vous pouvez le voir dans le code, l'indicateur ne dépend pas de la devise à laquelle il est attaché. Cela fonctionne toujours pour l'USDCHF. Nous attachons l'indicateur à deux graphiques, dans mon cas AUDUSD et EURUSD, mais je suppose que vous pouvez l'attacher à n'importe quel graphique. Nous le laissons pendant quelques jours. Et nous voyons que les graphiques sont DIFFÉRENTS. Le même indicateur. En temps réel. Le même MT. Redessiner de force (Déconnecter - Connecter) - ils deviennent identiques. Depuis un certain temps.

Donc on parle de travail en ligne, et maintenant on est passé à un testeur. Je n'ai pas le temps pour ça.
 
Il est maintenant 11-56 MSK ou 9-56 heure du serveur. <br / translate="no">Ouverture [1] EURUSD H1 est 1.2755
Ouvrir [1] USDCHF H1 est 1.2443

Une nouvelle barre horaire apparaît sur l'EUR, rien n'a encore changé sur le FRANK. Que va faire votre algoitm ?



Oui, vous avez raison. Nous devrions surveiller l'heure de la barre, pas son nombre.
 
<br / translate="no">Donc, nous parlons de travail en ligne et maintenant nous sommes passés à un testeur. Je n'ai pas le temps pour ça.


Pas de testeur. Seulement en ligne.
 
supprimé
 
Cher Rosh, pourriez-vous expliquer comment la situation suivante est possible.
Je l'ai sorti dans le deuxième fichier de la liste des barres pour pouvoir voir les listes déroulantes.

//+------------------------------------------------------------------+
//|                                             RedrawIndicators.mq4 |
//|                                                           Satori |
//|                             http://www.metaquotes.ru/forum/7790/ |
//+------------------------------------------------------------------+
#property copyright "Satori"
#property link      "http://www.metaquotes.ru/forum/7790/"

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_color3 Yellow
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
extern int       BarsCount=0;   //кол-во считаемых баров, если 0 - то все
extern string    Currency1="EURUSD";
extern string    Currency2="GBPUSD";

int handle,handle2;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexLabel(0,Currency1);

   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexLabel(1,Currency2);

   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,ExtMapBuffer3);

   handle= FileOpen("TestFile.csv",FILE_CSV|FILE_WRITE,';');
   handle2= FileOpen("TestFile2.csv",FILE_CSV|FILE_WRITE,';');
  if(handle<1 || handle2<1 )
   {
    Print("Файл не обнаружен, последняя ошибка ", GetLastError());
    return(false);
   }
   else
   {
   FileWrite (handle,"index",Symbol(),"index",Currency1,"index",Currency2);
   FileWrite (handle2,"index",Currency1,Currency2,Symbol());
   }

   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   FileClose(handle);
   FileClose(handle2);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   int i;
   int test1,test2;
   datetime tt1,tt2,TimeMain;
   BarsCount=MathMin(Bars,(MathMin(iBars(Currency1,Period()),iBars(Currency2,Period()))));
   Print (Bars," ",iBars(Currency1,Period())," ",iBars(Currency2,Period()));
   Print (BarsCount);
   
   for (i=0;i<BarsCount-counted_bars;i++)
      {
       TimeMain=Time[i];
       test1=iBarShift(Currency1,Period(),TimeMain);
       test2=iBarShift(Currency2,Period(),TimeMain);
       
       ExtMapBuffer1[i]=iTime(Currency1,Period(),test1);
       ExtMapBuffer2[i]=iTime(Currency2,Period(),test2);

       ExtMapBuffer3[i]=(ExtMapBuffer1[i]-ExtMapBuffer2[i]);
       tt1=Time[i]-ExtMapBuffer1[i];
       tt2=Time[i]-ExtMapBuffer2[i];
       if (ExtMapBuffer3[i]!=0 || tt1!=0 || tt2!=0) 
         {
         if (FileWrite (handle,
         i,TimeToStr(Time[i]),iBarShift(Currency1,Period(),TimeMain),TimeToStr(ExtMapBuffer1[i]),iBarShift(Currency2,Period(),TimeMain),TimeToStr(ExtMapBuffer2[i])
          )<=0) Print("нифига не пишет!!");
         }
        FileFlush(handle);
        if (FileWrite (handle2,i,
         TimeToStr(iTime(Currency1,Period(),test1)),
         TimeToStr(iTime(Currency2,Period(),test2)),
         TimeToStr(Time[i])
          )<=0) Print("нифига не пишет!!");
        FileFlush(handle2);

      }//----
   return(0);
  }
//+------------------------------------------------------------------+



Nous l'utilisons sur l'EURGBP 4H sur deux autres courtiers, pas Alpari (MIG, FIBO).
L'image est presque la même pour les deux, je vais montrer un exemple sur le MIG.
indice EURGBP indice EURUSD indice GBPUSD
15 30.10.2006 0:00 16 29.10.2006 23:00 16 29.10.2006 23:00
46 23.10.2006 0:00 47 22.10.2006 23:00 47 22.10.2006 23:00
77 16.10.2006 0:00 78 15.10.2006 23:00 78 15.10.2006 23:00
108 09.10.2006 0:00 109 08.10.2006 23:00 109 08.10.2006 23:00
139 02.10.2006 0:00 139 02.10.2006 0:00 140 01.10.2006 23:00

Prenez par exemple les mesures 46-47.
Dans le deuxième fichier :
45 23.10.2006 4:00 23.10.2006 4:00 23.10.2006 4:00
46 22.10.2006 23:00 22.10.2006 23:00 23.10.2006 0:00
47 22.10.2006 23:00 22.10.2006 23:00 22.10.2006 23:00
48 20.10.2006 20:00 20.10.2006 20:00 20.10.2006 20:00

Tout semble correct... Mais voici le problème - la barre 23.10.2006 00:00 est présente dans l'historique sur les trois monnaies ! C'est-à-dire qu'il est sur le graphique, il est dans l'archive des citations.
Mais elle semble être absente de l'indicateur.
Et la dernière astuce - si vous essayez de mettre une ligne verticale sur cette barre, elle se déplacera vers la barre suivante. :о) J'ai essayé de le marquer avec une ligne verticale mais ça n'a pas marché.



 
Pourriez-vous en faire une photo ? Une capture d'écran. C'est difficile d'organiser les colonnes dans votre esprit.