Dalam dunia trading, memiliki alat yang tepat adalah kunci untuk berjaya. Di sini, kita akan membincangkan satu Expert Advisor (EA) yang dinamakan Demo_FileWriteArray. EA ini berfungsi untuk mengambil nilai harga Bid dan Ask pada setiap tick dan menyimpannya ke dalam struktur array yang kita panggil "prices". Setiap kali terdapat dua puluh tick, EA ini akan menulis data objek struktur ke dalam fail menggunakan fungsi FileWriteArray(). Data tersebut akan disimpan dalam fail binari di subdirektori folder terminal tempatan. Untuk mendapatkan lokasi folder terminal tempatan, kita boleh menggunakan fungsi TerminalInfoString().
PrintFormat("Path ke folder terminal tempatan: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
Apabila kita menghapus EA ini dari carta, sebarang data yang belum ditulis akan disimpan ke dalam fail sebelum EA ini menghentikan kerjanya.
Kod:
//--- 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 }; //--- pembolehubah global int count=0; int size=20; string path=InpDirectoryName+"//"+InpFileName; prices arr[]; //+------------------------------------------------------------------+ //| Fungsi inisialisasi EA | //+------------------------------------------------------------------+ int OnInit() { //--- peruntukkan memori untuk array ArrayResize(arr,size); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Fungsi deinisialisasi EA | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- tulis string yang tinggal jika count<n WriteData(count); } //+------------------------------------------------------------------+ //| Fungsi tick EA | //+------------------------------------------------------------------+ void OnTick() { //--- simpan data ke dalam array arr[count].date=TimeCurrent(); arr[count].bid=SymbolInfoDouble(Symbol(),SYMBOL_BID); arr[count].ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK); //--- tunjukkan data semasa Print("Tarikh = ",arr[count].date," Bid = ",arr[count].bid," Ask = ",arr[count].ask); //--- tingkatkan kaunter count++; //--- jika array penuh, tulis data ke fail dan kosongkan if(count==size) { WriteData(size); count=0; } } //+------------------------------------------------------------------+ //| Tulis n elemen array ke dalam fail | //+------------------------------------------------------------------+ void WriteData(const int n) { //--- buka fail ResetLastError(); int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN); if(handle!=INVALID_HANDLE) { //--- tulis data array ke hujung fail FileSeek(handle,0,SEEK_END); FileWriteArray(handle,arr,0,n); //--- tutup fail FileClose(handle); } else Print("Gagal membuka fail, ralat ",GetLastError()); }
Komen 0