¿Anulación de los indicadores estándar? - página 5

 
Aquí está la nueva versión del indicador Satori (sólo se han añadido los índices para las monedas Currency1 y Currency1)
//+------------------------------------------------------------------+
//|                                           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);
  }
//+------------------------------------------------------------------+
 
Abrí una nueva cuenta para comprobar en MIG. Inicié el indicador, luego lo saqué del gráfico, comprobé los gráficos creados - ni un solo error (los archivos están vacíos). Ahora voy a comprobar el archivo de cotizaciones por MIG para GBPJPY H4, EURUSD H4, GBPUSD H4 (para la pureza del experimento utilicé monedas de comprobaciones anteriores)
 
Encontré una cosa extraña, el historial de GBPJPY está vacío (el historial de EURUSD H4 y GBPUSD H4 está en su lugar), probablemente debido a la falta de datos en los archivos TestFile.csv y TestFile.csv2. Al mismo tiempo, el gráfico GBPJPY H4 se muestra correctamente. He sospechado que
1) las series de tiempo parecían estar en caché (por eso se muestra el gráfico)
2) la dirección del centro de datos (antes de que el terminal se conectara a la cuenta demo de Alpari a través del centro de datos)

. Así que eliminé la dirección del centro de datos y cambié a la cuenta demo de Alpari, el cambio fue exitoso, el centro de datos está desconectado. Volví a cambiar a la cuenta demo de MIG - la conexión al servidor fue exitosa, pero los datos de MarketWatch no cambiaron. Obligado a actualizar GBPJPY H4 (en el gráfico) , la historia rebotó.
Pero la última cotización sigue siendo 10-43 en todos los pares. Tengo una construcción 199.



Ahora voy a tratar de ejecutar el indicador Redraw2


Miré a MarketWatch - tiene el mismo tiempo 10:43 en todas partes.
 
Hmm... Resulta que de todos modos estaba conectado a través del centro de datos. Ahora todo está bien y MarketWatch muestra los datos correctos. Ahora tratando de conseguir una historia más profunda.
 
Actualizado, las citas son muy interesantes en algunas partes

 
Si este gráfico es de MIG, tienen esos trucos. Ya lo he visto un par de veces este año. Tengo en mi historial de EURUSD de MIG un dojic 08.09.2004 con High ~ 1.7493.
 
Sí, es MIG :)
 
Por si acaso, he reiniciado el terminal antes de iniciar el indicador (para evitar el almacenamiento en caché de las series temporales). Los errores volvieron a aparecer después del número de índice 1000.



Ahora haré la tercera variante para puntear todos los puntos.
 
Esta es la tercera versión
//+------------------------------------------------------------------+
//|                                           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 tercera versión no dio una respuesta definitiva, tendremos que comprobar Time[] en el marco temporal de 4 horas para cada instrumento para ver si hay algún segundo extra. Si no se encuentra ningún segundo, hay un error de terminal.