Hai para trader! Kali ini kita akan membahas tentang Expert Advisor (EA) yang bernama Demo_FileWriteArray. EA ini sangat berguna untuk mendapatkan nilai Bid dan Ask pada setiap tick dan menyimpannya ke dalam array struktur yang disebut "prices". Setiap dua puluh tick, EA ini akan menulis data struktur ke dalam file menggunakan fungsi FileWriteArray(). Data tersebut akan disimpan dalam file biner yang terletak di subdirektori folder terminal lokal. Lokasi folder terminal lokal dapat diperoleh dengan memanggil fungsi TerminalInfoString()
PrintFormat("Path ke folder terminal lokal: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
Ketika EA ini dihapus dari grafik, data yang belum ditulis ke file akan disimpan, dan kemudian EA akan berhenti beroperasi.
Kode:
//--- parameter input input string InpFileName="data.bin"; input string InpDirectoryName="SomeFolder"; //+------------------------------------------------------------------+ //| Struktur untuk menyimpan data harga | //+------------------------------------------------------------------+ struct prices { datetime date; // data double bid; // Harga Bid double ask; // Harga Ask }; //--- variabel global int count=0; int size=20; string path=InpDirectoryName+"//"+InpFileName; prices arr[]; //+------------------------------------------------------------------+ //| Fungsi inisialisasi EA | //+------------------------------------------------------------------+ int OnInit() { //--- alokasikan memori untuk array ArrayResize(arr,size); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Fungsi deinisialisasi EA | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- tulis sisa count string jika count<n WriteData(count); } //+------------------------------------------------------------------+ //| Fungsi tick EA | //+------------------------------------------------------------------+ void OnTick() { //--- simpan data ke array arr[count].date=TimeCurrent(); arr[count].bid=SymbolInfoDouble(Symbol(),SYMBOL_BID); arr[count].ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK); //--- tampilkan data terkini Print("Tanggal = ",arr[count].date," Bid = ",arr[count].bid," Ask = ",arr[count].ask); //--- tingkatkan counter count++; //--- jika array sudah terisi, tulis data ke file dan nol-kan if(count==size) { WriteData(size); count=0; } } //+------------------------------------------------------------------+ //| Tulis n elemen array ke file | //+------------------------------------------------------------------+ void WriteData(const int n) { //--- buka file ResetLastError(); int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN); if(handle!=INVALID_HANDLE) { //--- tulis data array ke akhir file FileSeek(handle,0,SEEK_END); FileWriteArray(handle,arr,0,n); //--- tutup file FileClose(handle); } else Print("Gagal membuka file, kesalahan ",GetLastError()); }
Komentar 0