[ต้นฉบับ FX581] "หลุม" ของบันทึกประวัติศาสตร์การพัฒนาทักษะ MT4

ตัวบ่งชี้ MT4 กลุ่มสนทนา EA
fx58

เรามักพบความจำเป็นในการนับจำนวนมือในบันทึกการทำธุรกรรมในอดีต หรือเพื่อรับข้อมูลเกี่ยวกับลำดับธุรกรรมที่ผ่านมาล่าสุด ฟังก์ชั่นดังกล่าวไม่ใช่เรื่องยากสำหรับเรา นี่คือตัวอย่างโค้ดง่ายๆ:

ดับเบิ้ลล็อต = 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 (ตัวจัดการไฟล์);

   }

}

ด้วยวิธีการข้างต้น ทุกคนต้องเข้าใจ และโปรแกรมของเราจะสมบูรณ์แบบและแข็งแกร่งยิ่งขึ้นในการพัฒนาในอนาคต

ลิขสิทธิ์เป็นของผู้เขียน

แก้ไขล่าสุดโดย 08:10 24/08/2023

18 เห็นด้วย
33 ความคิดเห็น
เพิ่มรายการโปรด
ดูบทความต้นฉบับ
ข้อเสนอแนะที่เกี่ยวข้อง

การเปิดเผยข้อมูลความเสี่ยง

เครื่องมือการเทรดทางการเงินมีความเสี่ยงสูง ซึ่งรวมถึงความเสี่ยงที่จะสูญเสียเงินลงทุนบางส่วนหรือทั้งหมด และอาจไม่เหมาะสำหรับนักลงทุนทุกคน ความคิดเห็น การสนทนา ข้อความ ข่าวสาร การวิจัย การวิเคราะห์ ราคา หรือข้อมูลอื่น ๆ ที่มีอยู่บนเว็บไซต์นี้จัดทำขึ้นเพื่อเป็นข้อมูลการตลาดทั่วไปเพื่อการศึกษาและความบันเทิงเท่านั้น และไม่ถือเป็นคำแนะนำในการลงทุน ความคิดเห็น ข้อมูลการตลาด คำแนะนำหรือเนื้อหาอื่น ๆ อาจเปลี่ยนแปลงได้ตลอดเวลาโดยไม่ต้องแจ้งให้ทราบ Trading.live จะไม่รับผิดชอบต่อความสูญเสียหรือความเสียหายใด ๆ ที่อาจเกิดขึ้นโดยตรงหรือโดยอ้อมจากการใช้หรือพึ่งพาข้อมูลดังกล่าว

© 2024 Tradinglive Limited. All Rights Reserved.