Demo_FileWriteArray: Een Handige Expert voor MetaTrader 5

Mike 2013.04.09 22:14 14 0 0
Bijlage

Deze Expert Advisor haalt de bied- en laatprijzen op elke tick op en slaat ze op in een array genaamd "prijzen". Iedere twintigste tick schrijft de Expert Advisor de gegevens van de structuurobjecten naar een bestand met behulp van de FileWriteArray() functie. De gegevens worden opgeslagen in een binair bestand in de subdirectory van de lokale terminalmap. De locatie van de lokale terminalmap kan worden verkregen door de TerminalInfoString() functie aan te roepen.

PrintFormat("De pad naar de lokale terminalmap: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH)); 

Wanneer je de Expert Advisor van de grafiek verwijdert, worden de nog niet geschreven gegevens naar het bestand geschreven, waarna de Expert Advisor zijn werk beëindigt.

Code:

//--- invoerparameters
input string InpFileName="data.bin";
input string InpDirectoryName="SomeFolder";
//+------------------------------------------------------------------+
//| Structuur voor het opslaan van prijsgegevens                                 |
//+------------------------------------------------------------------+
struct prijzen
  {
   datetime          datum; // data
   double            bied;  // Biedprijs
   double            vraag;  // Laatprijs
  };
//--- globale variabelen
int    count=0;
int    size=20;
string pad=InpDirectoryName+"//"+InpFileName;
prijzen arr[];
//+------------------------------------------------------------------+
//| Initialisatiefunctie van de Expert                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- geheugen toewijzen voor de array
   ArrayResize(arr,size);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Deinitialisatiefunctie van de Expert                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reden)
  {
//--- schrijf de resterende tellingsstrings als count<n
   WriteData(count);
  }
//+------------------------------------------------------------------+
//| Tick-functie van de Expert                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- sla gegevens op in de array
   arr[count].datum=TimeCurrent();
   arr[count].bied=SymbolInfoDouble(Symbol(),SYMBOL_BID);
   arr[count].vraag=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
//--- toon huidige gegevens
   Print("Datum = ",arr[count].datum," Bied = ",arr[count].bied," Vraag = ",arr[count].vraag);
//--- verhoog de teller
   count++;
//--- als de array vol is, schrijf gegevens naar het bestand en zet het op nul
   if(count==size)
     {
      WriteData(size);
      count=0;
     }
  }
//+------------------------------------------------------------------+
//| Schrijf n elementen van de array naar het bestand                        |
//+------------------------------------------------------------------+
void WriteData(const int n)
  {
//--- open het bestand
   ResetLastError();
   int handle=FileOpen(pad,FILE_READ|FILE_WRITE|FILE_BIN);
   if(handle!=INVALID_HANDLE)
     {
      //--- schrijf arraygegevens naar het einde van het bestand
      FileSeek(handle,0,SEEK_END);
      FileWriteArray(handle,arr,0,n);
      //--- sluit het bestand
      FileClose(handle);
     }
   else
      Print("Kon het bestand niet openen, fout ",GetLastError());
  }
Lijst
Reactie 0