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()); }
Reactie 0