วิธีจัดการอีเวนต์แท่งเทียน
อีเวนต์แท่งเทียนมีความสำคัญต่อวงจรชีวิตของ cBot ทุกตัว การจัดการอีเวนต์เหล่านี้อย่างเหมาะสมมีความสำคัญอย่างยิ่งในการจัดการวิธีที่ cBot ของคุณตอบสนองต่อสภาวะตลาดใหม่ ในบทความนี้และวิดีโอที่เกี่ยวข้อง เราจะสาธิตประเภทหลักของอีเวนต์แท่งเทียนและพูดถึงตัวจัดการสำหรับอีเวนต์เหล่านี้ที่เปิดเผยโดย API ของ cTrader
- แท่งเทียน - หมายถึงวัตถุประเภทต่าง ๆ ที่ถูกวาดบนแผนภูมิการเทรดโดย cTrader ตามลำดับ อาจเป็นแท่งเทียน อิฐ Renko แท่ง Range หรือแม้แต่แท่งเทียน Heiken Ashi
จัดการอีเวนต์ BarOpened
อีเวนต์แท่งเทียนเกิดขึ้นเมื่อแท่งเทียนใหม่เริ่มถูกพล็อตบนแผนภูมิการเทรดที่เชื่อมโยงกับ cBot อีเวนต์ BarOpened เกิดขึ้นสำหรับแท่งเทียนใหม่ที่เพิ่งเริ่มถูกวาดบนแผนภูมิ
การจัดการอีเวนต์นี้ทำได้ผ่านเมธอด OnBar() ซึ่งเป็นเมธอดที่สืบทอดมาจากคลาส Robot พื้นฐาน ตอนนี้เราจะสร้าง cBot ที่จัดการอีเวนต์ BarOpened เป็นส่วนหนึ่งของกลยุทธ์ของเราในการวิเคราะห์ความรู้สึกของตลาด เราจะลบเมธอด OnStart() และ OnStop() ออกจากเทมเพลตและแทนที่ตัวจัดการ OnTick() ด้วยตัวจัดการ OnBar()
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
cBot นี้ควรถูกเปิดใช้งานบนแผนภูมิที่มีกรอบเวลา D1 (รายวัน) ในทุกแท่งเทียน มันจะเปรียบเทียบความแตกต่างของราคาเปิดกับราคาเปิดของแท่งเทียนก่อนหน้าและส่งคำสั่งใหม่ในทิศทางที่เหมาะสม หากความแตกต่างของราคาไม่มีนัยสำคัญ บอทจะปิดโพสิชันที่เปิดอยู่ทั้งหมดแทน
หากเรารัน backtest ของบอทง่าย ๆ นี้ ผลลัพธ์ดูน่าพอใจ

จัดการอีเวนต์ BarClosed
เมื่อแท่งเทียนใหม่เปิด มันจะไม่มีข้อมูลราคาใด ๆ นอกจากราคาเปิด ในหลายกรณี คุณอาจต้องการให้ cBot ของคุณเข้าถึงข้อมูลจากแท่งเทียนก่อนหน้าเพื่อให้แน่ใจว่าการดำเนินกลยุทธ์เป็นไปอย่างราบรื่น นี่คือเหตุผลที่อีเวนต์ BarClosed เกิดขึ้นสำหรับแท่งเทียนที่เพิ่งปิด (แท่งที่อยู่ก่อนหน้าแท่งใหม่ทันที) และช่วยให้คุณใช้ข้อมูลราคาและปริมาณได้อย่างง่ายดาย เมื่ออีเวนต์ BarClosed ถูกเรียกใช้ แท่งเทียนที่เพิ่งเปิดจะถูกละเว้นจากคอลเลกชัน Bars ทั้งหมด
ในการจัดการอีเวนต์ BarClosed API เปิดเผยเมธอด OnBarClosed
หมายเหตุ
ในตัวอย่างก่อนหน้านี้ เราใช้คุณสมบัติ Bars.LastBar.Open เพื่อรับราคาเปิดของแท่งเทียนที่เพิ่งเปิด หากเราใช้คุณสมบัติเดียวกันในเมธอด OnBarClosed() เราจะได้ราคาเปิดของแท่งเทียนที่เพิ่งปิด
เราจะสร้าง cBot ง่าย ๆ ที่ใช้ตัวจัดการ OnBarClosed() ดังต่อไปนี้
1 2 3 4 5 6 7 8 9 10 11 12 13 | |
cBot ตรวจจับรูปแบบขาขึ้น (ค้อน) โดยประเมินความยาวของไส้ด้านล่างของแท่งเทียน หากตรวจพบรูปแบบค้อน โพสิชันที่เปิดไว้ก่อนหน้าทั้งหมดจะถูกปิดและคำสั่งซื้อใหม่จะถูกส่งพร้อมกับ Stop Loss 50 pips
หากเรา backtest บอท เราจะได้ผลลัพธ์ที่ดี

เพิ่มตัวจัดการอีเวนต์แบบกำหนดเอง
เมื่อจัดการอีเวนต์ BarOpened และ BarClosed คุณยังสามารถใช้ไวยากรณ์ที่แตกต่างกันเล็กน้อยโดยกำหนดอีเวนต์เหล่านี้ด้วยตัวจัดการแบบกำหนดเอง ในขณะที่ OnBar() และ OnBarClosed() ถูกเรียกใช้เพียงครั้งเดียว คุณสามารถกำหนดตัวจัดการแบบกำหนดเองได้มากเท่าที่คุณต้องการ ซึ่งช่วยให้สามารถเพิ่มตรรกะที่ซับซ้อนได้
หมายเหตุ
ตัวจัดการอีเวนต์แบบกำหนดเองต้องถูกเพิ่มในเมธอด OnStart() ตัวจัดการแบบกำหนดเองต้องรับอาร์กิวเมนต์ของประเภท BarOpenedEventArgs (สำหรับอีเวนต์ BarOpened) หรือ BarClosedEventArgs (สำหรับอีเวนต์ BarClosed)
1 2 3 4 5 6 7 8 9 10 | |
เราจะสร้าง cBot อีกตัวที่ใช้ตัวจัดการแบบกำหนดเองสองตัวสำหรับอีเวนต์ BarOpened เพื่อตอบสนองต่อการกลับตัวที่อาจเกิดขึ้นทั้งขาขึ้นและขาลง
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | |
cBot ตรวจสอบว่าราคาเปิดของแท่งเทียนที่เพิ่งเปิดสูงกว่าราคาปิดของสองแท่งก่อนหน้าหรือไม่ หากเป็นเช่นนั้น คำสั่งซื้อจะถูกส่ง หากราคาเปิดต่ำกว่าราคาปิดของสองแท่งก่อนหน้า คำสั่งขายจะถูกส่ง การใช้ตัวจัดการอีเวนต์แยกกันสองตัวช่วยให้เราสามารถแบ่งตรรกะการเทรดของเราออกเป็นส่วนประกอบย่อย ๆ ซึ่งเราสามารถแก้ไขได้ง่ายในภายหลังหากจำเป็น
ผลลัพธ์ของการ backtesting บนกรอบเวลา D1 ก็เป็นบวกเช่นกัน

สรุป
การเรียนรู้วิธีจัดการอีเวนต์แท่งเทียนอย่างเหมาะสมจะช่วยให้คุณสามารถทำให้ cBot ของคุณทำสิ่งที่คุณต้องการได้อย่างแม่นยำและตามที่คุณต้องการให้ทำ