เรามักพบความจำเป็นในการนับจำนวนมือในบันทึกการทำธุรกรรมในอดีต หรือเพื่อรับข้อมูลเกี่ยวกับลำดับธุรกรรมที่ผ่านมาล่าสุด ฟังก์ชั่นดังกล่าวไม่ใช่เรื่องยากสำหรับเรา นี่คือตัวอย่างโค้ดง่ายๆ:
ดับเบิ้ลล็อต = 0;
สำหรับ (int i=0;i < OrdersHistoryTotal();i++)
{
ถ้า (OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) == เท็จ) ดำเนินการต่อ;
ล็อต += OrderLots();
}
พิมพ์ ("ล็อตทั้งหมด:", ล็อต);
รหัสนี้ใช้นับจำนวนล็อตย้อนหลังทั้งหมดผ่านลูป อันที่จริง รหัสนี้เป็นเพียงการเปลี่ยนรหัสที่วนรอบคำสั่งซื้อที่มีอยู่ทั้งหมด เปลี่ยนฟังก์ชัน OrdersTotal() เป็น OrdersHistoryTotal() และเพิ่มพารามิเตอร์ให้กับฟังก์ชัน OrderSelect: MODE_HISTORY มีปัญหากับโปรแกรมง่าย ๆ เช่นนี้หรือไม่? คำตอบคือใช่
ลองเรียกใช้โปรแกรม EA นี้ ผลลัพธ์ที่แสดงในเทอร์มินัลคือ:
จำนวนมือทั้งหมดคือ 0! มันเหลือเชื่อมาก เห็นได้ชัดว่าฉันมีประวัติการทำธุรกรรมมากมาย
ทีนี้มาดำเนินการบางอย่างกับเอดิเตอร์ แล้วเรียกใช้โปรแกรมเพื่อดูว่าผลลัพธ์สุดท้ายเป็นอย่างไร
คลิกขวาที่ประวัติบัญชี เลือกบันทึกธุรกรรมทั้งหมด และตอนนี้บันทึกย้อนหลังทั้งหมดของธุรกรรมก่อนหน้าจะปรากฏในประวัติบัญชี
จากนั้นเรารันโปรแกรม EA และลองใช้งาน ผลลัพธ์จะเป็นปกติ:
นี่เป็น "หลุมพราง" ของการได้รับประวัติผ่านโปรแกรม ใน MT4 ซอฟต์แวร์จะแสดงเฉพาะบันทึกย้อนหลังของเดือนปัจจุบันตามค่าเริ่มต้นและโปรแกรมจะค้นหาตามบันทึกย้อนหลังของซอฟต์แวร์เมื่อได้รับข้อมูลย้อนหลังเท่านั้น บันทึก เนื่องจากฉันไม่มีการทำธุรกรรมใด ๆ ดังนั้นเมื่อคุณนับจำนวนมือทั้งหมด คุณจะได้ 0 และถ้าบันทึกการทำธุรกรรมทั้งหมดแสดงในซอฟต์แวร์ ในที่สุด โปรแกรมก็สามารถทำงานได้ตามปกติ
สาเหตุที่เราไม่ค่อยพบปัญหานี้เนื่องจากบัญชีทดลองแพลตฟอร์ม MT4 ทั่วไปมีระยะเวลาสั้น ๆ หลังจากลงทะเบียนบัญชีทดลองแล้ว บัญชีทดลองจะหมดอายุเร็ว ๆ นี้ ดังนั้นจึงมีเพียงไม่กี่คนที่พบปัญหานี้ ดังนั้นจึงเป็นเรื่องสำคัญมากที่จะต้องมีแพลตฟอร์มที่สามารถเปิดบัญชีจำลองระยะยาวได้ เราขอแนะนำให้ใช้แพลตฟอร์ม xxx ซึ่งสามารถจัดเตรียมบัญชีจำลองได้นานถึง xx วัน
ผู้ใช้จำลองระยะยาวนั้นมีประโยชน์มากสำหรับเราในการพัฒนาและทดสอบโปรแกรม EA อย่างที่เราทราบกันดีว่าการใช้การจำลองในอดีตหลังจากพัฒนาโปรแกรม EA ใหม่นั้นไม่เพียงพอ นอกจากนี้ ยังจำเป็นต้องวางสายการทดสอบ หาก การทดสอบจะหมดอายุภายในไม่กี่วันก็จะเป็นแบบนี้ ลำบากมากสำหรับการพัฒนา EA
หลุมพรางประการที่สองเกี่ยวกับบันทึกประวัติศาสตร์นี้ คือ หากเราต้องการบันทึกประวัติศาสตร์ ต้องใช้โปรแกรม EA เพื่อขอรับเท่านั้น หากเราเขียนโปรแกรมสคริปต์ เราจะไม่สามารถรับบันทึกประวัติศาสตร์ได้ แม้ว่า หากเราได้แสดงไว้ในประวัติบัญชีแล้ว บันทึกทั้งหมด
แล้วเราจะหลีกเลี่ยงปัญหานี้ได้อย่างไร? เนื่องจากลูกค้าไม่ทราบปัญหานี้เมื่อใช้โปรแกรม EA ของเรา หากลูกค้าไม่ทราบหรือจะไม่ดำเนินการนี้เลย เราจะหลีกเลี่ยงปัญหานี้ในโปรแกรมได้อย่างไร วิธีที่ค่อนข้างง่ายคือการจัดเก็บบันทึกคำสั่งซื้อทั้งหมดไว้ในไฟล์ในขณะที่โปรแกรม EA ของคุณกำลังทำงาน ดังนั้น จึงสามารถรับข้อมูลบันทึกประวัติได้แม้ว่าลูกค้าจะไม่ได้ดำเนินการใดๆ ก็ตาม ต่อไปนี้เป็นตัวอย่างโค้ดง่ายๆ สำหรับการบันทึกไฟล์:
//content คือเนื้อหาที่จะจัดเก็บ
เป็นโมฆะ setfile (เนื้อหาสตริง)
{
string filename = "ชื่อไฟล์ที่จะจัดเก็บ";
int filehandle = FileOpen(ชื่อไฟล์,FILE_WRITE|FILE_TXT);//นอกจากนี้ยังสามารถบันทึกเป็นไฟล์ CSV และแทนที่ FILE_TXT ด้วย FILE_CSV เพื่อให้สามารถจัดเก็บข้อมูลได้หลายส่วน
if(filehandle == INVALID_HANDLE)//ตัดสินว่ามีข้อผิดพลาดในการอ่านไฟล์หรือไม่
{
FileClose (ตัวจัดการไฟล์);
พิมพ์ ("เกิดข้อผิดพลาดในการบันทึกไฟล์");
}
อื่น//เปิดตามปกติ คุณสามารถเขียนเนื้อหาได้
{
FileWriteString (ตัวจัดการไฟล์, เนื้อหา);
FileClose (ตัวจัดการไฟล์);
}
}
ด้วยวิธีการข้างต้น ทุกคนต้องเข้าใจ และโปรแกรมของเราจะสมบูรณ์แบบและแข็งแกร่งยิ่งขึ้นในการพัฒนาในอนาคต