วันนี้เรามาพูดถึง Expert Advisor (EA) ที่จะช่วยเราบันทึกข้อมูลราคาของ Bid และ Ask ในทุกๆ ติ๊กกันนะครับ EA ตัวนี้จะเก็บค่าราคาไว้ในอาร์เรย์ชื่อ "prices" และเมื่อถึงติ๊กที่ยี่สิบ EA จะทำการเขียนข้อมูลจากอาร์เรย์ไปยังไฟล์โดยใช้ฟังก์ชัน FileWriteArray() ข้อมูลจะถูกบันทึกในไฟล์ไบนารีในโฟลเดอร์ย่อยของเทอร์มินัลท้องถิ่น เราสามารถค้นหาเส้นทางของโฟลเดอร์นี้ได้โดยการเรียกใช้ฟังก์ชัน TerminalInfoString()
PrintFormat("เส้นทางไปยังโฟลเดอร์เทอร์มินัลท้องถิ่น: %s\\Files\",TerminalInfoString(TERMINAL_DATA_PATH));เมื่อเราเอา EA ออกจากกราฟ ข้อมูลที่ยังไม่ได้เขียนจะถูกบันทึกลงไฟล์ก่อนที่ EA จะหยุดทำงาน
โค้ด:
//--- พารามิเตอร์นำเข้าinputstring InpFileName="data.bin"; inputstring InpDirectoryName="SomeFolder"; //+------------------------------------------------------------------+//| โครงสร้างสำหรับการจัดเก็บข้อมูลราคา |//+------------------------------------------------------------------+struct prices { datetime date; // วันเวลา double bid; // ราคาประมูล double ask; // ราคาขอ }; //--- ตัวแปรทั่วโลกint count=0; int size=20; string path=InpDirectoryName+"//"+InpFileName; prices arr[]; //+------------------------------------------------------------------+//| ฟังก์ชันการเริ่มต้นของ EA |//+------------------------------------------------------------------+intOnInit() { //--- จัดสรรหน่วยความจำสำหรับอาร์เรย์ ArrayResize(arr,size); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+//| ฟังก์ชันการยกเลิกของ EA |//+------------------------------------------------------------------+voidOnDeinit(constint reason) { //--- เขียนข้อมูลที่เหลือหาก count<n WriteData(count); } //+------------------------------------------------------------------+//| ฟังก์ชันการติ๊กของ EA |//+------------------------------------------------------------------+voidOnTick() { //--- บันทึกข้อมูลลงในอาร์เรย์ 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(constint 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