Test des "CopyTicks". - page 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);

 }  
 
Créez un exemple aussi court que possible qui démontre clairement le problème. Idéalement, tout le traitement dans un seul fichier.
 
 

Dans le débogueur, je regarde les valeurs :

last_tick obtenu viaSymbolInfoTick(Symbol(),last_tick),

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

Tout est en temps réel, les ticks sont les mêmes, les drapeaux sont différents. Je n'ai pas réussi à capter la différence de volumes de cette manière, ce n'est pas aussi fréquent que la différence de drapeaux.

Définissons-les au moins.

 
zimbabve15:

Dans le débogueur, je regarde les valeurs :

last_tick obtenu via SymbolInfoTick(Symbol(),last_tick),

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

Tout est en temps réel, les ticks sont les mêmes, les drapeaux sont différents. Je n'ai pas réussi à capter la différence de volumes de cette manière, ce n'est pas aussi fréquent que la différence de drapeaux.

Définissons-les au moins.

Afin de le définir, nous avons besoin d'un fichier d'exemple.
 

ED-3.16.txt - ouverture du courtier via CopyTicks

Deuxième fichier même courtier viaSymbolInfoTick(Symbol(),last_tick),

Dossiers :
ED-3.16.txt  707 kb
 
deuxième fichier même courtier viaSymbolInfoTick(Symbol(),last_tick),
Dossiers :
 
Dites-moi, comment pourrai-je charger des fichiers *.txt dans MetaEditor ? S'il y a un problème, faites l'exemple le plus simple possible - un seul fichier.
 
Karputov Vladimir:
Dites-moi, comment pourrai-je charger des fichiers *.txt dans MetaEditor ? S'il y a un problème, faites l'exemple le plus simple possible - un seul fichier.
En fait, ce n'est pas un problème, changez l'extension et MetaEditor l'acceptera. Vous feriez mieux de demander les fichiers du code source du programme, grâce auquel ce journal est obtenu.
 
Alexey Kozitsyn:
Pas de problème, changez l'extension et MetaEditor l'absorbera. Vous feriez mieux de demander les fichiers de code source du programme qui a produit ce journal.
J'ai donc déjà demandé deux pages : donnez l'exemple le plus court (je précise, juste au cas où, que "l'exemple" est le fichier *.mq5 en nombre de pièces - c'est-à-dire un seul) qui montre le problème.
Raison: