หน้าแรก การเทรดด้วยระบบ โพสต์

การใช้งาน EA สำหรับ MetaTrader 5: การบันทึกข้อมูล Bid และ Ask

ไฟล์แนบ
1620.zip (1.04 KB, ดาวน์โหลด 0 ครั้ง)

วันนี้เรามาพูดถึง Expert Advisor (EA) ที่จะช่วยเราบันทึกข้อมูลราคาของ Bid และ Ask ในทุกๆ ติ๊กกันนะครับ EA ตัวนี้จะเก็บค่าราคาไว้ในอาร์เรย์ชื่อ "prices" และเมื่อถึงติ๊กที่ยี่สิบ EA จะทำการเขียนข้อมูลจากอาร์เรย์ไปยังไฟล์โดยใช้ฟังก์ชัน FileWriteArray() ข้อมูลจะถูกบันทึกในไฟล์ไบนารีในโฟลเดอร์ย่อยของเทอร์มินัลท้องถิ่น เราสามารถค้นหาเส้นทางของโฟลเดอร์นี้ได้โดยการเรียกใช้ฟังก์ชัน TerminalInfoString()

PrintFormat("เส้นทางไปยังโฟลเดอร์เทอร์มินัลท้องถิ่น: %s\\Files\",TerminalInfoString(TERMINAL_DATA_PATH)); 
เมื่อเราเอา EA ออกจากกราฟ ข้อมูลที่ยังไม่ได้เขียนจะถูกบันทึกลงไฟล์ก่อนที่ EA จะหยุดทำงาน

โค้ด:

//--- พารามิเตอร์นำเข้า
input string InpFileName="data.bin";
input string InpDirectoryName="SomeFolder";
//+------------------------------------------------------------------+
//| โครงสร้างสำหรับการจัดเก็บข้อมูลราคา                                 |
//+------------------------------------------------------------------+
struct prices
  {
   datetime          date; // วันเวลา
   double            bid;  // ราคาประมูล
   double            ask;  // ราคาขอ
  };
//--- ตัวแปรทั่วโลก
int    count=0;
int    size=20;
string path=InpDirectoryName+"//"+InpFileName;
prices arr[];
//+------------------------------------------------------------------+
//| ฟังก์ชันการเริ่มต้นของ EA                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- จัดสรรหน่วยความจำสำหรับอาร์เรย์
   ArrayResize(arr,size);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| ฟังก์ชันการยกเลิกของ EA                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- เขียนข้อมูลที่เหลือหาก count<n
   WriteData(count);
  }
//+------------------------------------------------------------------+
//| ฟังก์ชันการติ๊กของ EA                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- บันทึกข้อมูลลงในอาร์เรย์
   arr[count].date=TimeCurrent();
   arr[count].bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
   arr[count].ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
//--- แสดงข้อมูลปัจจุบัน
   Print("วันที่ = ",arr[count].date," ราคาประมูล = ",arr[count].bid," ราคาขอ = ",arr[count].ask);
//--- เพิ่มตัวนับ
   count++;
//--- หากอาร์เรย์เต็ม เขียนข้อมูลลงไฟล์และรีเซ็ต
   if(count==size)
     {
      WriteData(size);
      count=0;
     }
  }
//+------------------------------------------------------------------+
//| เขียน n องค์ประกอบของอาร์เรย์ลงในไฟล์                        |
//+------------------------------------------------------------------+
void WriteData(const int n)
  {
//--- เปิดไฟล์
   ResetLastError();
   int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN);
   if(handle!=INVALID_HANDLE)
     {
      //--- เขียนข้อมูลอาร์เรย์ไปยังไฟล์
      FileSeek(handle,0,SEEK_END);
      FileWriteArray(handle,arr,0,n);
      //--- ปิดไฟล์
      FileClose(handle);
     }
   else
      Print("เปิดไฟล์ล้มเหลว, ข้อผิดพลาด ",GetLastError());
  }

โพสต์ที่เกี่ยวข้อง

ความคิดเห็น (0)