สารบัญบทความ
- หลักฐานและขอบเขต
- ภาพประกอบ
- กระบวนการ
- ขอบเขตแบบเลื่อนช่วงไม่ใช่จุดสวิงที่ยืนยันแล้ว
- สร้างข้อมูลอ้างอิงก่อนจัดประเภทเหตุการณ์
- ขอบเขตหนึ่งสามารถสร้างผลลัพธ์ที่ถูกต้องได้แตกต่างกัน
- ระยะเวลาการสั่งซื้อ การยกเลิก และการหมดอายุ
- ตัวกรองปริมาณอาจเลือกทั้งการเคลื่อนไหวแรงและการจับคู่ที่มีต้นทุนสูงขึ้น
- ทดสอบการคำนวณอ้างอิงก่อนใช้กลยุทธ์
- ข้อผิดพลาดที่พบบ่อย
- รายการตรวจสอบเชิงปฏิบัติ
- คำถามที่พบบ่อย
- แหล่งวิจัย
หลักฐานและขอบเขต
แหล่งข้อมูลสนับสนุนสูตรช่องทาง ข้อมูลการเปลี่ยนแปลง และการกำหนดเวลาการสั่งซื้อจำลอง การอ้างอิงถึงการติดตามแนวโน้มในอดีตไม่ได้ถูกนำมาใช้เป็นหลักฐานว่าจุดเข้า ปริมาณขั้นต่ำ และจุดออกที่เสนอไว้ในที่นี้จะทำกำไรได้
ขั้นตอนปฏิบัติ
- สะสมแท่ง Nใช้ข้อมูลการสังเกตที่เสร็จสมบูรณ์แล้วก่อนหน้าแท่งปัจจุบัน
- ตรึง U และ Dบันทึกราคาและเวลาที่ผ่านไปนับจากเกิดจุดสุดขั้วแต่ละจุด
- จำแนกประเภทของเหตุการณ์แยก breakout ที่ยืนยันด้วยราคาปิดจากการออกนอกขอบเขตแล้ว reclaim กลับ
- ใช้เงื่อนไขปริมาณซื้อขายใช้เฉพาะตัวแปรที่ทราบในเวลาส่งคำสั่ง
- จำลองการดำเนินการใช้กฎเข้า สต็อป และหมดอายุที่ลงทะเบียนไว้ล่วงหน้า
ขอบเขตแบบเลื่อนช่วงไม่ใช่จุดสวิงที่ยืนยันแล้ว
Donchian ใช้ค่าสุดขั้วของการสังเกตการณ์ N ครั้ง; TradingView อธิบายแถบบนและล่างและจุดกึ่งกลาง [1] ต่างจาก pivot สองด้าน ไม่จำเป็นต้องมีการกลับตัวในภายหลัง หน้าต่างก่อนหน้าที่เสร็จสมบูรณ์แล้วจะทราบได้เมื่อแท่งเทียนถัดไปเริ่มต้นขึ้น ในระหว่างแนวโน้ม ขอบบนของมันสามารถสูงขึ้นต่อไปได้โดยไม่ต้องทำหน้าที่เป็นแนวต้านที่ยึดเหนี่ยวไว้
นิยามเชิงสาเหตุที่เสนอคือ U[t]=max(H[t−N:t]), D[t]=min(L[t−N:t]), M[t]=(U[t]+D[t])/2 โดยไม่รวมจุดปลายบนของส่วนนั้น ดังนั้นหน้าต่างจึงสิ้นสุดที่ t−1 หาก H[t] รวมอยู่ใน U[t] เงื่อนไข H[t]>U[t] จะเป็นไปไม่ได้ตามโครงสร้าง
ความแตกต่างนี้มีผลต่อทั้งการทดลอง อินดิเคเตอร์อาจแสดงแถบที่รวมแท่งกำลังก่อตัวเพื่อการมองเห็น แต่กลยุทธ์ต้องระบุว่าตนใช้ภาพข้อมูลย้อนหลัง ณ เวลาใด บันทึกราคาและเวลาของจุดสุดขั้วที่เป็นฐาน เพื่อแยกขอบเขตที่เพิ่งเกิดจากจุดสุดขั้วเก่าที่กำลังจะหลุดจากช่วงคำนวณ
สร้างข้อมูลอ้างอิงก่อนจัดประเภทเหตุการณ์
ใน pandas การเลื่อนค่าจะแยกหน้าต่างอ้างอิงออกจากแถวที่กำลังประเมิน [2] การใช้งานหนึ่งคือ high.shift(1).rolling(N).max() การเลื่อนดัชนีด้วย freq ไม่ใช่สิ่งทดแทนการเลื่อนค่าที่สังเกตได้สัมพันธ์กับแถวการตัดสินใจ ต้องใช้หน้าต่างที่ถูกต้องแบบเต็มแทนที่จะอนุญาตให้จำนวนการสังเกตเปลี่ยนแปลงโดยไม่แจ้งให้ทราบล่วงหน้า
แบบพื้นฐานจำแนกราคาปิดที่ยืนยันแล้วและผ่านขอบแถบพร้อมบัฟเฟอร์ b=max(2 ticks,0.1×ATR[t−1]); N=20 และ 0.1 เป็นค่าที่เสนอเพื่อการวิจัย การจำแนกทันทีแบบแท่งเดียวให้คำนวณระดับอ้างอิงจากช่วงก่อนหน้าใหม่ทุกแท่ง ส่วนกรณี sweep แล้ว reclaim หลายแท่ง ให้ตรึงระดับเดิมตั้งแต่เริ่มสร้างชุดสัญญาณที่รอพิจารณา
มิฉะนั้นแท่งที่เคลื่อนออกนอกขอบเขตจะเข้าไปอยู่ในช่วงคำนวณถัดไปและทำให้ขอบเขตที่ต้องกลับเข้ามาเปลี่ยนไป การกลับต่ำกว่าขอบเขตใหม่อาจเป็นคนละเหตุการณ์กับการกลับต่ำกว่าระดับเดิมที่ถูกทะลุ เก็บ candidate_id, frozen_level, เวลาอ้างอิง และเวลาหมดอายุ เพื่อให้ทดสอบสมมติฐานเดิมตลอดชุดสัญญาณ
U = max(H[t-N:t]); D = min(L[t-N:t])
b = max(2*tick, 0.1*ATR[t-1])
if no_active_setup and C[t] > U+b:
emit('up_breakout', signal_at=t, frozen_level=U)
if no_active_setup and H[t] > U+b and C[t] < U:
emit('upper_reclaim', signal_at=t, frozen_level=U)
# These labels represent different hypotheses.
# A close-confirmed order can be processed only after close t.
ขอบเขตหนึ่งสามารถสร้างผลลัพธ์ที่ถูกต้องได้แตกต่างกัน
ตัวอย่างสังเคราะห์: แท่งเทียน 20 ก่อนหน้านี้มี U=105, D=99 และ ATR=1 โดยมี tick=0.01 และ b=0.10 แท่งเทียนปัจจุบันที่มี H=106 และ C=105.4 ทำให้เกิดการทะลุขึ้น (breakout) ข้อเสนอซื้อเมื่อเปิดครั้งต่อไปที่ 105.5 ตั้งจุดหยุดขาดทุนที่ 103.9 และจุดทำกำไรที่ 108.7 มีความเสี่ยงด้านราคาเริ่มต้น 1.6 จุด และจุดทำกำไรก่อนหักค่าใช้จ่าย 2R
เส้นทางความล้มเหลว: หลังจากเปิดที่ 105.5 ราคาตกลงมาที่ 103.8 จุดหยุดขาดทุนอาจถึงแล้ว แม้ว่าราคาปิดที่ทำให้เกิดการทะลุแนวต้านจะตรงตามเงื่อนไขการตรวจจับทุกประการก็ตาม หากแท่งราคาที่ทำให้เกิดการทะลุแนวต้านเดิมเป็น H=106 และ C=104.7 มันจะไม่ใช่การทะลุแนวต้านปิด มันอาจเป็นการเรียกคืนค่าสูงสุดสำหรับกลยุทธ์ขายชอร์ตที่ระบุไว้แยกต่างหาก อย่าเปลี่ยนชื่อการทะลุแนวต้านที่ขาดทุนเป็นการกวาดล้างหลังจากเห็นการขาดทุนแล้ว
กรณีที่ซับซ้อนกว่านั้นเกิดขึ้นเมื่อราคาสูงสุดเดิมของ 105 หลุดออกจากกรอบ N-bar และ U ลดลงมาอยู่ที่ 104 ราคาที่ 104.5 สามารถทะลุผ่านช่องราคาได้โดยไม่ต้องทำราคาสูงสุดใหม่ในรอบการซื้อขายล่าสุด นี่คือเหตุการณ์ที่ถูกต้องตามหลักการของหน้าต่างเลื่อน (rolling-window) การยกเว้นเหตุการณ์นี้จำเป็นต้องมีเงื่อนไขเพิ่มเติมที่ลงทะเบียนไว้เกี่ยวกับจุดเริ่มต้นหรือการเคลื่อนไหวของระดับอ้างอิง
ทดสอบความเท่าเทียมกันอย่างรอบคอบ การปิดที่ U+b อย่างแม่นยำจะถูกปฏิเสธโดยเงื่อนไขมากกว่าที่เข้มงวดในแบบจำลองพื้นฐานนี้ การปัดเศษควรเกิดขึ้นภายใต้ข้อตกลงที่กำหนดไว้ก่อนส่งคำสั่ง มิฉะนั้น สัญญาณรบกวนแบบจุดลอยตัวอาจตัดสินได้ว่าการสังเกตการณ์อยู่เหนือหรืออยู่บนขอบเขตอย่างแม่นยำ
ระยะเวลาการสั่งซื้อ การยกเลิก และการหมดอายุ
TradingView แยกการสร้างคำสั่งหลังแท่งปิดออกจากการจับคู่ซื้อขายที่ tick ถัดไปที่มีให้ในตัวจำลอง [3] แบบยืนยันด้วยราคาปิดจึงต้องใช้ราคาที่ซื้อขายได้ภายหลัง พร้อมสเปรดและสลิปเพจ คำสั่ง buy-stop ที่รออยู่เหนือ U เป็นอีกแบบจำลอง: อาจจับคู่ระหว่างแท่งแล้วราคากลับทิศก่อนแท่งปิด ราคาปิดที่ไม่เอื้ออำนวยไม่สามารถลบการจับคู่ที่เกิดแล้วได้ย้อนหลัง
ตัวเลือกการออกมี stop ตามโครงสร้างที่ตรึงไว้, trailing stop ตามขอบล่างของช่องราคาที่ใช้ช่วงคำนวณสั้นกว่า หรือการออกตามเวลา เลือกแบบเรียบง่ายก่อนประเมิน หากเข้าด้วย retest ให้กำหนดระยะที่ราคาย้อนกลับได้ ปฏิกิริยาที่เข้าเกณฑ์ และอายุคำสั่งเป็นจำนวนแท่ง หากไม่มี retest ให้บันทึกว่าเสียโอกาส ไม่ใช่เปลี่ยนไปไล่ราคาโดยอัตโนมัติ
แท่งที่แตะทั้ง stop และเป้าหมายต้องใช้ข้อมูลละเอียดขึ้นหรือกฎลำดับเหตุการณ์แบบระมัดระวังที่ประกาศไว้ การทดสอบ gap ต้องเปลี่ยนราคาจับคู่จริงและความเสี่ยงตามสถานการณ์ โดยไม่เปลี่ยนเวลาสัญญาณเดิมหรือระดับอ้างอิงที่ตรึงไว้ การปฏิเสธไม่ส่งคำสั่งเพราะเงื่อนไขการดำเนินการกับคำสั่งที่จับคู่แล้วขาดทุนเป็นคนละผลลัพธ์
จุดหยุดการขาดทุนแบบเคลื่อนที่ (Rolling Trailing Stop) จำเป็นต้องมีกฎการกำหนดเวลาด้วยเช่นกัน หากแถบล่างของเมื่อวานอัปเดตหลังจากปิดตลาดวันนี้ จุดหยุดการขาดทุนใหม่จะไม่สามารถป้องกันการเคลื่อนไหวภายในแท่งเทียนก่อนหน้านี้ได้ บันทึกการแก้ไขจุดหยุดการขาดทุนแต่ละครั้งและเวลาการเปิดใช้งาน แทนที่จะใช้ค่า Trailing Stop สุดท้ายย้อนหลังไปตามแท่งเทียน
ตัวกรองปริมาณอาจเลือกทั้งการเคลื่อนไหวแรงและการจับคู่ที่มีต้นทุนสูงขึ้น
ตัวกรอง breakout ที่เสนอใช้ RVOL≥1.5 เทียบกับประวัติช่วงเวลาซื้อขายที่เทียบเคียงกัน เมื่อตัดสินใจหลังแท่งปิดแล้วจึงใช้ปริมาณทั้งหมดของแท่งสัญญาณได้ หากส่งคำสั่ง stop ให้รอไว้ก่อนหน้านั้น การตัดสินใจว่าจะส่งคำสั่งหรือไม่ต้องใช้เฉพาะปริมาณที่สังเกตได้เมื่อส่ง ปริมาณเต็มแท่งที่ทราบหลังจับคู่แล้วไม่อาจใช้อนุมัติการเข้าย้อนหลัง
แยกแบบใช้ราคาอย่างเดียว แบบกำหนดสภาพคล่องขั้นต่ำ และแบบกรองปริมาณผิดปกติ เพราะตอบคนละคำถามระหว่างความสามารถในการซื้อขายพื้นฐานกับคุณค่าข้อมูลเพิ่มเติม กลุ่มที่มี RVOL สูงอาจเคลื่อนไหวไกลกว่า แต่มี gap และสเปรดใหญ่ขึ้นด้วย การตอบสนองของราคาก่อนหักต้นทุนจึงไม่เพียงพอ
เปรียบเทียบค่าคาดหวังสุทธิ การเปิดรับความเสี่ยงในตลาด และจำนวนโอกาสที่ตัดทิ้ง ใช้งบความเสี่ยงเท่ากันในแต่ละแบบ แล้วรายงานตามสภาพคล่องหรือช่วงเวลาของวันโดยกำหนดกลุ่มจากข้อมูลอดีต อัตราชนะสูงขึ้นในกลุ่มเล็กไม่ได้ทำให้ผลตอบแทนหรือ drawdown ของพอร์ตดีขึ้นโดยอัตโนมัติ
กรณี reclaim หลายแท่ง ให้เก็บปริมาณซื้อขายระหว่างออกนอกขอบเขตและระหว่างกลับเข้าขอบเขตแยกกัน อาจศึกษาอัตราส่วนนี้ได้ แต่หากช่วงเวลายาวไม่เท่ากันต้องปรับมาตรฐาน ข้อมูล OHLCV รวมบอกไม่ได้ว่าธุรกรรมเกิดตรงระดับ Donchian หรือที่ราคาอื่นภายในแท่งที่มีช่วงกว้าง
ทดสอบการคำนวณอ้างอิงก่อนใช้กลยุทธ์
ลงทะเบียนตารางการพัฒนาขนาดเล็ก เช่น N=10,20,40 บันทึกราคาของแถบราคา เวลาที่เกิดจุดสูงสุดและต่ำสุด และอายุของระดับราคาในทุกสัญญาณ รวมถึงว่าระดับราคาเปลี่ยนแปลงเนื่องจากจุดสูงสุดและต่ำสุดเก่าหมดอายุหรือไม่ วิธีนี้ช่วยแยกพฤติกรรมทางเศรษฐกิจออกจากผลกระทบจากหน้าต่างเชิงกล และทำให้การตีความความไวต่อการเปลี่ยนแปลงง่ายขึ้น
ทดสอบเหตุและผลโดยเปลี่ยน H[t] แต่คงข้อมูลก่อนหน้านั้นไว้: U[t] ต้องไม่เปลี่ยน ส่วนการเปลี่ยน H[t−1] อาจเปลี่ยน U[t] ได้ เพิ่มกรณีทดสอบแท่งหาย วันหยุด gap ตอนเปิด และข้อมูลค้าง แล้วเทียบการคำนวณแบบกลุ่มกับแบบรับข้อมูลต่อเนื่อง เพื่อจับข้อผิดพลาดที่เลื่อนดัชนีไปหนึ่งตำแหน่งแม้กราฟจะดูสมเหตุผล
หลังจากนั้นจึงประเมินช่วงนอกตัวอย่างที่ล็อกไว้ พร้อมอัตราหมุนเวียนการซื้อขาย ค่าธรรมเนียม การเปิดรับความเสี่ยง drawdown และความไวต่อเงื่อนไขการจับคู่ หากเลือกกลุ่มข่าวเฉพาะหรือช่วงเปิด–ปิดตลาด ให้นับเป็นการทดลองวิจัยด้วย รายงานชุดสัญญาณที่ล้มเหลวและ retest ที่ไม่เกิด ไม่ใช่เฉพาะธุรกรรมสำเร็จจากขอบเขตที่เอื้ออำนวย
ข้อผิดพลาดที่พบบ่อย
ปล่อยให้ระดับอ้างอิงไล่ตามการออกนอกขอบเขต
การกลับเข้าภายในแถบที่เพิ่งปรับใหม่อาจต่างจากการกลับเข้าขอบเขตเดิมที่ถูกทะลุ
สับสนการแตะระดับกับการข้ามระดับ
ราคาเท่ากับ U ไม่ถือว่า breakout โดยอัตโนมัติ ต้องกำหนดกฎปัดเศษตาม tick และกฎเปรียบเทียบไว้ล่วงหน้า
มองข้ามต้นทุนซื้อขายถี่จากช่วงคำนวณสั้น
ค่า N ที่น้อยลงสามารถสร้างสัญญาณที่เกิดขึ้นบ่อยครั้ง ซึ่งต้นทุนในการดำเนินการจะมากกว่ากำไรขั้นต้น
รายการตรวจสอบก่อนใช้วิธีนี้
ทำเครื่องหมายแต่ละข้อหลังตรวจสอบกับข้อมูลของคุณแล้ว ความคืบหน้าจะบันทึกในเบราว์เซอร์นี้ แต่ไม่ได้รับรองว่ากลยุทธ์ทำกำไรได้
คำถามที่พบบ่อย
ควรขายเมื่อราคาแตะแถบบนหรือไม่?
ไม่มีข้อสรุปทั่วไป การสวนทางที่ขอบเขตโดยคาดว่าราคาจะกลับ กับการซื้อเมื่อ breakout เป็นสมมติฐานตรงข้ามที่ต้องกำหนดและทดสอบแยกกัน
Donchian ใช้แทน pivot ได้หรือไม่?
มันสามารถให้ข้อมูลอ้างอิงการทะลุแนวต้านได้ แต่ไม่ได้ให้การยืนยันการกลับตัวด้านขวาหรือลำดับการแกว่งตัวเหมือนกับตัวตรวจจับจุดหมุน
แหล่งวิจัย
แต่ละแหล่งสนับสนุนคำจำกัดความหรือหลักฐานที่อธิบายไว้ข้างกัน รหัสเทียม ตัวอย่างสมมติ และพารามิเตอร์ที่เสนอต้องผ่านการตรวจสอบแยกต่างหาก
- Donchian ChannelsTradingView. ขอบเขตที่อ่าน: สูตรช่องราคาและคำอธิบายการใช้งาน ตรวจสอบเมื่อ: .
- pandas.Series.shiftpandas. ขอบเขตที่อ่าน: API เพื่อยืนยันการเลื่อนค่าข้อมูล ตรวจสอบเมื่อ: .
- Pine Script: StrategiesTradingView. ขอบเขตที่อ่าน: การสร้างคำสั่ง การจับคู่ที่ tick ถัดไปที่มีให้ และพฤติกรรมคำสั่ง stop ตรวจสอบเมื่อ: .
วิธีการที่เกี่ยวข้อง
หมายเหตุความเสี่ยง
เนื้อหานี้ใช้เพื่อการศึกษาและออกแบบงานวิจัย ไม่ใช่คำแนะนำทางการเงิน Backtest เป็นการจำลองข้อมูลในอดีต ไม่รับประกันผลในอนาคตและไม่ส่งคำสั่งซื้อขายจริง วิธีการในคลังนี้ไม่ได้หมายความว่ามีเป็นฟีเจอร์ในแอปทั้งหมด ดู ระเบียบวิธี และ ศูนย์การเรียนรู้.
ตรวจสอบกฎก่อนเสี่ยงด้วยเงินจริง
ตรวจสอบความสามารถของแอป ข้อมูล และแต่ละรายการซื้อขายจำลอง ตัวตรวจจับขั้นสูงอาจต้องพัฒนาแยกต่างหาก
ดาวน์โหลด Backtest บน App Store