สร้าง cBot ที่ใช้ CRTIndicator เพื่อกำหนดระดับหยุดขาดทุนและทำกำไร
แนวคิดคือการใช้ระดับ CRT (สูง, กลาง, ต่ำ) ของแท่งเทียนก่อนหน้า (ระบุโดย CandleIndex) เพื่อกำหนดหยุดขาดทุนและทำกำไรสำหรับการเทรดใหม่
ขั้นตอน:
- เราจะสร้าง cBot ที่เปิดการเทรด (ซื้อหรือขาย) ตามเงื่อนไขบางอย่าง (ซึ่งเราจะกำหนดเป็นพารามิเตอร์สำหรับการทดสอบ)
- เราจะใช้ CRTIndicator เพื่อรับระดับจากแท่งเทียนก่อนหน้า (ดัชนีแท่งเทียนถูกตั้งโดยผู้ใช้)
- สำหรับการเทรดซื้อ เราจะตั้งหยุดขาดทุนที่ CRT ต่ำและทำกำไรที่ CRT สูงของแท่งเทียนอ้างอิง
- สำหรับการเทรดขาย เราจะตั้งหยุดขาดทุนที่ CRT สูงและทำกำไรที่ CRT ต่ำของแท่งเทียนอ้างอิง
อย่างไรก็ตาม โปรดทราบว่า CRTIndicator ที่เรามีจะคำนวณระดับสำหรับแต่ละแท่งเทียนและแสดงผลเท่านั้น
เราจำเป็นต้องเข้าถึงตัวบ่งชี้จาก cBot และรับค่าของแท่งเทียนที่เราสนใจ
มาสร้างแบบ cBot กันเถอะ:
พารามิเตอร์:
- CandleIndex: แท่งเทียนก่อนหน้าที่จะใช้ (0 = ปัจจุบัน, 1 = ก่อนหน้า, เป็นต้น)
- TradeType: เราสามารถตั้งพารามิเตอร์เพื่อเลือกระหว่าง ซื้อ และ ขาย สำหรับการทดสอบ หรือใช้สัญญาณ (เช่น การตัดกันของค่าเฉลี่ยเคลื่อนที่) เพื่อกำหนด
เพื่อความเรียบง่าย ให้ตั้งพารามิเตอร์เพื่อเลือกประเภทการเทรด
แต่โปรดทราบ: ในการเทรดจริง เราจะใช้เงื่อนไขบางอย่างเพื่อเข้าเทรด เราจะสร้าง cBot ง่ายๆ ที่เปิดการเทรดในแท่งเทียนปัจจุบันหากไม่มีตำแหน่งเปิดอยู่
เราจะสมมติว่าเรากำลังเทรดในกรอบเวลาของกราฟ
ขั้นตอนใน cBot:
- ตรวจสอบว่ามีตำแหน่งเปิดอยู่หรือไม่ หากไม่มี ให้พิจารณาเปิดตำแหน่ง
- รับค่าจาก CRTIndicator สำหรับ CandleIndex ที่ระบุ (ซึ่งเป็นแท่งเทียนในอดีตเมื่อเทียบกับปัจจุบัน)
- สำหรับการเทรดซื้อ:
หยุดขาดทุน = CRT ต่ำของแท่งเทียนอ้างอิง
ทำกำไร = CRT สูงของแท่งเทียนอ้างอิง - สำหรับการเทรดขาย:
หยุดขาดทุน = CRT สูงของแท่งเทียนอ้างอิง
ทำกำไร = CRT ต่ำของแท่งเทียนอ้างอิง
อย่างไรก็ตาม โปรดทราบว่าตัวบ่งชี้คำนวณสำหรับแต่ละดัชนี เรากำลังแสดงค่าซ้ำกันสำหรับทุกดัชนี (เพราะเราใช้การเลื่อน CandleIndex คงที่)
แต่ใน cBot เราต้องการรับระดับจากตัวบ่งชี้ในเวลาปัจจุบัน (แท่งเทียนที่เสร็จสมบูรณ์ล่าสุด) สำหรับ CandleIndex ที่ระบุ
สำคัญ: เมธอด Calculate ของตัวบ่งชี้ถูกเรียกสำหรับแต่ละดัชนี และมันเก็บค่าของแท่งเทียนอ้างอิง (ดัชนี - CandleIndex) ที่ดัชนีปัจจุบัน
ดังนั้นถ้าเราต้องการรับระดับ CRT สำหรับแท่งเทียนในอดีตเฉพาะ เราสามารถอ่านชุดผลลัพธ์ของตัวบ่งชี้ที่ดัชนีของแท่งเทียนนั้นได้ไหม?
แต่โปรดทราบ: ผลลัพธ์ของตัวบ่งชี้จะสอดคล้องกับดัชนีปัจจุบัน จริงๆ แล้ว ตัวบ่งชี้แสดงค่าซ้ำกันสำหรับทุกแท่งเพราะเรากำหนด:
CRTHigh[index] = crtHigh; // โดยที่ crtHigh คือค่าสูงของแท่งเทียน (index - CandleIndex)
ดังนั้นถ้าเราอยู่ที่ดัชนี 100 และ CandleIndex=1 เรากำลังรับค่าสูงของดัชนี 99 และแสดงที่ดัชนี 100
ซึ่งหมายความว่าถ้าเราต้องการระดับ CRT สำหรับแท่งเทียนที่อยู่ห่างไป CandleIndex แท่ง เราสามารถรับผลลัพธ์ของตัวบ่งชี้ที่แท่งปัจจุบัน (ดัชนี) และนั่นจะให้ระดับจากแท่งเทียนที่ห่างไป CandleIndex แท่ง
แต่รอหน่อย ใน cBot เราจะรัน OnBar หรือ OnTick เราสนใจแท่งที่เสร็จสมบูรณ์ล่าสุด (ดัชนี = MarketSeries.Close.Count - 2) และแท่งที่เราต้องการคือ (ดัชนีปัจจุบัน - CandleIndex)
อีกทางเลือกหนึ่ง เราสามารถเปลี่ยนตัวบ่งชี้ให้แสดงระดับที่ดัชนีเดียวกับแท่งเทียนอ้างอิง แต่เราต้องเลื่อนกราฟโดย CandleIndex
อย่างไรก็ตาม ตัวบ่งชี้ปัจจุบันถูกออกแบบมาเพื่อแสดงระดับที่แท่งปัจจุบันจากแท่งก่อนหน้า ดังนั้นถ้าเราตั้ง CandleIndex=1 ที่แต่ละแท่งเราจะแสดงระดับจากแท่งก่อนหน้า
วิธีที่เราจะใช้ใน cBot:
เราจะเพิ่มตัวบ่งชี้ลงใน cBot แล้วรับค่าของแท่งล่าสุด (ดัชนี = MarketSeries.Close.Count - 1) ซึ่งจะให้ระดับจากแท่งที่ห่างไป CandleIndex แท่ง
ตัวอย่าง:
ดัชนีแท่งปัจจุบัน = แท่งสุดท้าย (ดัชนี = MarketSeries.Close.Count - 1)
ดังนั้นผลลัพธ์ของตัวบ่งชี้ที่ดัชนีนี้ (CRTHigh[MarketSeries.Close.Count-1]) คือค่าสูงของแท่ง (ดัชนีปัจจุบัน - CandleIndex)
แต่โปรดทราบ: เมธอด Calculate ของตัวบ่งชี้ถูกเรียกสำหรับแต่ละแท่งในอดีตและแต่ละแท่งใหม่ ดังนั้นชุดผลลัพธ์สำหรับแท่งสุดท้ายจะมีค่าที่เราต้องการ
มารหัส cBot กันเถอะ:
เราจะมีพารามิเตอร์:
[Parameter("Candle Index", DefaultValue = 1, MinValue = 0)]
public int CandleIndex { get; set; }
[Parameter("Trade Type", DefaultValue = TradeType.Buy)]
public TradeType SelectedTradeType { get; set; }
[Parameter("Volume (Lots)", DefaultValue = 1, MinValue = 0.01, Step = 0.01)]
public double Volume { get; set; }
เราจะสร้างอินสแตนซ์ของ CRTIndicator ด้วย
ขั้นตอนใน OnBar:
ถ้าไม่มีตำแหน่ง ให้เปิดตำแหน่งใหม่โดยตั้งหยุดขาดทุนและทำกำไรจากผลลัพธ์ของตัวบ่งชี้สำหรับแท่งปัจจุบัน (ซึ่งสอดคล้องกับระดับจากแท่งที่ห่างไป CandleIndex แท่ง)
อย่างไรก็ตาม โปรดทราบ: ผลลัพธ์ของตัวบ่งชี้สำหรับแท่งปัจจุบัน (แท่งสุดท้าย) ถูกตั้งเป็นระดับของ (ดัชนีแท่งปัจจุบัน - CandleIndex) แต่เมื่อเราอยู่ในช่วงเริ่มต้น เราต้องแน่ใจว่ามีแท่งเพียงพอ