Demo_FileWriteArray: EA untuk MetaTrader 5 yang Canggih

Mike 2013.04.09 22:14 14 0 0
Lampiran

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