วิธีการทำงานกับพื้นที่จัดเก็บข้อมูลในเครื่อง
ในบทความนี้และวิดีโอที่เกี่ยวข้อง เราจะอธิบายว่าพื้นที่จัดเก็บข้อมูลในเครื่องคืออะไรและสามารถใช้ใน Algo ของ cTrader ได้อย่างไร เราจะให้ตัวอย่างที่เป็นประโยชน์และอธิบายวิธีการทำงานของขอบเขตพื้นที่จัดเก็บข้อมูลในเครื่อง
ทำไมต้องใช้พื้นที่จัดเก็บข้อมูลในเครื่อง
มีหลายกรณีที่คุณต้องการให้ Algo ของคุณบันทึกบางสิ่งหรือเข้าถึงบางสิ่งจากระบบไฟล์ในเครื่อง ตัวอย่างเช่น คุณอาจต้องการบันทึกการดำเนินการทั้งหมดของ cBot อย่างไรก็ตาม โดยปกติแล้วสิ่งนี้ต้องการให้ Algo มีสิทธิ์ในการเข้าถึงที่สูงขึ้น (AccessRights.FullAccess) ซึ่งไม่เหมาะสำหรับผู้ใช้ หาก Algo ร้องขอให้ผู้ใช้ให้สิทธิ์ที่สูงขึ้น ผู้ใช้มีแนวโน้มที่จะไว้วางใจ Algo น้อยลง โดยเฉพาะอย่างยิ่งหากมีการแจกจ่ายโดยไม่มีซอร์สโค้ด พื้นที่จัดเก็บข้อมูลในเครื่องเป็นวิธีที่สะดวกในการเข้าถึงระบบไฟล์ในเครื่องอย่างปลอดภัยโดยไม่ก่อให้เกิดความกังวลด้านความปลอดภัยใดๆ การใช้พื้นที่จัดเก็บข้อมูลในเครื่องช่วยให้นักพัฒนาสามารถรักษาสิทธิ์ในการเข้าถึงของ Algo ของพวกเขาให้เป็น AccessRights.None
การบันทึกสตริงในพื้นที่จัดเก็บข้อมูลในเครื่อง
Algo ทุกประเภทของ cTrader มีคุณสมบัติ LocalStorage ที่อนุญาตให้ดำเนินการอ่านและเขียนได้ เพื่อแสดงวิธีการทำงานของพื้นที่จัดเก็บข้อมูลในเครื่อง เราจะสร้าง cBot ใหม่ ในตัวจัดการ OnStart เราจะใช้เมธอด LocalStorage.SetString(string key, string value) ดังที่คุณเห็น มันรับอาร์กิวเมนต์สองตัว ได้แก่ คีย์ที่ควรบันทึกข้อมูลและค่าที่จะบันทึก
1 | |
เพื่อดึงค่า เราจะใช้เมธอด GetString(string key) ในตัวจัดการ OnTick ของ cBot
1 | |
ตราบใดที่ Message ไม่เป็น null เราสามารถสร้าง cBot และเห็นค่าที่ดึงมาถูกพิมพ์ในบันทึกอย่างถูกต้อง
การบันทึกออบเจ็กต์ในพื้นที่จัดเก็บข้อมูลในเครื่อง
นอกเหนือจากสตริง คุณสามารถใช้พื้นที่จัดเก็บข้อมูลในเครื่องเพื่อบันทึกออบเจ็กต์ประเภทใดก็ได้ เบื้องหลัง cTrader ทำการแปลงออบเจ็กต์เป็นอนุกรมและแปลงกลับในพื้นที่จัดเก็บข้อมูลในเครื่อง ซึ่งช่วยให้สามารถแชร์ข้อมูลประเภทใดก็ได้ เพื่อสาธิตสิ่งนี้ เราสามารถสร้างคลาสใหม่เพื่อจัดเก็บข้อมูล บันทึก และเรียกคืนในภายหลัง เราจะตั้งชื่อคลาสนี้ว่า Signal
1 2 3 4 5 6 | |
ในเมธอด OnStart() เราจะสร้างอินสแตนซ์ใหม่ของคลาสนี้และกำหนดค่าเริ่มต้นให้กับคุณสมบัติต่างๆ
1 2 3 4 5 | |
เราจะใช้เมธอด SetObject(string key, Object object) เพื่อบันทึกและเรียกคืนยอดคงเหลือในบัญชี
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
หากเราสร้าง cBot และเรียกใช้งาน เราควรจะเห็นค่าที่ถูกต้องถูกพิมพ์ออกมาในบันทึก
ขอบเขตของพื้นที่จัดเก็บข้อมูลในเครื่อง
เมื่อใช้พื้นที่จัดเก็บข้อมูลในเครื่อง คุณยังสามารถกำหนดขอบเขตที่ค่าที่บันทึกไว้จะถูกเปิดเผยสำหรับการเรียกคืนในอนาคต มีขอบเขตที่แตกต่างกันสามประเภท:
- ขอบเขตอินสแตนซ์ - ค่าที่บันทึกไว้จะสามารถใช้ได้เฉพาะกับอินสแตนซ์เฉพาะเท่านั้น
- ขอบเขตประเภท - ค่าที่บันทึกไว้จะสามารถใช้ได้กับทุกอินสแตนซ์ของอัลกอริทึมเฉพาะ
- ขอบเขตอุปกรณ์ - ค่าที่บันทึกไว้จะสามารถใช้ได้กับทุกอัลกอริทึมโดยไม่คำนึงถึงประเภทของอัลกอริทึม
นี่คือตัวอย่างการใช้ขอบเขตอินสแตนซ์
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
โปรดสังเกตว่าเราได้ระบุขอบเขตอย่างชัดเจนในเมธอด SetString()
เราสามารถเพิ่มอินสแตนซ์หลายตัวของ cBot นี้และกำหนดค่าให้อินสแตนซ์หนึ่งเขียนลงในพื้นที่จัดเก็บข้อมูลในเครื่อง ในขณะที่อีกอินสแตนซ์หนึ่งเรียกคืนข้อมูล ในกรณีนี้ การอ่านข้อมูลควรจะเป็นไปไม่ได้ อย่างไรก็ตาม หากมีเพียงอินสแตนซ์เดียวที่ถูกตั้งค่าให้ดำเนินการทั้งการเขียนและการอ่าน cBot ควรจะทำงานได้ตามที่ตั้งใจ
นี่คือตัวอย่างการใช้ขอบเขตประเภท
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
หากเราสร้างอินสแตนซ์สองตัวของบอทนี้และตั้งค่าให้อินสแตนซ์หนึ่งเขียนลงในพื้นที่จัดเก็บข้อมูลในเครื่อง และอีกอินสแตนซ์หนึ่งอ่านค่าที่บันทึกไว้ ทุกอย่างควรจะทำงานได้โดยไม่เกิดข้อผิดพลาดใดๆ
สุดท้ายแต่ไม่ท้ายสุด ขอบเขตอุปกรณ์ช่วยให้สามารถแลกเปลี่ยนข้อมูลระหว่าง Algo ต่างๆ ได้ นี่คือตัวอย่างการใช้ประเภทขอบเขตนี้
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
เราสามารถสร้าง cBot หลายตัวที่ใช้โค้ดเดียวกัน หากเราตั้งค่าอย่างถูกต้อง cBot หนึ่งตัวสามารถบันทึกข้อมูลลงในพื้นที่จัดเก็บข้อมูลในเครื่อง ในขณะที่อีกตัวหนึ่งเรียกคืนข้อมูล ตราบใดที่ขอบเขตเท่ากับ LocalStorageScope.Device ระบบของเราควรจะทำงานได้ตามที่ตั้งใจ
การใช้เมธอด Flush() และ Reload()
หากคุณต้องการแชร์ข้อมูลระหว่างอินสแตนซ์หลายตัวของ cTrader ให้เรียกใช้เมธอด Flush() และ Reload()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |
หากเราสร้าง cBot หลายตัวด้วยโค้ดนี้และทำการทดลองเพื่อแชร์ข้อมูลระหว่างอินสแตนซ์ต่างๆ ของ cTrader เราจะเห็นว่าค่าที่บันทึกไว้ของเราถูกเก็บรักษาไว้ตามที่ตั้งใจ