วันนี้เรามาพูดถึง 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()); }
โพสต์ที่เกี่ยวข้อง
- ทำความรู้จักกับ Fundamental Trader EA บน MetaTrader 4 สำหรับการเทรดข่าว
- สร้าง Expert Advisor ด้วย MQL5 Wizard: สัญญาณซื้อขายจาก Morning/Evening Stars + MFI
- การสร้าง Expert Advisor ด้วย MQL5 Wizard: สัญญาณการเทรดจาก Morning/Evening Stars + RSI
- สร้าง EA บน MQL5 Wizard ด้วยสัญญาณการซื้อขายจากแท่งเทียน 3 Black Crows/3 White Soldiers + Stochastic
- Moving Average EA: เครื่องมือทำเงินใน MetaTrader 5