คุณสมบัติกลยุทธ์
กลยุทธ์ Pine แต่ละอันมีคุณสมบัติหลายอย่างที่กำหนดพฤติกรรม:
- ทุนเริ่มต้น
- สกุลเงินหลัก
- ขนาดออร์เดอร์
- พีระมิด
- คอมมิชชั่น
- ตรวจสอบราคาสำหรับลิมิตออร์เดอร์
- สลิปเพจ
- มาร์จิ้น
- คำนวณใหม่
มีอยู่ในการตั้งค่ากลยุทธ์ในแท็บคุณสมบัติ:
พารามิเตอร์แต่ละตัวที่ระบุในคุณสมบัติของกลยุทธ์สามารถเปลี่ยนแปลงได้โดยการแก้ไขอาร์กิวเมนต์ของการเรียกใช้ฟังก์ชัน strategy() ในสคริปต์ Pine ที่เกี่ยวข้อง:
strategy(title, initial_capital, currency, default_qty_value, default_qty_type, pyramiding, commission_type, commission_value, backtest_fill_limits_assumption, slippage, process_orders_on_close, margin_long, margin_short, calc_on_order_fills, calc_on_every_tick)
มาดูพารามิเตอร์อินพุตแต่ละรายการในเมนูคุณสมบัติและพารามิเตอร์ที่เกี่ยวข้องกันในภาษาไพน์:
1 - ทุนเริ่มต้น (พารามิเตอร์: initial_capital) หมายถึงจำนวนเงินเริ่มต้นสำหรับกลยุทธ์ในการซื้อขาย ในสกุลเงินที่กำหนดไว้ในสกุลเงินหลัก โดยค่าเริ่มต้น ค่านี้จะเท่ากับ 1,000,000 คุณอาจต้องเพิ่มมูลค่านี้เพื่อให้การซื้อขายเกิดขึ้นกับบางสัญลักษณ์
2 - สกุลเงินหลัก (พารามิเตอร์: currency) ระบุสกุลเงินที่ใช้สำหรับการคำนวณ ผลลัพธ์ที่ปรากฏในแท็บผู้ทดสอบกลยุทธ์ (กำไร ขาดทุน ขาดทุน ฯลฯ) จะแสดงเป็นสกุลเงินนี้ ทางเลือกที่มีอยู่คือ:
ค่าเริ่มต้น USD, EUR, AUD, GBP, NZD, CAD, CHF, HKD, JPY, NOK, SEK, SGD, TRY, ZAR หากเลือกตัวเลือกเริ่มต้น กลยุทธ์จะใช้สกุลเงินเริ่มต้นสำหรับสัญลักษณ์นี้และจะไม่มีการแปลงสกุลเงิน
3 - ขนาดออร์เดอร์ (พารามิเตอร์: default_qty_value, default_qty_type). This requires a value and a calculation mode. Note that the calculated values can be subject to constraints due to the minimum tradable quantities for the symbol:
- Contracts (อากิวเมต์: strategy.fixed) - กลยุทธ์จะเข้าสู่ด้วยจำนวนสัญญา/หุ้น/ล็อตที่กำหนด
- จำนวนเงินในสกุลเงิน (อาร์กิวเมนต์: Strategy.cash) - กลยุทธ์จะป้อนจำนวนเงินที่ระบุในสกุลเงินหลัก
- เปอร์เซ็นต์ของอิควิตี้ (อาร์กิวเมนต์: Strategy.percent_of_equity) - ขนาดตำแหน่งจะคำนวณเป็นเปอร์เซ็นต์ของอิควิตี้ที่มีอยู่เมื่อเปิดการซื้อขาย
4 - พีระมิด (พารามิเตอร์: pyramiding) ระบุจำนวนสูงสุดของรายการต่อเนื่องที่อนุญาตในทิศทางเดียวกัน เมื่อปิดใช้พีระมิด กลยุทธ์สามารถเปิดสถานะซื้อหรือขายได้เพียงตำแหน่งเดียว แม้ว่าจะตรงตามเงื่อนไขการเข้า พีระมิดมีผลกับรายการที่สร้างโดยใช้ฟังก์ชัน Strategy.entry() เท่านั้น ไม่มีผลกับคำสั่งที่สร้างโดยใช้ Strategy.order()
5 - คอมมิชชั่น (พารามิเตอร์: commission_type, commission_value). เป็นจำนวนเงินที่จ่ายในค่าธรรมเนียมการซื้อขายสำหรับการซื้อขายแต่ละครั้ง ต้องระบุค่าและโหมดการคำนวณ โปรดทราบว่าจะมีการคิดค่าคอมมิชชันกับทั้งการเข้าและออก และเมื่อใช้เปอร์เซ็นต์ ค่าคอมมิชชันที่คำนวณจะแตกต่างกันไปตามมูลค่าของธุรกรรม:
- เปอร์เซ็นต์ของมูลค่าธุรกรรม (อากิวเมต์: strategy.commission.percent) - กำหนดค่าคอมมิชชั่นในแต่ละคำสั่งเท่ากับเปอร์เซ็นต์ที่ระบุ
- สกุลเงินต่อสัญญา (อากิวเมต์: strategy.commission.cash_per_contract) - เรียกเก็บค่าคอมมิชชั่นในแต่ละสัญญา
- สกุลเงินต่อออร์เดอร์ (อากิวเมต์: strategy.commission.cash_per_order) - กำหนดค่าคอมมิชชั่นในแต่ละคำสั่ง
6 - ตรวจสอบราคาสำหรับลิมิตออร์เดอร์ (พารามิเตอร์: backtest_fill_limits_assumption) ทำให้เงื่อนไขในการเข้าสู่ตำแหน่งโดยใช้คำสั่งจำกัดที่เข้มงวดมากขึ้น โดยค่าเริ่มต้น ค่านี้คือ 0 กล่าวคือ คำสั่งจำกัดจะถูกกรอกในข้อมูลย้อนหลังทันทีที่ราคาที่ระบุในคำสั่งนั้นถึง หากพารามิเตอร์ไม่ใช่ศูนย์ คำสั่งจำกัดสามารถเข้าสู่ตำแหน่งภายในแถบได้ก็ต่อเมื่อราคาตลาดเกินระดับของคำสั่งจำกัดตามจำนวนขีดที่ระบุ
7 - สลิปเพจ (พารามิเตอร์: slippage) ระบุค่าในทิกที่จะเพิ่มไปยังราคาเติมของตลาดหรือสต๊อปออร์เดอร์ สามารถใช้บัญชีสำหรับสเปรด
8 - มาร์จินสำหรับโพสิชั่น Long/Short (พารามิเตอร์: margin_long, margin_short) ระบุมาร์จิ้นสำหรับการซื้อขายแต่ละครั้ง กล่าวคือ เปอร์เซ็นต์ของโพซิชั่นที่ผู้ค้าต้องลงทุน ตัวอย่างเช่น หากมาร์จิ้นสำหรับโพซิชั่น long ตั้งไว้ที่ 25% เทรดเดอร์จะต้องมีเงินทุนเพียงพอที่จะครอบคลุม 25% ของการเทรดที่เปิดอยู่ และอาจใช้จ่ายสูงถึง 400% ของอิควิตี้ของพวกเขาในทุกการเทรด
หากมีการเปิดการซื้อขายและเริ่มสูญเสียเงินในขอบเขตที่เงินทุนของผู้ซื้อขายไม่เพียงพอที่จะครอบคลุมส่วนของการซื้อขาย มาร์จิน คอล จะเกิดขึ้นและบังคับให้ชำระส่วนหนึ่งของสถานะเดิม จำนวนหน่วยที่แน่นอนที่จะชำระบัญชีคือ 4 เท่าของจำนวนเงินที่ใช้ในการชดเชยการสูญเสีย คำนวณโดยใช้อัลกอริทึมต่อไปนี้:
1. คำนวณเงินที่ใช้ไป จำนวนเงินที่ผู้ค้าใช้ในการเปิดตำแหน่ง
ขนาดโพสิชั่น * ค่าเข้า
2. คำนวณมูลค่าตลาดของหลักทรัพย์ (MVS).
ขนาดโพสิชั่น * ราคาปัจจุบัน
3. คำนวณกำไรที่เปิดอยู่ หากทิศทางการค้าสั้นและ Open Profit เป็นจำนวนบวก ผลลัพธ์ยังคงเป็นค่าลบ ดังนั้นเราจะคูณค่าสัมบูรณ์ของการคำนวณของเราด้วย -1
ABS(MVS - เงินที่ใช้ไป) * -1
4. คำนวณอิควิตี้ นั่นคือ เงินที่เทรดเดอร์มีได้ในขณะนั้น
ทุนเริ่มต้น + กำไรสุทธิ + กำไรที่เปิดอยู่
5. แปลงเปอร์เซ็นต์มาร์จิ้นเป็นอัตราส่วนมาร์จิ้น
เปอร์เซ็นต์มาร์จิ้น / 100
6. คำนวณมาร์จิ้น กล่าวคือ จำนวนเงินที่แน่นอนที่จำเป็นเพื่อให้ครอบคลุมส่วนของตำแหน่งที่เปิดอยู่
MVS * อัตราส่วนมาร์จิ้น
7. คำนวณเงินทุนที่มีอยู่ กล่าวคือ จำนวนเงินที่สูญเสียที่เทรดเดอร์ไม่สามารถครอบคลุมด้วยอิควิตี้ปัจจุบันของพวกเขา
อิควิตี้ - มาร์จิ้น
8. คำนวณจำนวนเงินทั้งหมดที่เทรดเดอร์สูญเสียไป
กองทุนที่ใช้ได้ / อัตราส่วนมาร์จิ้น
9. คำนวณจำนวนหน่วยที่ผู้ค้าจะต้องขายเพื่อให้ครอบคลุมการสูญเสีย ค่าจะถูกตัดให้เหลือจุดทศนิยมเดียวกันกับขนาดสัญญาขั้นต่ำสำหรับสัญลักษณ์ปัจจุบัน
TRUNCATE(ขั้นตอนที่ #8 / ราคาปัจจุบัน)
10. คำนวณจำนวนหน่วยที่โบรกเกอร์จะขายเพื่อชดเชยการสูญเสีย โบรกเกอร์จำลองของเราขายหน่วยได้มากถึง 4 เท่าตามความจำเป็นเพื่อให้แน่ใจว่าการเรียกหลักประกันจะไม่เกิดขึ้นอย่างต่อเนื่องหากการขาดทุนยังคงดำเนินต่อไป ค่านี้จะเป็นค่าบวกสำหรับการเทรดชอร์ต เนื่องจากโบรกเกอร์ซื้อหน่วยเพื่อชดเชยการขาดทุนแทนที่จะขาย
ขั้นตอนที่ #9 * 4
เพื่อตรวจสอบการคำนวณโดยละเอียด ให้เพิ่ม Supertrend Strategy ในตัวลงในชาร์ตNASDAQ:TSLA บนไทม์เฟรม 1 วัน ตั้งค่าขนาดคำสั่งเป็น 300% ของอิควิตี้ และมาร์จิ้นสำหรับสถานะซื้อเป็น 25%
รายการแรกของเราเกิดขึ้นจากการเปิดแท่งเมื่อวันที่ 16 กันยายน 2010 เราซื้อ 682438 หน่วย (ขนาดตำแหน่ง) ในราคา 4.43 USD (ราคาแรกเข้า) จากนั้นเมื่อวันที่ 23 ก.ย. 2553 เมื่อราคาอยู่ที่ 3.9 (ราคาปัจจุบัน) จำนวน 111052 หน่วยถูกบังคับชำระบัญชีด้วยมาร์จิน คอล
1. เงินที่ใช้ไป: 682438 * 4.43 = 3023200.34
2. MVS: 682438 * 3.9 = 2661508.2
3. เปิดกำไร: −361692.14
4. ส่วนของผู้ถือหุ้น: 1000000 + 0 − 361692.14 = 638307.86
5. อัตรามาร์จิน: 25 / 100 = 0.25
6. มาร์จิ้น: 2661508.2 * 0.25 = 665377.05
7. กองทุนที่มีอยู่: 638307.86 - 665377.05 = -27069.19
8. เงินสูญ: -27069.19 / 0.25 = -108276.76
9. หุ้นเพื่อชดเชยการขาดทุน: TRUNCATE(-108276.76 / 3.9) = TRUNCATE(-27763.27) = -27763
10. ขนาดมาร์จินคอล: -27763 * 4 = - 111052
9 - คำนวณตัวเลือกใหม่ ระบุว่าควรคำนวณกลยุทธ์ใหม่บ่อยเพียงใด โดยค่าเริ่มต้น กลยุทธ์จะได้รับการคำนวณใหม่ที่ส่วนท้ายของแต่ละแท่ง แต่ด้วยการใช้ตัวเลือกด้านล่าง ก็สามารถคำนวณใหม่ได้เช่นกัน:
- หลังจากสั่งซื้อเต็มแล้ว (พารามิเตอร์: calc_on_order_fills) - อนุญาตให้กลยุทธ์ดำเนินการคำนวณคำสั่งซื้อภายในแถบเพิ่มเติมทันทีหลังจากเติมคำสั่งซื้อ การคำนวณพิเศษนั้นเกิดขึ้นบนแถบประวัติและเรียลไทม์
- ในทุกๆ ทิก (พารามิเตอร์: calc_on_every_tick). โดยค่าเริ่มต้น กลยุทธ์จะคำนวณเฉพาะเมื่อปิดแท่งเรียลไทม์ พารามิเตอร์นี้ช่วยให้กลยุทธ์คำนวณในการอัพเดทแต่ละครั้งของแท่งกราฟแบบเรียลไทม์ เช่นเดียวกับอินดิเคเตอร์ โปรดทราบว่าข้อมูลทิกจะหายไปเมื่อชาร์ตถูกรีเฟรช ดังนั้นกลยุทธ์ที่ใช้ตัวเลือกนี้จะทำการรีเพนต์ใหม่ พารามิเตอร์นี้ไม่ส่งผลต่อพฤติกรรมของกลยุทธ์ในแท่งอดีต นอกจากนี้ โปรดทราบด้วยว่ากลยุทธ์ที่ใช้คุณสมบัตินี้จะไม่แสดงผลลัพธ์ที่เหมือนจริงในแท่งอดีต์ เนื่องจากไม่มีข้อมูลทิก