บทที่ 5【กลางตอน】: คลื่นหลายลูกกำเนิด — เสียงสะท้อนจากตรรกะหลายชั้นอิสระ
สี่、ตำแหน่งร่วมกินกันเองและเหงื่อตอนดึก
ต้นปี 2023 ตอนต้นฤดูร้อน
การสร้างเอนจินป้องกันหลายชั้นโดยผสมผสานแนวทางหลายอย่าง แล้วทดสอบย้อนหลังด้วยความคาดหวังสูง
しかし、画面のローソク足の上で起きていたのは、私の理想とはかけ離れた「破滅的なポジションの共食い」だった。
เมื่อตลาดอยู่ในช่วงผันผวนเล็กน้อยและเงื่อนไขของดัชนีทางเทคนิคประสานกัน เพื่อให้หลายกลยุทธ์เกิดการเปิดรายการซื้อขายพร้อมๆ กัน
ภายในกรอบราคาที่แคบเพียงไม่กี่พิปส์ มีตำแหน่งสี่ สี่หลายตำแหน่งที่รวมกันแน่นเป็นกลุ่มจนดูเหมือนเป็นการเข้าทำรายการ
「แบบนี้จะให้ประโยชน์จากการ diversify กลยุทธ์มากแค่ไหนก็คงไม่ใช่…!」
ขณะจ้องมองหน้าจอ ฉันเช็ดเหงื่อเย็นบนใบหน้า
หากตลาดสวนทางกับตำแหน่งที่รวมกันอยู่ในจุดเดียว เงินทุนคงสูญเสียมูลค่าภายในไม่ช้าอย่างรวดเร็ว
มันไม่ใช่เพียงการป้องกันหลายชั้น มันเป็นโครงสร้างที่ไม่ต่างจาก “การปั่นพอร์ตที่พากันล้างผลาญ” ในอดีตที่ฉันทำผิดพลาดด้วยการตีโปรเจ็กต์ด้วยอารมณ์
「เอนจินอิสระแต่ละตัวเปิดคำสั่งโดยไม่รู้ถึงการมีอยู่ของกันและกัน จึงเป็นเช่นนี้」
ควบคุมสมดุลทั้งลำเรือและทำให้ตำแหน่งแต่ละตำแหน่งห่างจากกันอย่างเด็ดขาดด้วย「โค้ดผู้บัญชาการ」ที่ต้องถูกบรรจุเข้าไป
ห้า, เขตปลอดพิปส์ 20 — เกิด CanOpenNewLine —
ทั้งขณะรอไฟเขียวในรถพาณิชย์ และขณะนั่งเผชิญหน้ากับหน้าจอสีดำของ MetaEditor ตอนกลางคืน สมองของฉันถูกเติมเต็มด้วยอัลกอริทึมเพื่อความปลอดภัยนั้น
「เมื่อเปิดตำแหน่งใหม่ หากระยะห่างจากตำแหน่งที่ถืออยู่เดิมไม่ห่างออกไปพอ ก็จะสร้างกลไกที่ปฏิเสธคำสั่งการเข้า โดยไม่สนใจสัญญาณเข้าสู่การเปิดตำแหน่งใดๆ」
ฉันกดแป้นพิมพ์และเริ่มโปรแกรมฟังก์ชันการตัดสินใจใหม่
//+------------------------------------------------------------------+
//| 新規ライン開放判定:既存ポジションとの最小距離をチェック |
//+------------------------------------------------------------------+
bool CanOpenNewLine(int cmd, double minDistancePips)
{
for(int i = OrdersTotal() - 1; i >= 0; i--)
{
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
{
if(OrderSymbol() == Symbol() && OrderMagicNumber() == InpMagicNumber)
{
if(OrderType() == cmd)
{
// 既存の1本目ポジションとの距離(pips)を計算
double distance = MathAbs(OrderOpenPrice() - (cmd == OP_BUY ? Ask : Bid)) / Point / 10;
if(distance < minDistancePips)
{
return false; // 指定距離未満ならエントリーを拒否(重複防止)
}
}
}
}
}
return true; // 十分な距離が確保されている場合のみ開放許可
}
ลองตั้งค่าระยะห่างขั้นต่ำที่ 20.0 pips
หากตำแหน่งเดิมยังไม่เคลื่อนที่ไปมากกว่า 20.0 pips ตลาดก็ยังคงนิ่งอยู่ แม้สัญญาณเข้าจะดูน่าดึงดูดก็จะถูกโปรแกรมยุติการเข้าทำทันที
ทำให้พื้นที่แคบๆ ของตำแหน่งถูกทำให้เป็นไปไม่ได้ทางกายภาพ เพื่อให้แน่ใจว่าพอร์ตจะมีระยะห่างที่กว้างและปลอดภัยเสมอเป็นเขตควบคุมที่แน่นอน
ห้องที่แคบ หากให้ทหารรวมตัวกันจะถูกล้างออกในทีเดียว ดังนั้นจึงวางโครงสร้าง “การกระจายกำลังทางสังคม” ให้ทหารถอยห่างอย่างน้อย 20 ก้าว
「ใช่แล้ว…! ด้วยวิธีนี้ การร่วมกินกันเองของตำแหน่งจะถูกป้องกันอย่างสมบูรณ์」
กดปุ่มคอมไพล์และตรวจสอบล็อกที่ไม่มีข้อผิดพลาดด้วยมือที่สั่นก่อนจะรัน backtest อีกครั้ง
六、秩序を取り戻したチャート — 散開する防衛網 —
บนหน้าต่างทดสอบ กราฟแท่งเทียนเริ่มสั่นไหวอย่างรุนแรงอีกครั้ง
ก่อนหน้านี้ไม่ควรเห็นการรวมกลุ่มตำแหน่งในช่วงราคาที่แคบอีกต่อไป
แม้ตลาดจะขยายไปทางใด ด้วยการควบคุมของ CanOpenNewLine ตำแหน่งแต่ละตำแหน่งจะถูกวางห่างเป็นระยะๆ อย่างสวยงามมากกว่า 20.0 pips
【พฤติกรรมหลังติดตั้งกลไกป้องกันการซ้ำซ้อน (CanOpenNewLine)】
・Position 1: 0.9000(ชั้นแรกเปิดแล้ว)
・Position 2: 0.9025(ห่าง 25 pips เปิดชั้นที่ 2)
・Position 3: 0.9050(ห่างอีก 25 pips เปิดชั้นที่ 3)
⇒ ตำแหน่งถูกกระจายออกอย่างเรียบร้อย และเมื่อมีการเคลื่อนไหวกลับอย่างรวดเร็ว ค่าเฉลี่ยราคาซื้อจะถูกเล็งขึ้นไปยังตำแหน่งที่ได้เปรียบ
极めて有利な位置へと自然に引き上げられる。
เนื่องจากตำแหน่งไม่อัดแน่น ตลาดจะไม่ทำให้มูลค่าทุนลดฮวบลง
และเมื่อตลาดเริ่มกลับทิศเล็กน้อย กลุ่มตำแหน่งที่กระจายออกจะทำให้เกิดหลักการฟื้นตัวที่พอดี พุ่งเข้าสู่การปิดกำไรอย่างรวดเร็ว
「สวยงาม…」
มองประวัติการเทรดที่เป็นระเบียบบนหน้าจอ ฉันจึงเงียบลง
การเก็บเกี่ยวคลื่นด้วยแนวทางหลายชั้น และการป้องกันการซ้ำซ้อนด้วย CanOpenNewLine
เมื่อสองกลไกทำงานร่วมกันอย่างสมบูรณ์ มันทำให้ระบบที่ฉันเขียนขึ้นกลายเป็นมากกว่าแค่“ชิ้นส่วนโปรแกรม” แต่เป็นโครงสร้างที่ไม่ยอมแพ้ต่อคลื่นรุนแรงของตลาด กลายเป็น“โครงกระดูกเรือที่ไม่จม” อย่างแท้จริง