Probando 'CopyTicks' - página 4

 
CopyTicks 

////////////////////////////////////////////////////////////////////////////////////////////////////////// 

MqlTick tick_array[];  

int OnInit()
  {
   int copied=CopyTicks(_Symbol,tick_array,COPY_TICKS_ALL,0,countHistoryTicks);
   if(Save_File!=NOT_SAVE)
     {
      SaveTicksToFile(tick_array);
     }
   return(INIT_SUCCEEDED);
  }



void SaveTicksToFile(MqlTick &massiveTicks[])

  {

   string filename,file_buffer;

   StringConcatenate(filename,Symbol(),".txt");

   int file_handle=FileOpen(filename,FILE_READ|FILE_WRITE|FILE_ANSI|FILE_SHARE_READ);

FileSeek(file_handle,0,SEEK_END);

   int sizeMassiveTicks=ArraySize(massiveTicks);

   int i=0;

   while(i<sizeMassiveTicks)

     {

      StringConcatenate(file_buffer,TimeToString(massiveTicks[i].time,TIME_DATE|TIME_SECONDS)," ",DoubleToString(massiveTicks[i].bid,_Digits)," ",DoubleToString(massiveTicks[i].ask,_Digits)," ",DoubleToString(massiveTicks[i].last,_Digits)," ",IntegerToString(massiveTicks[i].volume,_Digits)," ",IntegerToString(massiveTicks[i].time_msc)," ",IntegerToString(massiveTicks[i].flags,_Digits));

      FileWrite(file_handle,file_buffer);

      i++;

     }

   FileClose(file_handle);

  } 
 

SymbolInfoTick 

////////////////////////////////////////////////////////////////////////

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[])

  {

   MqlTick last_tick;

   SymbolInfoTick(Symbol(),last_tick);



   TickStruct tick={0,0,0,0,0,0,0};

   tick.time=TimeCurrent();

   tick.bid=last_tick.bid;

   tick.ask=last_tick.ask;

   tick.flag=last_tick.flags;

   tick.last=last_tick.last;

   tick.time_msc=last_tick.time_msc;

   tick.volume=last_tick.volume;

   int total=ArraySize(g_ticks);

   if(ArrayResize(g_ticks,total+1,1000)<0)

     {

      Alert(": индикатору не хватает памяти для сохранения данных об очередном тике.");

     }

   else

     {

      g_ticks[total]=tick;

      UpTick[rates_total-1]=total;

     }

   if(total>999)

     {

      SaveTempTicks();

      ArrayFree(g_ticks);

     }

   return(rates_total);

  } 

 

 

void SaveTempTicks()

  {

// Создание файла тиковой истории

   int hTicksFile=FileOpen(Symbol()+"fullTicks.tks",FILE_BIN|FILE_READ|FILE_WRITE|FILE_SHARE_READ|FILE_SHARE_WRITE);

   if(hTicksFile<1)

      return;

   FileSeek(hTicksFile,0,SEEK_END);

// Запись файла 

   int total=ArraySize(g_ticks),i=0;

   while(i<total)

     {

      if(FileWriteStruct(hTicksFile,g_ticks[i])==0)

        {

         Print("Ошибка сохранения данных во временный файл...");

         return;

        }

  i++;

     }

FileClose(hTicksFile);

 }  
 
Cree un ejemplo lo más breve posible que demuestre claramente el problema. Lo ideal es que todo el procesamiento se haga en un solo archivo.
 
 

En el depurador miro los valores:

last_tick obtenido medianteSymbolInfoTick(Symbol(),last_tick),

tick_array mediante CopyTicks(_Symbol,tick_array,COPY_TICKS_ALL,0,1);

Todo en tiempo real, los ticks son los mismos, las banderas son diferentes. No he conseguido captar la diferencia de volúmenes de esta manera, no es tan frecuente como la diferencia de banderas.

Definámoslos al menos.

 
zimbabve15:

En el depurador miro los valores:

last_tick obtenido mediante SymbolInfoTick(Symbol(),last_tick),

tick_array mediante CopyTicks(_Symbol,tick_array,COPY_TICKS_ALL,0,1);

Todo en tiempo real, los ticks son los mismos, las banderas son diferentes. No he conseguido captar la diferencia de volúmenes de esta manera, no es tan frecuente como la diferencia de banderas.

Definámoslos al menos.

Para definirlo, necesitamos un archivo de ejemplo.
 

ED-3.16.txt - Apertura del corredor mediante CopyTicks

Segundo archivo mismo corredor a través deSymbolInfoTick(Symbol(),last_tick),

Archivos adjuntos:
ED-3.16.txt  707 kb
 
segundo archivo mismo corredor a través deSymbolInfoTick(Symbol(),last_tick),
Archivos adjuntos:
 
Dime, ¿cómo podré cargar archivos *.txt en el MetaEditor? Si hay un problema, haga el ejemplo lo más sencillo posible: un solo archivo.
 
Karputov Vladimir:
Dime, ¿cómo podré cargar archivos *.txt en el MetaEditor? Si hay un problema, haga el ejemplo lo más sencillo posible: un solo archivo.
En realidad no es un problema, cambia la extensión y el MetaEditor se lo comerá. Es mejor que pidas los archivos del código fuente del programa, debido a que este registro se obtiene.
 
Alexey Kozitsyn:
No hay problema, cambia la extensión y el MetaEditor se lo comerá. Será mejor que pidas los archivos del código fuente del programa que produjo este registro.
Así que ya he pedido dos páginas: dar el ejemplo más corto (aclaro, por si acaso, que "ejemplo" es el archivo *.mq5 en número de una pieza - que es sólo uno) que muestra el problema.
Razón de la queja: