Demo_FileWriteArray: EA untuk MetaTrader 5 yang Berfungsi Dengan Baik

Mike 2013.04.09 22:14 9 0 0
Lampiran

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