← กลับไปยังบทความ
July 5, 2026
อ่าน 5 นาที

ประตูความเที่ยงตรง (Fidelity Gate): การทดสอบย้อนหลังแบบหยาบไปละเอียดจะหลอกคุณได้เร็วขึ้น เว้นแต่ตัวแทนราคาถูกจะจัดอันดับเหมือนกับตัวเต็มราคาแพง

ประตูความเที่ยงตรง (Fidelity Gate): การทดสอบย้อนหลังแบบหยาบไปละเอียดจะหลอกคุณได้เร็วขึ้น เว้นแต่ตัวแทนราคาถูกจะจัดอันดับเหมือนกับตัวเต็มราคาแพง
#algotrading
#backtest
#multi-fidelity
#hyperband
#ASHA
#successive halving
#overfitting
#validation
Part 6 of 10 · Collection
High-Performance Backtest Engines

ส่วนหนึ่งของซีรีส์ "Backtests Without Illusions"

การค้นหาพารามิเตอร์อย่างจริงจังทุกครั้งจะชนกำแพงเดียวกัน นั่นคือพื้นที่การค้นหามีขนาดมหาศาล และการประเมินผลอย่างซื่อสัตย์แต่ละครั้งก็มีต้นทุนสูง กลยุทธ์แบบ multi-timeframe ที่มีเกณฑ์นับสิบตัวและคาบเวลาของอินดิเคเตอร์สามค่า เมื่อประเมินผลผ่านการแบ่งข้อมูลแบบ walk-forward หลายโฟลด์ อาจใช้เวลาหลายวินาทีต่อหนึ่งค่าคอนฟิก หนึ่งหมื่นค่าคอนฟิกก็กลายเป็นหลายชั่วโมง ดังนั้นคุณจึงมองหาทางลัด และทางลัดที่ว่าก็เป็นแนวคิดเดียวกันเสมอ นั่นคือ ประเมินแบบราคาถูกก่อน แล้วเลื่อนขั้นเฉพาะผู้รอดชีวิตไปสู่การทดสอบราคาแพง คัดกรองค่าคอนฟิกหนึ่งหมื่นแบบบนโฟลด์เดียว เก็บไว้แค่ไม่กี่ร้อยอันดับต้น แล้วรันสิ่งเหล่านั้นบนทุกโฟลด์ คัดกรองบนแท่งเทียนรายชั่วโมง แล้วลงลึกไปที่ระดับ 1 วินาทีเฉพาะผู้เข้ารอบสุดท้ายเท่านั้น

นี่คือการค้นหาแบบหยาบไปละเอียด (coarse-to-fine) ไม่ว่าจะเรียกว่า drill-down, multi-fidelity, successive halving, Hyperband หรือ ASHA และมันคือหนึ่งในไอเดียที่ดีอย่างแท้จริงในงานด้านการปรับค่าที่เหมาะสม (optimization) มันสามารถเปลี่ยนงานคำนวณระดับหนึ่งวันให้เหลือแค่หนึ่งชั่วโมงได้ เราเองก็ใช้มัน แต่มันซ่อนกับดักที่เงียบเสียจนคนส่วนใหญ่ที่นำไปใช้ไม่เคยตรวจสอบเลย และกับดักนั้นคือ ทั้งวิธีการนี้ตั้งอยู่บนสมมติฐานว่าตัวแทนราคาถูกของคุณจัดอันดับค่าคอนฟิกเหมือนกับที่การประเมินราคาแพงจัดอันดับ ถ้ามันไม่เป็นเช่นนั้น คุณก็ไม่ได้กำลังค้นหาได้เร็วขึ้น แต่คุณกำลังทิ้งผู้ชนะในอนาคตของคุณไปตั้งแต่ประตูแรก และเลื่อนขั้นสัญญาณรบกวนขึ้นมาแทน คุณแค่กำลังหลอกตัวเองได้เร็วขึ้นเท่านั้น

บทความนี้พูดถึงการวัดค่าเพียงหนึ่งอย่างที่จะบอกคุณได้ว่า drill-down ของคุณเป็นของจริงหรือเป็นเพียงภาพลวงตา เราทดสอบมันกับการค้นหาแบบ multi-timeframe ของเราเอง และคำตอบที่ได้ก็ไม่สบายใจนัก นั่นคือที่ความเที่ยงตรงต่ำสุด ตัวแทนของเราจัดอันดับค่าคอนฟิก แทบจะสุ่ม (Spearman ρ ≈ 0.03) หากเราตัดทิ้งอย่างเข้มงวดที่ความเที่ยงตรงระดับนั้น ตามที่ค่าเริ่มต้นของ ASHA แบบสำเร็จรูปทุกตัวชักชวนให้คุณทำ เราคงจะทิ้งผู้ชนะในท้ายที่สุดตั้งแต่รอบแรก ทางแก้คือประตูบังคับที่รันก่อนการค้นหาจะเริ่ม นั่นคือวัดค่าสหสัมพันธ์อันดับ (rank correlation) และปฏิเสธที่จะตัดทิ้งต่ำกว่าระดับความเที่ยงตรงที่ยังเชื่อถือได้

การค้นหาแบบ multi-fidelity คืออะไรกันแน่

ลำดับการค้นหาแบบหยาบไปละเอียด: ค่าคอนฟิกความเที่ยงตรงต่ำราคาถูกหลายพันแบบถูกคัดกรองอย่างกว้างขวางทางด้านซ้าย มีเพียงผู้รอดชีวิตอันดับต้นเท่านั้นที่เลื่อนขั้นไปทางขวาผ่านการประเมินเต็มรูปแบบที่ราคาแพงขึ้นเรื่อยๆ successive halving ค่อยๆ ลดขอบเขตของสนามผู้เข้าแข่งขันสีเขียวมรกตกว้างใหญ่ลงเหลือเพียงผู้เข้ารอบสุดท้ายที่สว่างไสวไม่กี่ราย

กลุ่มวิธีการเหล่านี้มีรูปแบบเดียวกัน คุณกำหนด ความเที่ยงตรง (fidelity หรือเรียกอีกอย่างว่า resource หรือ budget) ซึ่งเป็นปุ่มปรับจากราคาถูกไปราคาแพง ที่ค่าสูงสุดจะให้เป้าหมาย (objective) ที่แท้จริง จากนั้นคุณรันค่าคอนฟิกที่ความเที่ยงตรงต่ำ จัดอันดับ เก็บสัดส่วนที่ดีที่สุดไว้ แล้วรันเฉพาะผู้รอดชีวิตเหล่านั้นซ้ำที่ความเที่ยงตรงสูงขึ้น ทำซ้ำไปเรื่อยๆ จนกระทั่งผู้เข้ารอบสุดท้ายจำนวนน้อยได้รับการประเมินที่ความเที่ยงตรงเต็มรูปแบบ

Successive halving (Jamieson & Talwalkar, 2016) คือแกนหลัก เริ่มด้วยค่าคอนฟิก N ตัวที่ resource ขั้นต่ำ เก็บอันดับต้น 1/η ไว้ คูณ resource ด้วย η แล้วทำซ้ำ Hyperband (Li et al., 2018) ห่อ successive halving ไว้ในลูปชั้นนอกที่กระจายความเสี่ยงข้าม resource เริ่มต้นที่แตกต่างกัน เพื่อให้คุณไม่ต้องเดาว่าควรตัดทิ้งอย่างรุนแรงแค่ไหน ASHA (Li et al., 2020) คือเวอร์ชันแบบไม่ประสานเวลา (asynchronous) ที่เหมาะกับการทำงานคู่ขนาน อัตราการคัดออก η เป็นปุ่มปรับเดียวที่ทั้งหมดนี้มีร่วมกัน ค่าเริ่มต้นตามธรรมเนียมคือ η = 3 นั่นคือเก็บอันดับหนึ่งในสามบนสุดไว้ในแต่ละขั้น (rung) แล้วเพิ่ม budget เป็นสามเท่า

ตัวความเที่ยงตรงเองสามารถเป็นอะไรก็ได้เกือบทั้งหมดที่ไปจากราคาถูกสู่ราคาแพงและลู่เข้าสู่ความจริง

  • จำนวนโฟลด์ walk-forward ประเมินบน 1 โฟลด์ แล้ว 2 แล้ว 3 ไปจนถึง K นี่คือความเที่ยงตรงที่เราศึกษาด้านล่าง เพราะมันเป็นแบบธรรมชาติที่สุดสำหรับการทดสอบย้อนหลังที่มีการแบ่งข้อมูล out-of-sample แบบหมุนเวียน
  • ความละเอียดของแท่งเทียน (candle resolution) คัดกรองบนแท่งเทียน 1 ชั่วโมง เลื่อนขั้นไปที่ 1 นาที แล้วลงลึกไปที่ 1 วินาทีหรือข้อมูลการซื้อขายดิบเฉพาะผู้เข้ารอบสุดท้าย นี่คือแนวคิด adaptive drill-down ที่นำมาใช้กับ การค้นหา แทนที่จะเป็นการจำลองการเติมคำสั่งซื้อ (fill simulation)
  • ความยาวของประวัติข้อมูล, epochs, ชุดข้อมูลย่อย (dataset subsample) ซึ่งเป็นความเที่ยงตรงคลาสสิกในงาน ML

ในการทดสอบย้อนหลัง โฟลด์และความละเอียดคือสองปัจจัยที่สำคัญ และ นี่คือประเด็นหลักของบทความทั้งหมด ทั้งสองอย่างนี้ไม่ปลอดภัยเท่ากัน หนึ่งในนั้นมี bias ที่คัดเลือกพารามิเตอร์ผิดๆ อย่างเงียบๆ ไม่ว่าคุณจะตั้งประตูคัดกรองอย่างระมัดระวังแค่ไหนก็ตาม

สมมติฐานเดียวที่ทุกอย่างพึ่งพา

การล่มสลายอย่างเงียบๆ ของ drill-down: การจัดอันดับความเที่ยงตรงต่ำราคาถูกที่ไม่สอดคล้องกับการจัดอันดับเต็มรูปแบบราคาแพง ทำให้ผู้ชนะสีเขียวมรกตตัวจริงถูกตัดทิ้งไปตั้งแต่ประตูแรก ในขณะที่สัญญาณรบกวนสีแดง-ส้มถูกเลื่อนขั้นขึ้นไป และไม่มีข้อผิดพลาดใดถูกโยนออกมาเลย

ลองเขียนสิ่งที่ successive halving ต้องการจริงๆ เพื่อให้ถูกต้องดูสิ มันไม่ต้องการให้ความเที่ยงตรงราคาถูกให้ ค่า เป้าหมายที่ถูกต้อง ไม่มีใครสนใจว่าหนึ่งโฟลด์จะรายงานค่า Sharpe ที่แตกต่างจากหกโฟลด์ มันต้องการสิ่งที่อ่อนกว่านั้นแต่เจาะจงกว่ามาก นั่นคือความเที่ยงตรงราคาถูกต้อง จัดอันดับ ค่าคอนฟิกในแบบเดียวกับที่ราคาแพงจัดอันดับ ถ้าคอนฟิก A ชนะคอนฟิก B ที่ความเที่ยงตรงเต็มรูปแบบ A ก็ควรจะชนะ B ที่ความเที่ยงตรงต่ำด้วยเช่นกัน แค่นั้นเอง และนั่นก็คือทุกสิ่งทุกอย่างด้วยเช่นกัน

พูดในเชิงรูปแบบ ปริมาณที่กำหนดว่า drill-down จะได้ผลหรือไม่คือ ค่าสหสัมพันธ์อันดับระหว่างเป้าหมายที่ความเที่ยงตรงต่ำกับความเที่ยงตรงสูง ตลอดพื้นที่ของค่าคอนฟิก ถ้าค่าสหสัมพันธ์นั้นสูง ผู้รอดชีวิตของรอบราคาถูกก็คือค่าคอนฟิกเดียวกับที่จะชนะในรอบราคาแพง และคุณก็ได้ประหยัดต้นทุนคำนวณไปฟรีๆ ถ้ามันต่ำ รอบราคาถูกก็คือตัวกรองแบบสุ่ม มันทิ้งค่าคอนฟิกที่ดีและเลื่อนขั้นค่าคอนฟิกที่แย่ และคุณก็ใช้ budget ของคุณไปเร่งความเร็วให้ไปถึงคำตอบที่แย่กว่าเดิม ไม่มีการตั้งค่า η กลางๆ ที่จะช่วยคุณไว้ได้ ตัวแทนที่แย่ถูกตัดทิ้งอย่างค่อยเป็นค่อยไปก็ยังรั่วไหลผู้ชนะออกไปอยู่ดี ถูกตัดทิ้งอย่างรุนแรงมันก็จะเลือดไหลผู้ชนะออกไปมากขึ้น

ความล้มเหลวนี้มองไม่เห็นในแบบที่มันมักจะเป็น การค้นหาเสร็จสิ้น รายงานผู้ชนะ ผู้ชนะดูดีใน in-sample ไม่มีอะไรโยนข้อผิดพลาดออกมาเลย คุณจะค้นพบว่าตัวแทนกำลังโกหกก็ต่อเมื่อผู้ชนะพังทลายลงใน out-of-sample และเมื่อถึงตอนนั้นคุณก็จะโทษว่าเป็นความล้มเหลวของกลยุทธ์ ไม่ใช่ของการค้นหาที่คัดเลือกมันขึ้นมา ดังนั้นวินัยที่ต้องยึดถือก็เหมือนกับที่ซีรีส์นี้พูดถึงซ้ำแล้วซ้ำเล่า นั่นคือ วัดสิ่งที่วิธีการสมมติไว้ ก่อนที่คุณจะเชื่อในวิธีการนั้น สำหรับ drill-down สิ่งที่ต้องวัดคือค่าสหสัมพันธ์อันดับ และการวัดนี้มีต้นทุนต่ำ

การวัดค่ามัน ประตูความเที่ยงตรง

ประตูความเที่ยงตรงในฐานะจุดตรวจสอบ: ก่อนที่ขั้นใดจะได้รับความเชื่อถือ ค่าคอนฟิกสุ่มราวสองร้อยตัวจะถูกให้คะแนนที่ทุกระดับความเที่ยงตรง และค่าสหสัมพันธ์อันดับระหว่างตัวแทนราคาถูกกับการประเมินเต็มรูปแบบจะถูกวัดที่ประตูอันเรืองแสงซึ่งจะเปิดออกก็ต่อเมื่อการจัดอันดับทั้งสองสอดคล้องกันเท่านั้น

ประตูนี้คือการทดลองเล็กๆ ที่คุณรันเพียงครั้งเดียว ก่อนการค้นหาจริง บนพื้นที่ เดียวกัน กับที่คุณกำลังจะค้นหา ขั้นตอนมีดังนี้

  1. สุ่มดึงค่าคอนฟิกสองสามร้อยตัวจากพื้นที่พารามิเตอร์แบบสุ่ม (เราใช้ ~200 ตัว เพียงพอสำหรับการประมาณค่า Spearman ที่เสถียร และมีต้นทุนต่ำพอที่จะรับได้)
  2. ประเมินแต่ละตัวที่ ทุก ระดับความเที่ยงตรง ที่ 1 โฟลด์, 2 โฟลด์ ... ไปจนถึง K โฟลด์เต็ม สำหรับความเที่ยงตรงแบบจำนวนโฟลด์ นี่แทบจะฟรี เพราะโฟลด์ที่คุณคำนวณสำหรับขั้นราคาถูกจะถูกนำมาใช้ซ้ำในขั้นราคาแพง ซึ่งเป็นค่าเฉลี่ยสะสม
  3. สำหรับแต่ละขั้น r คำนวณ ค่าสหสัมพันธ์อันดับ Spearman ระหว่างการจัดอันดับที่ r โฟลด์กับการจัดอันดับที่ K โฟลด์เต็ม ตลอดค่าคอนฟิกทั้ง ~200 ตัวนั้น
  4. ขั้นแรกที่ค่า ρ ข้ามเกณฑ์ (เราใช้ ρ ≥ 0.5) คือความเที่ยงตรงที่ตื้นที่สุดที่คุณได้รับอนุญาตให้ตัดทิ้งได้ ต่ำกว่านั้น การจัดอันดับมีสัญญาณรบกวนมากเกินกว่าจะเชื่อถือได้ คุณต้องไม่คัดค่าคอนฟิกออกที่ระดับนั้น

ทั้งหมดนี้มีเพียงไม่กี่สิบบรรทัด หัวใจสำคัญของมันคือ

def fidelity_check(cache, n_probe, seed=7):
    """Spearman ρ: cumulative mean over the first r folds (in FOLD_ORDER)
    vs the full K-fold objective, on n_probe random configs."""
    rng = np.random.default_rng(seed)
    k = len(FOLDS)
    per_fold = np.empty((k, n_probe))
    order_win = np.array([list(FOLDS[fi]) for fi in FOLD_ORDER], np.int64)
    for j in range(n_probe):
        p = _unit_to_params(rng.random(len(PNAMES)))       # random config
        scores, *_ = eval_group(cache, p, _sp_of(p)[None, :], order_win, False)
        per_fold[:, j] = scores[0]                          # score on each fold
    cums = np.cumsum(per_fold, axis=0) / np.arange(1, k + 1)[:, None]  # r-fold mean
    rhos = []
    for r in range(1, k):
        rho = spearmanr(cums[r - 1], cums[-1]).statistic    # r folds vs all K
        rhos.append(0.0 if math.isnan(rho) else rho)
    return rhos

สังเกตรายละเอียดที่จงใจไว้อย่างหนึ่ง โฟลด์ต่างๆ ถูกนำมาใช้ตามลำดับ FOLD_ORDER ซึ่งเป็นลำดับแบบ สลับ (interleaved) ที่สลับไปมาระหว่างช่วงต้นกับช่วงปลายของปฏิทิน (โฟลด์ 0 แล้วตามด้วยโฟลด์กลาง แล้วโฟลด์ 1 แล้วโฟลด์ที่อยู่ปลายกว่านั้น ...) รายละเอียดนี้สำคัญอย่างมาก และเป็นหัวข้อของหัวข้อถัดไป มันหมายความว่า "1 โฟลด์" คือช่วงเดียวที่ ครอบคลุมช่วงกลางของประวัติข้อมูล และ "2 โฟลด์" คือหนึ่งช่วงต้นบวกหนึ่งช่วงปลาย ไม่ใช่หน้าต่างที่เป็นช่วงเวลาต่อเนื่องล่าสุดเลย ความเที่ยงตรงราคาถูกจะถูกลงมาราคาถูกกว่าเดิมด้วยการใช้โฟลด์ น้อยลง ไม่ใช่ใช้โฟลด์ที่ ล่าสุดกว่า

ผลลัพธ์ หนึ่งโฟลด์จัดอันดับแทบจะสุ่ม

ค่าสหสัมพันธ์อันดับที่ไต่สูงขึ้นตามจำนวนโฟลด์: เส้นโค้งของ Spearman rho ที่พุ่งขึ้น เริ่มต้นใกล้เคียงกับการโยนเหรียญที่หนึ่งโฟลด์ และชันขึ้นจนใกล้เคียงความสอดคล้องสมบูรณ์แบบเมื่อถึงห้าโฟลด์ พร้อมเส้นประตูแนวนอนที่ลากผ่านจุดกึ่งกลาง ต่ำกว่าเส้นนี้ห้ามตัดทิ้ง และสูงกว่านั้นอนุญาตให้ตัดทิ้งได้

นี่คือสิ่งที่ประตูรายงานออกมา จากการรันบนสองชุดของการตั้งค่า multi-timeframe ของเรา ตัวเลขนี้คือค่า Spearman ρ ระหว่างการจัดอันดับที่ r โฟลด์กับการจัดอันดับที่ K โฟลด์เต็ม ตลอดค่าคอนฟิกสุ่ม ~200 ตัว นั่นคือค่าที่บอกว่าอันดับที่ความเที่ยงตรงราคาถูกทำนายอันดับที่ความเที่ยงตรงเต็มรูปแบบได้แม่นยำแค่ไหน

จำนวนโฟลด์ r การรัน Multi-TF ระบอบตลาดที่ยากกว่า
1 +0.43 +0.03
2 +0.67 +0.43
3 +0.78 +0.78
4 +0.82
5 +0.91 +0.91

อ่านคอลัมน์ระบอบตลาดที่ยากกว่าก่อน เพราะมันคือคอลัมน์ที่น่าตกใจ ที่หนึ่งโฟลด์ ρ = 0.03 นั่นไม่ใช่สหสัมพันธ์ที่อ่อนแอ มันคือ ไม่มี สหสัมพันธ์เลย การจัดอันดับที่หนึ่งโฟลด์ของค่าคอนฟิกสองร้อยตัวแยกไม่ออกในเชิงสถิติจากการสับเรียงมันแบบสุ่ม การรัน successive-halving ที่ตั้งค่า (ตามที่ส่วนใหญ่เป็นค่าเริ่มต้น) ให้เริ่มตัดทิ้งที่ min_resource = 1 จะทำการตัดครั้งแรกและรุนแรงที่สุดของมันด้วยการโยนเหรียญในระบอบตลาดนี้ ค่าคอนฟิกที่ในที่สุดจะชนะที่ความเที่ยงตรงเต็มรูปแบบมีโอกาส 50/50 ที่จะรอดชีวิตจากรอบแรกสุด และเมื่อถึงจุดที่ความเที่ยงตรงที่การจัดอันดับเริ่มมีความหมาย (ρ = 0.78 ที่สามโฟลด์) ส่วนใหญ่ก็หายไปแล้ว

คอลัมน์ multi-TF มีความรุนแรงน้อยกว่าแต่ก็สื่อประเด็นเดียวกันในแบบที่ต่างออกไป แม้แต่ในกรณีนั้น หนึ่งโฟลด์ก็ให้ ρ = 0.43 ซึ่ง ต่ำกว่า เกณฑ์ 0.5 ของเรา มันดูเหมือนสหสัมพันธ์ที่ดีพอสมควร และนั่นคือความอันตรายอย่างแท้จริง 0.43 สูงพอที่จะทำให้คุณเผลอใจและต่ำพอที่จะรั่วไหลค่าคอนฟิกที่ดีที่สุดของคุณออกไป มีเพียงที่สองโฟลด์ (ρ = 0.67) เท่านั้นที่การจัดอันดับจึงจะเริ่มเชื่อถือได้

มีสองสิ่งที่สรุปเป็นข้อสังเกตทั่วไปได้จากนี้ อย่างแรก ค่า ρ ที่หนึ่งโฟลด์ขึ้นอยู่กับระบอบตลาดและไม่น่าเชื่อถือ เราวัดได้ตั้งแต่ 0.03 ถึง 0.43 ในการตั้งค่าต่างๆ และไม่มีกรณีใดเลยที่หนึ่งโฟลด์ผ่านเกณฑ์ได้ อย่างที่สอง ค่า ρ เพิ่มขึ้นแบบเอกโทน (monotonic) และรวดเร็ว เมื่อถึงสามโฟลด์ ทั้งสองการตั้งค่าอยู่ที่ 0.78 และเมื่อถึงห้าโฟลด์ก็ลู่เข้าสู่ 0.91 สัญญาณนั้นมีอยู่จริง คุณเพียงแค่ต้องใช้ความเที่ยงตรงมากพอที่จะเห็นมัน หน้าที่ของประตูคือหาขั้นที่แน่ชัดที่ "มากพอ" เริ่มต้นขึ้น และห้ามการตัดทิ้งต่ำกว่านั้น

ทำไมหนึ่งโฟลด์ถึงมีสัญญาณรบกวนมากขนาดนี้

สัญญาณรบกวนนี้ไม่ใช่บั๊กในการสร้างโฟลด์ของเรา มันเป็นสิ่งที่มีอยู่ในตัวเอง (intrinsic) และการเข้าใจว่าทำไม จะช่วยไม่ให้คุณ "แก้ไข" มันในทางที่ผิด หนึ่งโฟลด์ walk-forward คือหน้าต่างเวลาสั้นๆ หลายสัปดาห์ของระบอบตลาดหนึ่งเดียว คะแนนของกลยุทธ์บนหน้าต่างนั้นถูกครอบงำโดย พารามิเตอร์ของมันบังเอิญเข้ากับระบอบตลาดนั้นได้ดีแค่ไหน ซึ่งเกี่ยวข้องเพียงเล็กน้อยกับว่ามันสรุปทั่วไป (generalize) ได้ดีแค่ไหน ค่าคอนฟิกสองตัวที่มีคุณภาพแตกต่างกันอย่างแท้จริงสามารถสลับตำแหน่งกันบนหนึ่งโฟลด์ได้ เพียงเพราะตัวหนึ่งบังเอิญจับเทรนด์ที่โฟลด์นั้นบังเอิญมีอยู่ เป้าหมายบนหนึ่งโฟลด์คือตัวประมาณค่าความแปรปรวนสูง (high-variance estimator) ของเป้าหมายที่คุณสนใจจริงๆ และค่าสหสัมพันธ์อันดับก็คือสิ่งที่ความแปรปรวนสูงทำลายเป็นอันดับแรก คุณสามารถรักษา ค่าเฉลี่ย ของตัวประมาณค่าไว้ได้ในขณะที่ การจัดอันดับ ของมันเป็นสัญญาณรบกวนล้วนๆ

การเพิ่มโฟลด์จะลดความแปรปรวนนั้นลงด้วยการเฉลี่ย แต่ละโฟลด์เป็นการสุ่มตัวอย่างสภาวะตลาดที่ค่อนข้างเป็นอิสระต่อกัน ค่าเฉลี่ยที่ r โฟลด์เป็นตัวประมาณค่าที่มีความแปรปรวนต่ำกว่า และการจัดอันดับของมันลู่เข้าสู่การจัดอันดับที่ความเที่ยงตรงเต็มรูปแบบ นั่นคือสิ่งที่การไต่ระดับของ ρ = 0.03 → 0.43 → 0.78 → 0.91 อธิบายไว้อย่างแม่นยำ ไม่ใช่เป้าหมายที่เปลี่ยนไป แต่เป็นการประมาณค่าอันดับที่เสถียรขึ้นเมื่อความบังเอิญเฉพาะระบอบตลาดถูกเฉลี่ยออกไป บทเรียนคือ ความเที่ยงตรง สำหรับการทดสอบย้อนหลัง โดยพื้นฐานแล้วคือเรื่องของคุณได้สุ่มตัวอย่างระบอบตลาดที่เป็นอิสระต่อกันมากี่แบบ และหนึ่งแบบแทบจะไม่เคยเพียงพอที่จะนำมาจัดอันดับได้

นี่ยังอธิบายด้วยว่าทำไมระบอบตลาดที่ยากกว่าจึงเริ่มต้นที่ 0.03 ในขณะที่การรัน multi-TF เริ่มต้นที่ 0.43 ในระบอบตลาดที่ยากกว่า หนึ่งโฟลด์มีความเฉพาะเจาะจงกับระบอบตลาดมากกว่า คะแนนที่หนึ่งโฟลด์ของค่าคอนฟิกถูกขับเคลื่อนด้วยความบังเอิญมากกว่าและด้วยความได้เปรียบที่ยั่งยืนน้อยกว่า ดังนั้นมันจึงจัดอันดับใกล้เคียงกับการสุ่มมากขึ้น ประตูจะอ่านความแตกต่างนั้นโดยอัตโนมัติและตอบสนองด้วยการเรียกร้องโฟลด์เพิ่มมากขึ้นก่อนที่มันจะยอมให้ตัดทิ้ง คุณไม่จำเป็นต้องรู้ล่วงหน้าว่าคุณอยู่ในระบอบตลาดแบบไหน คุณแค่วัดมัน

ประตูในรูปแบบโค้ด ปรับความเที่ยงตรงขั้นต่ำขึ้นโดยอัตโนมัติ

ผลลัพธ์ของประตูคือจำนวนเต็มค่าเดียว นั่นคือ min_resource ความเที่ยงตรงที่ตื้นที่สุดที่ ASHA ได้รับอนุญาตให้ตัดทิ้งได้ กฎนี้เป็นกลไก คือเดินไล่ไปตามขั้นต่างๆ แล้วเลือกขั้นแรกที่ค่า ρ ผ่านเกณฑ์

RHO_GATE = 0.5
min_res = len(FOLDS)                      # default: pruning OFF (full fidelity)
rhos = fidelity_check(cache, n_probe=200) # [ρ@1, ρ@2, …, ρ@(K-1)]
passing = [r for r, rho in enumerate(rhos, 1) if rho >= RHO_GATE]
if passing:
    min_res = passing[0]                  # first rung that clears the gate

pruner = SuccessiveHalvingPruner(min_resource=min_res, reduction_factor=3)

ลองไล่ตามการรันทั้งสองแบบดู ในการตั้งค่า multi-TF ρ@1 = 0.43 ไม่ผ่านประตู แต่ ρ@2 = 0.67 ผ่านได้ ดังนั้น min_resource จึงถูกปรับขึ้นโดยอัตโนมัติเป็น 2 นั่นคือ ASHA จะรันทุกค่าคอนฟิกบนอย่างน้อยสองโฟลด์ก่อนที่มันจะได้รับอนุญาตให้คัดตัดอะไรออกไป จากนั้นก็ตัดทิ้งตามปกติจากจุดนั้นเป็นต้นไป ในกรณี ระบอบตลาดที่ยากกว่า ρ@1 = 0.03 และ ρ@2 = 0.43 ทั้งคู่ไม่ผ่าน ρ@3 = 0.78 คือตัวแรกที่ผ่าน ดังนั้น min_resource จึงกลายเป็น 3 และมีทางออกสำรองที่สำคัญ นั่นคือถ้า ไม่มี ขั้นใดถึง 0.5 เลย passing จะว่างเปล่า และ min_resource จะคงอยู่ที่ K นั่นคือ การตัดทิ้งถูกปิดโดยสิ้นเชิง และการค้นหาจะลดระดับลงอย่างค่อยเป็นค่อยไปสู่การค้นหาแบบเต็มความเที่ยงตรงธรรมดา แทนที่จะเป็นการค้นหาที่เร็วแต่ผิด drill-down ที่ไม่สามารถพิสูจน์ตัวแทนของมันได้ก็แค่ปฏิเสธที่จะตัดทิ้ง

นี่คือปรัชญาทั้งหมดในบรรทัดควบคุมโฟลว์บรรทัดเดียว ค่าเริ่มต้นของไลบรารี successive-halving ทุกตัวคือ "ตัดทิ้งจาก min_resource = 1 เชื่อขั้นราคาถูก" ประตูนี้แทนที่ด้วย "ตัดทิ้งจากขั้นแรกที่ข้อมูลบอกว่าน่าเชื่อถือ และถ้าไม่มีเลย ก็อย่าตัดทิ้ง" มันมีต้นทุนแค่การสำรวจ ~200 ค่าคอนฟิกล่วงหน้า และมันเปลี่ยน drill-down จากการกระทำด้วยความเชื่อให้กลายเป็นการตัดสินใจที่วัดผลได้ อัตราการคัดออก η = 3 ยังคงเหมือนเดิม ประตูนี้ไม่แตะต้องว่าคุณตัดทิ้ง รุนแรง แค่ไหน แตะแค่ว่าคุณได้รับอนุญาตให้เริ่ม เร็ว แค่ไหนเท่านั้น

หมายเหตุที่ควรพูดตรงๆ ที่เห็นได้ในโค้ดข้างต้น การเพิ่ม min_resource กินเข้าไปในการเร่งความเร็ว การตัดทิ้งที่ 3 โฟลด์แทนที่จะเป็น 1 หมายความว่าทุกค่าคอนฟิก รวมถึงตัวที่คุณจะทิ้งไปด้วย ต้องจ่ายต้นทุนสำหรับสามโฟลด์ นั่นคือราคาของความถูกต้อง และมันคือการแลกเปลี่ยนที่ถูกต้อง การเร่งความเร็วที่เล็กกว่าสองเท่าบนการค้นหาที่พบผู้ชนะจริงๆ ดีกว่าการเร่งความเร็วหกเท่าบนการค้นหาที่ทิ้งผู้ชนะเหล่านั้นไป ประตูทำให้การแลกเปลี่ยนนั้นชัดเจนแทนที่จะซ่อนมันไว้

แกนราคาถูกที่ผิด ประวัติข้อมูลที่สั้นกว่าคือกับดัก

มีความเที่ยงตรงราคาถูกอย่างหนึ่งที่ล่อใจ ชัดเจน และ มี bias และควรค่าแก่การเรียกชื่อออกมา เพราะทุกคนมักจะเอื้อมมือไปหยิบมันเป็นอย่างแรก นั่นคือ ประวัติข้อมูลที่สั้นกว่า คัดกรองค่าคอนฟิกบนเดือนล่าสุด แล้วเลื่อนขั้นผู้รอดชีวิตไปยังสองปีเต็ม มันราคาถูกอย่างเห็นได้ชัดและให้ความรู้สึกเหมือนเป็นแนวคิดเดียวกับการใช้โฟลด์น้อยลง แต่มันไม่ใช่

โฟลด์ที่น้อยลงและประวัติข้อมูลที่สั้นกว่าแตกต่างกันในจุดที่ชี้ขาดจุดหนึ่ง ความเที่ยงตรงแบบจำนวนโฟลด์ ถ้าทำถูกต้อง จะยังครอบคลุมทั่ว ปฏิทินทั้งหมด มันเพียงแค่สุ่มตัวอย่างมันแบบหยาบกว่า ในขณะที่ความเที่ยงตรงแบบประวัติข้อมูลสั้นกว่าสุ่มตัวอย่าง ช่วงย่อย ของปฏิทินอย่างหนาแน่น และช่วงย่อยของประวัติตลาดก็คือระบอบตลาดที่เฉพาะเจาะจงอย่างหนึ่ง เมื่อคุณจัดอันดับค่าคอนฟิกบนเดือนล่าสุด คุณไม่ได้รับการประมาณค่าอันดับแบบเต็มช่วงเวลาที่มีสัญญาณรบกวนแต่ไม่มี bias คุณกำลังได้รับการประมาณค่าที่ มี bias ซึ่งเอนเอียงเข้าข้างค่าคอนฟิกที่ปรับแต่งมาให้เข้ากับระบอบตลาดของเดือนล่าสุดอย่างเป็นระบบ เพิ่มขนาดตัวอย่างเท่าไหร่ก็ตามที่คุณต้องการ เฉลี่ยข้ามค่าคอนฟิกมากขึ้น การทดลองมากขึ้น bias ก็ไม่ลดลง เพราะมันไม่ใช่ความแปรปรวน คุณจะเลื่อนขั้นค่าคอนฟิกที่เข้ากับหน้าต่างคัดกรองได้ดีที่สุด และนั่นก็คือค่าคอนฟิกที่มีแนวโน้มมากที่สุดที่จะ overfit เข้ากับระบอบตลาดชั่วคราว

นี่คือเหตุผลที่ความเที่ยงตรงของเราเดินไล่โฟลด์ในลำดับแบบ สลับ (interleaved) แทนที่จะเรียงตามลำดับเวลา ด้วย K โฟลด์กระจายทั่วประวัติข้อมูลทั้งหมด "1 โฟลด์" คือช่วงเดี่ยวใกล้ตรงกลาง "2 โฟลด์" คือหนึ่งช่วงต้นและหนึ่งช่วงปลาย "3 โฟลด์" กระจายไปทั้งต้น-กลาง-ปลาย ทุกระดับความเที่ยงตรง แม้แต่ระดับราคาถูกที่สุด ก็สุ่มตัวอย่างทั่วปฏิทินทั้งหมด ตัวแทนราคาถูกคือมุมมองหยาบของช่วงเวลา ทั้งหมด ไม่ใช่มุมมองที่คมชัดของช่วงใดช่วงหนึ่งเลย การสลับลำดับนั้นคือสิ่งที่ทำให้ความเที่ยงตรงแบบจำนวนโฟลด์เป็นเพียงแค่ มีสัญญาณรบกวน (ซึ่งประตูรักษาได้) แทนที่จะเป็น มี bias (ซึ่งไม่มีประตูใดแก้ไขได้ ค่า ρ สูงเมื่อเทียบกับเป้าหมายที่มี bias เพียงแค่รับรองว่าคุณจะเลือกค่าคอนฟิกที่เข้ากับระบอบตลาดได้อย่างสม่ำเสมอ) ถ้าวิธีเดียวที่คุณทำให้ความเที่ยงตรงราคาถูกลงคือทำให้มันล่าสุดมากขึ้น คุณก็ไม่มีความเที่ยงตรงที่ใช้ได้จริง ทำให้มันหยาบขึ้นแทน

ความละเอียดในฐานะแกนราคาถูกที่ซื่อสัตย์

แกนราคาถูกอีกแบบหนึ่งหลีกเลี่ยง bias ได้อย่างสิ้นเชิง และมันคือคู่หูตามธรรมชาติของ adaptive drill-down ที่เราอธิบายไว้สำหรับการจำลองการเติมคำสั่งซื้อ นั่นคือ ความละเอียดของแท่งเทียน คัดกรองพื้นที่ทั้งหมดบนแท่งเทียน 1 ชั่วโมง เลื่อนขั้นผู้รอดชีวิตไปที่ 1 นาที แล้วลงลึกไปที่ 1 วินาทีหรือข้อมูลการซื้อขายดิบเฉพาะผู้เข้ารอบสุดท้ายไม่กี่รายเท่านั้น แท่งเทียนที่หยาบกว่าบนประวัติข้อมูลเต็มเดียวกันมีต้นทุนถูกกว่าในการประเมิน แท่งน้อยลง การคำนวณอินดิเคเตอร์เร็วขึ้น การจำลองเร็วขึ้น และต่างจากหน้าต่างที่สั้นกว่า มุมมองหยาบของปฏิทิน ทั้งหมด ไม่มี bias มันมองเห็นทุกระบอบตลาด เพียงแค่มีรายละเอียดภายในแท่งน้อยกว่า

ความละเอียดและโฟลด์เป็นแกนความเที่ยงตรงที่เสริมกัน และประตูความเที่ยงตรงใช้ได้กับ ทั้งสอง แกน ก่อนที่คุณจะเชื่อการคัดกรองที่ 1 ชั่วโมง ให้รันการสำรวจแบบเดียวกัน นั่นคือนำค่าคอนฟิก ~200 ตัว ให้คะแนนที่ 1 ชม. และที่ 1 นาที แล้ววัดค่าสหสัมพันธ์อันดับ ถ้า ρ(1 ชม., 1 นาที) สูง การคัดกรองบนชั่วโมงก็ปลอดภัย และคุณได้ซื้อการเร่งความเร็วขนาดใหญ่มาอย่างซื่อสัตย์ ถ้ามันต่ำ ซึ่งเกิดขึ้นเมื่อความได้เปรียบของกลยุทธ์อยู่ในโครงสร้างภายในแท่งเทียนที่แท่งเทียนรายชั่วโมงเกลี่ยจนหายไป การคัดกรองรายชั่วโมงก็เป็นตัวกรองแบบสุ่มสำหรับกลยุทธ์นั้น และประตูก็จะบอกคุณให้เริ่มที่ความละเอียดที่ละเอียดกว่า กฎไม่เคยเปลี่ยน คุณได้รับอนุญาตให้ตัดทิ้งที่ความเที่ยงตรงหนึ่งก็ต่อเมื่อคุณได้วัดแล้วว่าการจัดอันดับของมันสอดคล้องกับความจริง

สองแกนนี้ยังล้มเหลวในทางตรงกันข้ามกันด้วย ซึ่งเป็นประโยชน์ ความละเอียดที่หยาบสูญเสียข้อมูล ภายในแท่งเทียน โฟลด์ที่น้อยลงสูญเสียข้อมูล ข้ามระบอบตลาด กลยุทธ์แบบ momentum บนขอบฟ้าเวลารายวันอาจจัดอันดับได้สมบูรณ์แบบบนแท่งเทียนรายชั่วโมงแต่ต้องการโฟลด์จำนวนมากเพื่อเฉลี่ยความบังเอิญของระบอบตลาดออกไป ในขณะที่กลยุทธ์แบบ scalping อาจจัดอันดับได้ดีบนโฟลด์เพียงไม่กี่ตัวแต่พังทลายลงเหนือความละเอียดระดับ 1 วินาที ประตูที่รันแยกตามแต่ละแกนจะบอกคุณว่าความเที่ยงตรงแบบใดที่คุณสามารถประหยัดได้สำหรับกลยุทธ์นี้โดยเฉพาะ แทนที่จะสมมติคำตอบที่บังเอิญสะดวก

การประหยัดที่แท้จริงมาจากไหนกันแน่

ข้อควรระวังที่รักษาความซื่อสัตย์ของ drill-down คือ ความเที่ยงตรงหนึ่งจะประหยัดต้นทุนคำนวณได้ก็ต่อเมื่อต้นทุนนั้นอยู่ตรงจุดที่มันประหยัด ในเอนจินแบบ multi-timeframe ของเรา ส่วนที่แพงคือการคำนวณอินดิเคเตอร์ล่วงหน้า นั่นคือสัญญาณ HMA และ separation แบบ multi-timeframe ซึ่งจ่ายต้นทุน ครั้งเดียวต่อหนึ่งค่าคอนฟิก ก่อนที่โฟลด์ใดจะรัน การจำลองต่อโฟลด์บนสัญญาณที่แคชไว้แล้วมีต้นทุนต่ำเปรียบเทียบกัน ดังนั้นการตัดทิ้งตามจำนวนโฟลด์จึงประหยัดได้แค่ต้นทุนการจำลอง ไม่ใช่ต้นทุนอินดิเคเตอร์ที่ครอบงำอยู่ ความเที่ยงตรงแบบจำนวนโฟลด์เป็นของจริง แต่เพดานของมันต่ำกว่าที่อัตราส่วนโฟลด์ดิบๆ บ่งบอกไว้

ในทางตรงกันข้าม แกนความละเอียดโจมตีต้นทุนที่ครอบงำอยู่โดยตรง แท่งเทียนที่หยาบกว่าหมายถึงจำนวนแท่งน้อยลงในการคำนวณอินดิเคเตอร์ บน นั้น ดังนั้นทั้งการคำนวณล่วงหน้าที่แพงและการจำลองที่ถูกจะหดตัวลงพร้อมกัน นี่ไม่ใช่รายละเอียดเล็กน้อย มันคือตัวตัดสินว่า drill-down แบบไหนคุ้มค่าที่จะสร้าง ก่อนที่คุณจะลงทุนสร้างการค้นหาแบบ multi-fidelity ให้ถามว่าวินาทีของคุณหมดไปกับอะไร ถ้า 90% เป็นการคำนวณอินดิเคเตอร์ล่วงหน้าที่ใช้ร่วมกันข้ามโฟลด์ ความเที่ยงตรงแบบจำนวนโฟลด์จะให้ผลตอบแทนน้อย และความเที่ยงตรงแบบความละเอียดจะให้ผลตอบแทนมาก วิเคราะห์โปรไฟล์ก่อน แกนราคาถูกที่ถูกต้องคือแกนที่กำจัดต้นทุนที่คุณมีอยู่จริง และมันยังต้องผ่านประตูด้วย

จุดเชื่อมโยงของเรื่องนี้

ประตูความเที่ยงตรงอยู่ในจุดที่เฉพาะเจาะจงในห่วงโซ่ของสุขอนามัยการทดสอบย้อนหลังของซีรีส์นี้

  • มันอยู่ ต้นน้ำของการควบคุม overfitting drill-down ที่ตัดทิ้งบนตัวแทนที่แย่คือวิธีใหม่ในการ overfit คุณกำลังปล่อยให้ขั้นแรกที่มีสัญญาณรบกวนคัดเลือกผู้เข้ารอบสุดท้ายของคุณ ผู้ชนะยังคงต้องผ่าน Deflated Sharpe และ PBO และ จำนวนการทดลองที่ป้อนเข้าประตูเหล่านั้นต้องรวมทุกการทดลองที่ถูกตัดทิ้งด้วย ไม่ใช่แค่ผู้รอดชีวิตเท่านั้น การตัดทิ้งไม่ได้ทำให้การทดลองหนึ่งได้รับการยกเว้นจากบัญชีการทดสอบหลายครั้ง (multiple-testing ledger)
  • มันมีศัตรูร่วมกับ plateau analysis ค่าคอนฟิกที่ชนะหนึ่งโฟลด์หรือหนึ่งหน้าต่างคัดกรองและไม่มีที่ไหนอื่นเลย ก็คือสิ่งประดิษฐ์ที่เข้ากับระบอบตลาดเดียวกันกับที่เครื่องมือทั้งสองมีไว้เพื่อปฏิเสธ ประตูปฏิเสธที่จะ คัดเลือก บนโฟลด์เช่นนั้น ในขณะที่ plateau analysis ปฏิเสธที่จะ เชื่อถือ ผู้ชนะที่ยืนอยู่บนโฟลด์เดียว
  • มันสันนิษฐานว่ามีการแบ่งข้อมูลแบบ walk-forward ที่ซื่อสัตย์อยู่เบื้องล่าง นั่นคือโฟลด์ที่ครอบคลุมปฏิทินทั้งหมด out-of-sample ถูกกันไว้ต่างหาก และมันคือคู่หูในเวลาค้นหาของ drill-down ที่เราสร้างไว้สำหรับ การจำลองการเติมคำสั่งซื้อ หลักการหยาบไปละเอียดแบบเดียวกัน ที่ประยุกต์ใช้กับ ค่าคอนฟิกไหนที่จะประเมิน แทนที่จะเป็น เติมคำสั่งซื้อได้แม่นยำแค่ไหน
  • และมันขึ้นอยู่กับความเที่ยงตรงที่ปราศจากการรั่วไหลอย่างสิ้นเชิงในทุกขั้น ถ้าขั้นราคาถูกมี look-ahead bias ที่ขั้นราคาแพงไม่มี ρ จะวัดความสอดคล้องกับเป้าหมายที่ปนเปื้อน และประตูก็จะรับรองการรั่วไหลนั้น วัดค่าสหสัมพันธ์อันดับ ใช่ แต่ต้องเป็นบนเป้าหมายที่ซื่อสัตย์

แนวคิดที่รวมทุกอย่างเข้าด้วยกัน อีกครั้ง คือสิ่งที่ซีรีส์นี้จะไม่หยุดพูดซ้ำ นั่นคือการทดสอบย้อนหลังคือการทดลองทางสถิติ และทุกทางลัดในนั้นคือสมมติฐานที่คุณมีหน้าที่ต้องทดสอบ สมมติฐานของ drill-down คือ "อันดับราคาถูก ≈ อันดับราคาแพง" มันทดสอบได้ในค่าคอนฟิกราว 200 ตัว จงทดสอบมัน

สรุปสิ่งที่ควรจดจำ

  1. การค้นหาแบบหยาบไปละเอียดตั้งอยู่บนสมมติฐานเดียว นั่นคือตัวแทนราคาถูกจัดอันดับค่าคอนฟิกเหมือนกับตัวราคาแพง ไม่ใช่ค่าเดียวกัน แต่เป็น การจัดอันดับ เดียวกัน ถ้าค่าสหสัมพันธ์อันดับต่ำ การตัดทิ้งอย่างรุนแรงจะทิ้งผู้ชนะในอนาคตของคุณและเลื่อนขั้นสัญญาณรบกวนขึ้นมาแทน คุณกำลังค้นหาได้เร็วขึ้นเพื่อไปสู่คำตอบที่แย่กว่า
  2. วัดมันก่อนที่คุณจะเชื่อมัน สุ่มดึงค่าคอนฟิก ~200 ตัว ให้คะแนนที่ทุกระดับความเที่ยงตรง และคำนวณ Spearman ρ ระหว่างแต่ละขั้นราคาถูกกับการจัดอันดับที่ความเที่ยงตรงเต็มรูปแบบ มันคือไม่กี่สิบบรรทัดและการสำรวจราคาถูกครั้งเดียว
  3. หนึ่งโฟลด์จัดอันดับแทบจะสุ่ม เราวัดค่า ρ@1 ได้ตั้งแต่ 0.03 (การโยนเหรียญ) ไปจนถึง 0.43 (ยังต่ำกว่าระดับที่เชื่อถือได้) ขึ้นอยู่กับระบอบตลาด มันไต่ขึ้นไปที่ 0.67, 0.78, 0.82 และ 0.91 เมื่อจำนวนโฟลด์เพิ่มขึ้น ค่าเริ่มต้น min_resource = 1 ของ ASHA แบบสำเร็จรูปทุกตัว สำหรับการทดสอบย้อนหลังแล้วมักจะผิด
  4. ปรับความเที่ยงตรงขั้นต่ำขึ้นโดยอัตโนมัติไปยังขั้นแรกที่ ρ ≥ 0.5 และถ้าไม่มีขั้นใดผ่านเลย ก็อย่าตัดทิ้งเลย ประตูปรับเปลี่ยนเป็น min_resource = 2 สำหรับการตั้งค่าหนึ่ง และ 3 สำหรับอีกกรณีที่ยากกว่า ทางออกสำรองลดระดับลงอย่างค่อยเป็นค่อยไปสู่การค้นหาแบบเต็มความเที่ยงตรง ความถูกต้องมีต้นทุนบางส่วนของการเร่งความเร็ว จงจ่ายมัน
  5. เลือกแกนราคาถูกตามว่ามันมี bias หรือไม่ ไม่ใช่ตามว่ามันถูกหรือไม่ ประวัติข้อมูลที่สั้นกว่ามี bias มันคัดเลือกพารามิเตอร์ที่เข้ากับระบอบตลาด และไม่มีขนาดตัวอย่างใดแก้ไขสิ่งนั้นได้ ใช้โฟลด์ที่น้อยลงซึ่งครอบคลุมปฏิทินทั้งหมด (แบบสลับ ไม่ใช่ต่อเนื่อง) หรือความละเอียดที่หยาบกว่าตลอดช่วงเวลาทั้งหมด และใช้แกนราคาถูกในจุดที่ต้นทุนของคุณอยู่จริงๆ

Drill-down คือหนึ่งในการเร่งความเร็วที่ดีที่สุดในการทดสอบย้อนหลัง และเป็นหนึ่งในสิ่งที่ง่ายที่สุดที่จะกลายเป็นวิธีที่เร็วขึ้นในการหลอกตัวเอง ความแตกต่างระหว่างสองสิ่งนี้คือตัวเลขเดียวที่คุณสามารถวัดได้ก่อนที่การค้นหาจะเริ่มต้น ถ้าตัวแทนของคุณไม่สามารถพิสูจน์ได้ว่ามันจัดอันดับเหมือนกับความจริง มันก็ไม่ใช่ตัวแทน มันคือตัวสร้างเลขสุ่มที่มีโปรไฟล์ต้นทุนที่ดูสมเหตุสมผล

ข้อจำกัดความรับผิดชอบ: ข้อมูลที่ให้ไว้ในบทความนี้มีไว้เพื่อการศึกษาและให้ข้อมูลเท่านั้น และไม่ถือเป็นคำแนะนำทางการเงิน การลงทุน หรือการเทรด การเทรดสกุลเงินดิจิทัลมีความเสี่ยงสูงที่จะขาดทุน

ผู้เขียน

Eugen Soloviov
Eugen Soloviov

Trading-systems engineer

Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.

Newsletter

ก้าวนำหน้าตลาด

สมัครรับจดหมายข่าวของเราเพื่อรับข้อมูลเชิงลึกการเทรดด้วย AI เฉพาะ การวิเคราะห์ตลาด และการอัปเดตแพลตฟอร์ม

เราเคารพความเป็นส่วนตัวของคุณ ยกเลิกการสมัครได้ทุกเมื่อ