Les indicateurs standard sont prioritaires ! - page 5

 
Voici la nouvelle version de l'indicateur Satori (seuls les indices pour les devises Currency1 et Currency1 ont été ajoutés)
//+------------------------------------------------------------------+
//|                                           RedrawIndicators-2.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=20;   //кол-во считаемых баров, если 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(),"","index1",Currency1,"","index2",Currency2);
   FileWrite (handle2,"index",Symbol(),"  ",Currency1,"  ",Currency2);
   }

   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   FileClose(handle);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   int i;
   double test1,test2;
   datetime tt1,tt2,TimeMain;
   BarsCount=MathMin(Bars,(MathMin(iBars(Currency1,Period()),iBars(Currency2,Period()))));
   for (i=0;i<BarsCount-counted_bars;i++)
      {
       TimeMain=Time[i];
       ExtMapBuffer1[i]=iTime(Currency1,Period(),iBarShift(Currency1,Period(),TimeMain));
       ExtMapBuffer2[i]=iTime(Currency2,Period(),iBarShift(Currency2,Period(),TimeMain));
       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(),ExtMapBuffer1[i]),TimeToStr(ExtMapBuffer1[i]),"",iBarShift(Currency2,Period(),ExtMapBuffer2[i]),TimeToStr(ExtMapBuffer2[i])
          )<=0) Print("нифига не пишет!!");
         }
        FileFlush(handle);
        if ((iTime(Symbol(),Period(),i)!=iTime(Currency1,Period(),i) ||
           Time[i]!=iTime(Currency1,Period(),i) ||
           iTime(Currency1,Period(),i)!=iTime(Currency2,Period(),i)
           ) && i>0)
        {
         if (FileWrite (handle2,i,
         TimeToStr(Time[i])," ",TimeToStr(iTime(Currency1,Period(),i))," ",TimeToStr(iTime(Currency2,Period(),i))
       )<=0) Print("нифига не пишет!!");

        }
      }//----
   return(0);
  }
//+------------------------------------------------------------------+
 
J'ai ouvert un nouveau compte pour vérifier le MIG. J'ai démarré l'indicateur, puis je l'ai retiré du graphique, j'ai vérifié les graphiques créés - pas une seule erreur (les fichiers sont vides). Je vais maintenant vérifier l'archive des cotations par MIG pour GBPJPY H4, EURUSD H4, GBPUSD H4 (pour la pureté de l'expérience, j'ai utilisé les devises des vérifications précédentes).
 
J'ai trouvé une chose étrange, l'historique GBPJPY est vide (l'historique EURUSD H4 et GBPUSD H4 est en place), probablement à cause de données manquantes dans les fichiers TestFile.csv et TestFile.csv2. Dans le même temps, le graphique GBPJPY H4 lui-même s'affiche correctement. J'ai soupçonné que
1) les séries temporelles semblaient être mises en cache (c'est pourquoi le graphique s'affiche)
2) l'adresse du centre de données (avant que le terminal ne soit connecté au compte Alpari demo via le centre de données)

. J'ai donc supprimé l'adresse du centre de données et suis passé au compte Alpari demo, le changement a réussi, le centre de données est déconnecté. Je suis retourné sur le compte de démonstration MIG - la connexion au serveur a réussi, mais les données de MarketWatch n'ont pas changé. Obligé de mettre à jour GBPJPY H4 (sur le graphique), l'histoire a rebondi.
Mais le dernier temps de cotation est toujours 10-43 sur toutes les paires. J'ai un build 199.



Maintenant je vais essayer d'exécuter l'indicateur Redraw2


J'ai regardé MarketWatch - il a la même heure 10:43 partout.
 
Hmm... Il s'avère qu'il était connecté via le centre de données de toute façon. Maintenant c'est bon et MarketWatch montre les bonnes données. J'essaie maintenant d'avoir une histoire plus profonde.
 
Mis à jour, les citations sont très intéressantes par endroits

 
Si ce graphique vient de MIG, ils ont de tels trucs. Je l'ai déjà vu plusieurs fois cette année. J'ai sur mon historique EURUSD de MIG un dojic 08.09.2004 avec High ~ 1.7493.
 
Oui, c'est du MIG :)
 
Juste au cas où, j'ai rechargé le terminal avant de lancer l'indicateur (pour exclure la mise en cache des séries temporelles). Les erreurs sont réapparues après le numéro d'index 1000.



Maintenant je vais faire la troisième variante pour mettre tous les points.
 
Voici la troisième version
//+------------------------------------------------------------------+
//|                                           RedrawIndicators-2.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=20;   //кол-во считаемых баров, если 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("TestFile3.csv",FILE_CSV|FILE_WRITE,';');
   handle2= FileOpen("TestFile3-2.csv",FILE_CSV|FILE_WRITE,';');
  if(handle<1 || handle2<1 )
   {
    Print("Файл не обнаружен, последняя ошибка ", GetLastError());
    return(false);
   }
   else
   {
   FileWrite (handle,"index",Symbol(),"iBarShift1","index1","Time[index1-1]",Currency1,"Time[index1+1]","iBarShift2","index2","Time[index2-1]",Currency2,"Time[index2+1]");
   FileWrite (handle2,"index",Symbol(),"  ",Currency1,"  ",Currency2);
   }

   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//----
   FileClose(handle);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int    counted_bars=IndicatorCounted();
   int i;
   double test1,test2;
   double Bar1,Bar2;
   int iBarShift1,iBarShift2;
   datetime tt1,tt2,TimeMain;
   BarsCount=MathMin(Bars,(MathMin(iBars(Currency1,Period()),iBars(Currency2,Period()))));
   for (i=0;i<BarsCount-counted_bars;i++)
      {
       TimeMain=Time[i];
       iBarShift1=iBarShift(Currency1,Period(),TimeMain);
       iBarShift2=iBarShift(Currency2,Period(),TimeMain);
       ExtMapBuffer1[i]=iTime(Currency1,Period(),iBarShift1);
       ExtMapBuffer2[i]=iTime(Currency2,Period(),iBarShift2);
       ExtMapBuffer3[i]=(ExtMapBuffer1[i]-ExtMapBuffer2[i]);
       tt1=Time[i]-ExtMapBuffer1[i];
       tt2=Time[i]-ExtMapBuffer2[i];
       
       if (ExtMapBuffer3[i]!=0 || tt1!=0 || tt2!=0) 
         {
         Bar1=iBarShift(Currency1,Period(),ExtMapBuffer1[i]);
         Bar2=iBarShift(Currency2,Period(),ExtMapBuffer2[i]);
         if (FileWrite (handle,
         i,TimeToStr(Time[i]),iBarShift1,Bar1,TimeToStr(iTime(Currency1,Period(),Bar1-1)),TimeToStr(ExtMapBuffer1[i]),TimeToStr(iTime(Currency1,Period(),Bar1+1)),iBarShift1,Bar2,TimeToStr(iTime(Currency2,Period(),Bar2-1)),TimeToStr(ExtMapBuffer2[i]),TimeToStr(iTime(Currency2,Period(),Bar2+1))
          )<=0) Print("нифига не пишет!!");
         }
        FileFlush(handle);
        if ((iTime(Symbol(),Period(),i)!=iTime(Currency1,Period(),i) ||
           Time[i]!=iTime(Currency1,Period(),i) ||
           iTime(Currency1,Period(),i)!=iTime(Currency2,Period(),i)
           ) && i>0)
        {
         if (FileWrite (handle2,i,
         TimeToStr(Time[i])," ",TimeToStr(iTime(Currency1,Period(),i))," ",TimeToStr(iTime(Currency2,Period(),i))
       )<=0) Print("нифига не пишет!!");

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



 
La troisième version n'a pas donné de réponse définitive, nous devrons vérifier Time[] sur le délai de 4 heures pour chaque instrument afin de voir s'il y a des secondes supplémentaires. Si aucune seconde n'est trouvée, il y a une erreur de terminal.

Raison: