Toda-Yamamoto vs Differenced Granger: Does the BTC Lead-Lag Survive?
ผลลัพธ์เชิงสาเหตุ Granger ที่เผยแพร่เกือบทุกรายการในสกุลเงินดิจิทัลจะถูกคำนวณจากการส่งคืนบันทึก ทางเลือกนั้นไม่ฟรี ความแตกต่างทำให้อนุกรมหยุดนิ่งตามที่การทดสอบ F มาตรฐานกำหนด แต่จะละทิ้งความสัมพันธ์ระดับด้วย และหากมีเหรียญสองเหรียญรวมกัน VAR ที่ต่างกันจะถูกระบุผิด และการทดสอบจะตอบคำถามที่แตกต่างจากที่คุณถามเล็กน้อย
Toda และ Yamamoto (1995) เสนอทางออก: ติดตั้ง VAR ในระดับที่มีความล่าช้าเป็นพิเศษ ทดสอบเฉพาะระดับดั้งเดิม และรับ ที่ถูกต้อง โดยไม่คำนึงถึงรากของหน่วยหรือการรวมเหรียญ เป็นที่รู้จักกันดีในด้านเศรษฐมิติและแทบไม่เคยนำไปใช้กับ crypto lead-lag
บทความนี้จึงทำสิ่งหนึ่ง: ทำการทดสอบทั้งสองคู่บนหน้าต่างเดียวกัน และรายงานว่าทั้งคู่ไม่เห็นด้วยหรือไม่ จากนั้นใช้การติดตามผลอย่างตรงไปตรงมา — การแก้ไขการทดสอบหลายกลุ่มที่สัมพันธ์กันบนเมทริกซ์ผลลัพธ์ และค่า p-value เพื่อดูว่าความล่าช้า "อย่างมีนัยสำคัญ" มีความเสถียรเพียงพอที่จะแลกเปลี่ยนหรือเพียงแค่กะพริบข้ามเกณฑ์
ทฤษฎีด้านล่างนี้มีมากเท่าที่จำเป็นเท่านั้นเพื่อให้การเปรียบเทียบชัดเจน บล็อกนี้ครอบคลุมถึงการรูทหน่วย การรวมเหรียญ การโหลดข้อมูล ขนาด และต้นทุนอยู่แล้ว นั่นคือลิงก์ ไม่ใช่ส่วนต่างๆ
สิ่งที่เกรนเจอร์อ้างเหตุผลจริงๆ

สาเหตุของ Granger คือ ลำดับความสำคัญเชิงคาดการณ์ ไม่ใช่กลไก: Granger ทำให้เกิด หาก ที่ผ่านมาลดความแปรปรวนของข้อผิดพลาดในการคาดการณ์ของ เกินกว่าที่ ในอดีตได้อธิบายไว้แล้ว
Granger-ทำให้เกิด ถ้า
สองชุดที่ขับเคลื่อนด้วยปัจจัยซ่อนเร้นทั่วไปสามารถแสดงสาเหตุของ Granger โดยไม่มีการเชื่อมโยงโดยตรงระหว่างสิ่งเหล่านั้น ในคริปโตนั้น ข้อแม้นั้นไม่ใช่วิชาการ — BTC เป็นปัจจัยหลักเพียงปัจจัยเดียวใน altcoin ที่ซับซ้อนทั้งหมด ดังนั้น "สาเหตุ" จาก alt-to-alt เกือบทั้งหมดจึงเป็นสิ่งประดิษฐ์ที่มีความเร็วในการตอบสนองต่อ BTC ที่ต่างกันออกไป
กรอบการทำงานของ VAR
การทดสอบอยู่ภายใน Vector Autoregression สำหรับตัวแปรสองตัวที่มีความล่าช้า :
ในรูปแบบเมทริกซ์ VAR(p) พร้อมตัวแปร :
การทดสอบว่า Granger เป็นสาเหตุให้ กำลังทดสอบข้อจำกัดร่วม ในสมการแรกหรือไม่ เส้นทางมาตรฐานคือการทดสอบ F กับผลรวมที่เหลือของกำลังสองที่ถูกจำกัดและไม่จำกัด
ด้วยรูปแบบ Wald ที่เทียบเท่ากับซีมโทติคัล ทุกสิ่งที่ตามมาคือคำถามเกี่ยวกับ ค่าสัมประสิทธิ์ที่ใช้กับข้อจำกัดใด และข้อมูลที่ VAR ติดตั้งไว้
การเลือกล่าช้า
มีความสำคัญมากกว่าที่บทความส่วนใหญ่ยอมรับ: มีความล่าช้าน้อยเกินไปที่พลาดพลวัต มีระดับการเผาผลาญอิสระมากเกินไป และทำลายพลัง
ช่วงการค้นหาที่เหมาะสม: 1-60 สำหรับข้อมูลวินาที, 1-30 สำหรับข้อมูลนาที, 1-48 ในรายชั่วโมง BIC เป็นค่าเริ่มต้นที่ถูกต้องที่นี่ — เป็นเกณฑ์ที่รอบคอบมากกว่า และ lead-lag ในคู่สกุลเงินดิจิทัลที่เป็นของเหลวถือเป็นปรากฏการณ์หน่วยความจำสั้น ทุกผลลัพธ์ด้านล่างจะรายงาน ที่เลือกโดย BIC ต่อคู่ แทนที่จะแก้ไขหนึ่งความล่าช้าทั่วทั้งจักรวาล เนื่องจากความล่าช้าคงที่จะแปลงตัวเลือกการเลือกความล่าช้าเป็นการกล่าวอ้างที่มีนัยสำคัญ
เหตุใดการทดสอบแบบผลต่างจึงไม่ใช่ค่าเริ่มต้นที่ถูกต้อง

ชุดราคา Crypto คือ I(1) การแก้ไขตามปกติ — รับ log-return — ซื้อความคงที่ที่ต้นทุนของระดับ cointegrating และหากทั้งคู่มีความสมดุลในระยะยาว VAR ที่แตกต่างกันจะถูกระบุผิด เครื่องจักรของหน่วยรากและการรวมเหรียญที่อยู่เบื้องหลังประโยคนั้น (ADF, Engle-Granger พร้อมค่าวิกฤตของ Monte-Carlo, Johansen บนระบบ VAR) ครอบคลุมอยู่แล้วใน การเก็งกำไรทางสถิติและการซื้อขายคู่; ถือว่าที่นี่ ประเด็นก็คือวิธีการแก้ไขตามปกติ — ความแตกต่าง แล้วทดสอบ — เป็นการตัดสินใจในการสร้างแบบจำลองที่มีผลกระทบที่ตามมา และโทดะ-ยามาโมโตะคือหนทางที่จะหลีกเลี่ยง
ขั้นตอนโทดะ-ยามาโมโตะ
ปรับ VAR ด้วยความล่าช้าของ โดยที่ เป็นลำดับความล่าช้าที่เหมาะสมที่สุด และ เป็นลำดับการรวมสูงสุดของซีรีส์ จากนั้นทดสอบข้อจำกัด เฉพาะความล่าช้าของ แรกเท่านั้น ความล่าช้าพิเศษของ จะดูดซับความไม่คงที่ สถิติ Wald บนค่าสัมประสิทธิ์ แรกเป็นไปตามมาตรฐาน ไม่ว่าอนุกรมจะเป็น I(0), I(1) หรือแบบรวมเหรียญก็ตาม
- กำหนด — ADF และ KPSS ในแต่ละซีรีส์ สำหรับราคา crypto เกือบตลอดเวลา
- เลือก — ปรับ VAR ให้เหมาะสมกับระดับ เลือกด้วย BIC
- ประมาณค่า Augmented VAR() ในระดับต่างๆ โดยไม่มีความแตกต่าง
- Wald ทดสอบความล่าช้าของ แรกเท่านั้น โดยไม่สนใจคุณสมบัติพิเศษของ ผลลัพธ์คือ
ผลตอบแทน: ไม่มีการทดสอบก่อนการรวม Cointegration ไม่มีความแตกต่าง และขนาดการทดสอบที่ถูกต้อง — อัตราการปฏิเสธภายใต้ค่า Null จะยังคงใกล้เคียงกับค่าที่กำหนด ไม่ว่าคุณสมบัติการรวมจะกลายเป็นเท่าใด ค่าใช้จ่ายอยู่ที่ขั้นตอนที่ 4 ไม่ใช่สิ่งที่ test_causality ทำโดยค่าเริ่มต้น ซึ่งเป็นจุดที่การใช้งานส่วนใหญ่ผิดพลาดอย่างเงียบๆ
การนำไปปฏิบัติ

สมมติว่าคุณได้จัดแนวแถบนาทีใน DataFrame แล้ว — ต้นแบบการดึงข้อมูลและดัชนี ccxt อยู่ใน การตรวจจับระบบด้วย HMM และ wrapper ADF ที่คุณจะใช้สำหรับขั้นตอนที่ 1 อยู่ใน การเก็งกำไรทางสถิติและการซื้อขายคู่
หมายเหตุเวอร์ชันหนึ่งก่อนการเรียกใช้ใดๆ นี้: grangercausalitytests(..., verbose=False) เลิกใช้แล้ว และ ถูกลบออกใน statsmodels 0.15 วางอาร์กิวเมนต์ (ฟังก์ชันจะไม่พิมพ์ตามค่าเริ่มต้นอีกต่อไป) หรือปักหมุด statsmodels<0.15 รหัสด้านล่างถือว่าลายเซ็นสมัยใหม่
โทดะ-ยามาโมโตะ ทำถูกต้องแล้ว
ข้อจำกัดจะต้องสร้างด้วยมือ VARResults.test_causality ทดสอบความล่าช้า ทั้งหมด ของตัวแปรที่ก่อให้เกิดในโมเดลที่ติดตั้งไว้ — บน VAR เสริม () ที่รวมความล่าช้าของ ไว้ในข้อจำกัด ซึ่งเป็นสิ่งที่ Toda-Yamamoto บอกว่าไม่ควรทำ การแก้ไขเป็นเมทริกซ์ ที่ชัดเจนเทียบกับค่าสัมประสิทธิ์ความแปรปรวนร่วมแบบเต็ม:
import numpy as np
from scipy.stats import chi2
from statsmodels.tsa.api import VAR
def toda_yamamoto_test(data, target, predictor, max_lag=15, d_max=1,
significance=0.05):
"""
Toda-Yamamoto Granger causality on levels (no differencing).
Fits VAR(p + d_max) and applies a Wald test to the predictor's
coefficients at lags 1..p ONLY, leaving the d_max augmenting lags
unrestricted. Statistic is chi2(p).
"""
pair = data[[target, predictor]].dropna()
n_vars = pair.shape[1]
target_idx = list(pair.columns).index(target)
pred_idx = list(pair.columns).index(predictor)
model = VAR(pair)
p = model.select_order(maxlags=max_lag).bic or 1
res = model.fit(p + d_max)
beta = res.params.values.ravel(order="F")
cov = res.cov_params()
cov = cov.values if hasattr(cov, "values") else np.asarray(cov)
n_per_eq = res.params.shape[0]
idx = [target_idx * n_per_eq + 1 + lag * n_vars + pred_idx
for lag in range(p)] # first p lags only
R = np.zeros((p, beta.size))
R[np.arange(p), idx] = 1.0
Rb = R @ beta
V = R @ cov @ R.T
wald = float(Rb @ np.linalg.solve(V, Rb)) # no pinv: V must be PD
p_value = float(chi2.sf(wald, df=p))
return {
"target": target, "predictor": predictor,
"p": p, "augmented_lag": p + d_max, "d_max": d_max,
"wald_stat": wald, "p_value": p_value,
"significant": p_value < significance,
}
รายละเอียดสองประการที่ผิดพลาดได้ง่ายและทำให้การทดสอบเป็นโมฆะหากคุณทำเช่นนั้น ขั้นแรก เลขคณิตดัชนีจะต้องตรงกับวิธีที่โมเดลสถิติทำให้ params แบนลง — ตรวจสอบโมเดลที่ติดตั้งไว้ว่า beta[target_idx * n_per_eq + 1] เท่ากับ res.params.iloc[1, target_idx] ก่อนที่จะเชื่อถือค่า p ใดๆ ประการที่สอง ใช้ np.linalg.solve ไม่ใช่ pinv: ถ้า เป็นเอกพจน์ ข้อจำกัดจะลดลงและการรันควรจะล้มเหลวอย่างดัง แทนที่จะส่งคืนตัวเลขที่ดูน่าเชื่อถือ การผกผันหลอกที่นี่คือวิธีที่การทดสอบ Wald ที่เสียหายสามารถอยู่รอดได้ในการตรวจสอบโค้ด
Granger ที่แตกต่างมาตรฐานสำหรับการเปรียบเทียบ
การเปรียบเทียบพื้นฐานนั้นเทียบกับ — log-returns, คู่เดียวกัน, BIC lag เดียวกัน:
from statsmodels.tsa.stattools import grangercausalitytests
def differenced_granger(data, target, predictor, p):
"""Standard Granger test on log-returns at a fixed lag p."""
pair = data[[target, predictor]].dropna() # returns, not levels
out = grangercausalitytests(pair, maxlag=[p]) # statsmodels >= 0.15
f_stat, p_value = out[p][0]["ssr_ftest"][:2]
return {"target": target, "predictor": predictor, "lag": p,
"f_stat": f_stat, "p_value": p_value}
หมายเหตุ maxlag=[p] แทนที่จะเป็น maxlag=p: การส่ง int รันทุกๆ ความล่าช้าตั้งแต่ 1 ถึง และล่อลวงให้คุณรายงานการทดสอบที่ดีที่สุด ซึ่งเป็นการทดสอบหลายรายการที่ไม่ได้บันทึก นอกเหนือจากการทดสอบหลายรายการที่คุณดำเนินการอยู่แล้ว
การเปรียบเทียบ
สำหรับแต่ละคู่ ให้ทำการทดสอบผลตอบแทนที่แตกต่างกันและระดับ Toda-Yamamoto ที่ ที่เลือก BIC เดียวกัน และจัดตารางจุดที่ทั้งสองไม่เห็นด้วย ความขัดแย้งเป็นเซลล์ที่น่าสนใจ: คู่ที่มีนัยสำคัญต่อความแตกต่างแต่ไม่อยู่ในระดับคือสิ่งที่ผู้สมัครต้องการในการสร้างความแตกต่างออกไปในความสัมพันธ์ที่ผสานกัน การย้อนกลับแสดงว่าความสัมพันธ์ระดับมีข้อมูลที่การทดสอบการส่งคืนไม่สามารถมองเห็นได้
การเปรียบเทียบหลายรายการบนเมทริกซ์เชิงสาเหตุ

เมทริกซ์ แบบเต็มเป็นจุดที่ทำให้เกิดอันตราย การกวาดล้าง 20 สินทรัพย์ 10 แล็กคือการทดสอบสมมติฐาน 3,800 ครั้ง และ Bonferroni เป็นการแก้ไขที่ไม่ถูกต้องสำหรับครอบครัวที่มีความสัมพันธ์กันนี้ การทดสอบจะแชร์ข้อมูล แบ่งปันปัจจัย BTC และไม่มีที่ไหนใกล้เคียงกัน ดังนั้น Bonferroni จึงมีการอนุรักษ์โดยรวมเกินไปและทำให้เข้าใจผิดว่าเซลล์ใดจะอยู่รอด ใช้เครื่องจักร มีประสิทธิภาพ-N จาก บทความ Sharpe ที่ยุบตัว ซึ่งสร้างขึ้นสำหรับสถานการณ์นี้โดยเฉพาะ: จัดกลุ่มกลุ่มการทดสอบที่สัมพันธ์กัน นับการทดลองอิสระมากกว่าการทดลองดิบ และเกณฑ์ขั้นต่ำเทียบกับสิ่งนั้น
def granger_matrix(data, max_lag=15, d_max=1):
"""Toda-Yamamoto p-value matrix. Entry (i, j): does col_j cause col_i?"""
cols = list(data.columns)
out = pd.DataFrame(np.nan, index=cols, columns=cols, dtype=float)
for target in cols:
for predictor in cols:
if target == predictor:
continue
r = toda_yamamoto_test(data, target, predictor,
max_lag=max_lag, d_max=d_max)
out.loc[target, predictor] = r["p_value"]
return out
ตัวเลขที่สำคัญไม่ใช่จำนวนเซลล์ที่ต่ำกว่า 0.05 แต่เป็นจำนวนเซลล์ที่รอดจากเกณฑ์ที่แก้ไขประสิทธิผล-N
อ่านเมทริกซ์ที่ยังมีชีวิตรอดในเชิงโครงสร้าง ไม่ใช่ทีละเซลล์: แถวที่เนื้อหาหนึ่งเป็นสาเหตุของอีกหลายๆ รายการยืนยันลำดับชั้นของข้อมูล คอลัมน์ที่เกิดจากไม่มีอะไรบ่งบอกถึงการเปลี่ยนแปลงที่แปลกประหลาดและมีโทเค็นเฉพาะมากกว่าการค้นพบ
การทดสอบอย่างตรงไปตรงมา: ความเสถียรในการหมุน

ค่า p-value ในตัวตัวอย่างเพียงค่าเดียวเกือบจะไร้ค่าสำหรับการซื้อขาย คำถามที่เกี่ยวข้องคือนัยสำคัญ คงอยู่ หรือไม่ ความสัมพันธ์ข้ามสินทรัพย์ใน crypto นั้นขึ้นอยู่กับระบอบการปกครอง — โครงสร้างความสัมพันธ์แตกต่างกันอย่างมากระหว่างความสงบและความตื่นตระหนก และระบอบการปกครองเองก็สามารถประมาณได้ (การตรวจจับระบอบการปกครอง HMM) — ดังนั้นความล่าช้าของตะกั่วที่ประมาณไว้ในช่วงหนึ่งหน้าต่างจึงเป็นข้อความเกี่ยวกับหน้าต่างนั้น
def rolling_granger(data, target, predictor, window=500, lag=5, step=50):
"""Rolling-window p-value: when is the lead-lag active vs dormant?"""
rows = []
for start in range(0, len(data) - window, step):
chunk = data.iloc[start:start + window][[target, predictor]].dropna()
if len(chunk) < window * 0.8:
continue
try:
out = grangercausalitytests(chunk, maxlag=[lag])
f_stat, p_value = out[lag][0]["ssr_ftest"][:2]
except Exception:
f_stat, p_value = np.nan, np.nan
rows.append({"timestamp": data.index[start + window - 1],
"f_stat": f_stat, "p_value": p_value})
return pd.DataFrame(rows).set_index("timestamp")
รายงานสองสิ่งจากชุดนี้: เศษส่วนของหน้าต่างที่ต่ำกว่า 0.05 และจำนวนการข้ามเกณฑ์ ความสัมพันธ์ที่มีนัยสำคัญใน 80% ของหน้าต่างที่มีจุดตัดกัน 3 จุดเป็นวัตถุที่แตกต่างจากจุดที่มีนัยสำคัญใน 55% ของหน้าต่างที่มีจุดตัดกัน 40 จุด แม้ว่าค่า p ที่รวมไว้จะเหมือนกันก็ตาม อย่างที่สองไม่สามารถซื้อขายได้ — คุณไม่สามารถปรับขนาดตำแหน่งบนสัญญาณที่มีการพลิกทุกๆ สองสามร้อยแท่งได้ และความล่าช้าในการประเมินใหม่รับประกันว่าคุณจะซื้อขายแบบเดิมเสมอ
กับดักข้อมูลเฉพาะของเกรนเจอร์

สุขอนามัยข้อมูล crypto ทั่วไปครอบคลุมอยู่ในที่อื่น — ช่องว่างและเทียนที่หายไปใน backtest-live parity, ระเบียบวินัยในการประทับเวลาใน อนุกรมวิธานอคติแบบมองไปข้างหน้า และ พิสูจน์ว่าไม่มีการมองไปข้างหน้าข้ามกรอบเวลา] โหมดความล้มเหลวโหมดหนึ่งเป็นแบบเฉพาะเจาะจงของ Granger และรุนแรงพอที่จะตั้งชื่อ:
การเติมไปข้างหน้าจะให้ผลลัพธ์ แท่งเทียนที่เติมไปข้างหน้าจะทำซ้ำการปิดครั้งก่อน ซึ่งแทรกความสัมพันธ์อัตโนมัติล้วนๆ เข้าไปในซีรีส์ และความสัมพันธ์อัตโนมัติ lag-1 ใน ที่อยู่ในแนวกลไกกับ นั้นแยกไม่ออกจากการทดสอบ F-test จากความสัมพันธ์เชิงสาเหตุหนึ่งความล่าช้า เช่นเดียวกับสถานที่ต่างๆ: การชดเชยเวลา 1 วินาทีระหว่างการแลกเปลี่ยนสองครั้ง บนแถบนาทีสามารถสร้างหรือทำลายนัยสำคัญความล่าช้า 1 ได้ทันที เนื่องจากจะเลื่อนด้านใดของขอบเขตแถบที่การเคลื่อนที่ตกลงไป ก่อนที่จะดำเนินการใดๆ ให้ตรวจสอบว่าช่องว่างถูกทิ้งแทนที่จะถูกเติมเต็ม และทั้งสองชุดถูกประทับตราจากนาฬิกาเดียวกัน
รายงานผลการค้นพบความล่าช้าในวรรณคดี

สิ่งเหล่านี้เป็นเพียงข้อมูลอ้างอิง ไม่ใช่การวัดผลจากบทความนี้ พวกเขามาที่นี่เพื่อพูดถึงสิ่งที่บันทึกที่เผยแพร่อ้าง เพื่อให้การเปรียบเทียบข้างต้นมีบางอย่างที่เห็นด้วยหรือไม่เห็นด้วย
- BTC เป็น altcoins การศึกษาในปี 2026 ใน ตลาดการเงินเอเชียแปซิฟิก (Springer) รายงานการส่งผ่านราคาความถี่สูงจาก Bitcoin ไปยัง altcoins โดยเหรียญขนาดเล็กแสดงการตอบสนองล่าช้าอย่างมีนัยสำคัญและสภาพคล่องลดลงซึ่งสัมพันธ์กับปฏิกิริยาที่ช้าลง ขนาดความล่าช้าที่อ้างถึงโดยทั่วไปจากสายงานนี้ - ประมาณ 1-3 นาที BTC ถึง ETH, ยาวกว่าสำหรับหมวกขนาดกลางและขนาดเล็ก, ทิศทางเดียวมากขึ้นเมื่อมูลค่าตลาดลดลง - เป็น การค้นพบที่อ้างถึง, ไม่ได้มาจากที่นี่อีกครั้ง การจัดระดับมูลค่าราคาตลาดที่พวกเขาพักนั้นเป็นลำดับเดียวกับที่ใช้ใน การตรวจสอบหลายสัญลักษณ์
- CEX เป็นผู้นำ DEX การวิจัยเกี่ยวกับโครงสร้างจุลภาคของสกุลเงินดิจิทัล (MDPI) รายงานสถานที่แบบรวมศูนย์ที่มีอำนาจเหนือการค้นพบราคา โดยมีการไหลของข้อมูลที่ทำงานจาก CEX-to-DEX และไม่มีสาเหตุย้อนกลับที่มีนัยสำคัญ — สอดคล้องกับกลไกการจับคู่ที่ต่ำกว่ามิลลิวินาทีกับการชำระราคาของบล็อก
- ETH เป็นเหรียญอิสระ งาน VAR-SVAR (MDPI) ค้นหาระบอบการปกครองที่ Ethereum ทำหน้าที่เป็นแหล่งที่มาและ Bitcoin เป็นผู้รับการล้น โดยเฉพาะในช่วงระยะที่ขับเคลื่อนด้วย DeFi และ NFT
กล่าวถึงการข้ามตลาดโดยสังเขป
ความล่าช้าของเหรียญเดียวกันสองสถานที่นั้นเป็นการตั้งค่าที่แท้จริง แต่เศรษฐศาสตร์ของมัน — เกณฑ์ค่าธรรมเนียม, บันไดแฝง, สาเหตุที่เกิดความล่าช้า — ได้ดำเนินการไปแล้วใน การเก็งกำไรทางสถิติและการซื้อขายคู่ และ กิมจิพรีเมี่ยม. สิ่งเดียวที่ Granger เพิ่มคือคำถามด้านความมั่นคง: Binance-to-Coinbase causality ถาวร มีนัยสำคัญหรือไม่ หรือมันสั่นไหวเหมือนอย่างอื่น? ดำเนินการทดสอบแบบกลิ้งบนคู่สถานที่จัดงาน คำตอบคืออนุกรมเวลาของค่า p ไม่ใช่ใช่
เปลี่ยนความสัมพันธ์นำ-ตามที่รอดมาเป็นสถานะการถือครอง

หากคู่หนึ่งผ่านเกณฑ์ที่แก้ไขแล้ว และ การทดสอบแบบกลิ้ง สัญญาณนั้นไม่สำคัญ: ตัวทำนายสะสมจะส่งคืนผ่านหน้าต่างความล่าช้า ซึ่งเป็นเกณฑ์
def lead_lag_signal(btc_returns, alt_returns, lag=5, threshold=0.001):
"""+1 / -1 / 0 on ALT from BTC's cumulative return over `lag` bars."""
btc_cum = btc_returns.rolling(lag).sum()
signal = pd.Series(0, index=alt_returns.index)
signal[btc_cum > threshold] = 1
signal[btc_cum < -threshold] = -1
return signal
สามสิ่งที่ไม่ได้เป็นส่วนหนึ่งของบทความนี้เนื่องจากมีการตัดสินไว้แล้วที่นี่:
- ต้นทุนเป็นตัวกำหนด สัญญาณความล่าช้าระดับนาทีของอัลท์คอยน์จะต้องชัดเจนต่อสเปรด ผลกระทบ และค่าธรรมเนียม — ดู โมเดลสลิปเพจและต้นทุน และ เศรษฐศาสตร์ผู้สร้างผู้รับ และ จะเกิดอะไรขึ้นเมื่อมีการใช้ต้นทุนกับผู้ชนะที่เลือก
- การกำหนดขนาดไม่ใช่การแปลงค่า p การปรับขนาดการเปิดรับแสงผกผันกับค่า p ของ Granger ไม่ถูกต้อง: ค่า p เป็นหลักฐานที่เทียบกับค่าว่าง ไม่ใช่ขนาดเอฟเฟกต์ และค่าจะเคลื่อนที่ตามความยาวของตัวอย่าง ขนาดของผลกระทบโดยประมาณและความไม่แน่นอน — ดู ขนาด Kelly
- การตรวจสอบความถูกต้องเป็นแบบก้าวไปข้างหน้า ประเมินใหม่แบบต่อเนื่องและประเมินนอกกลุ่มตัวอย่าง การเพิ่มประสิทธิภาพการเดินไปข้างหน้า เป็นโปรโตคอล
ข้อจำกัด

Granger causality ไม่ใช่สาเหตุ Confounders (เหตุการณ์มหภาคที่เคลื่อนขาทั้งสองข้างโดยมีการประทับเวลาไม่ตรงเล็กน้อย) ตัวขับเคลื่อนทั่วไป (ทั้งสอง Alts ติดตาม BTC ด้วยความเร็วที่แตกต่างกัน) และตัวแปรที่ละเว้น (ทดสอบ BTC ไปยัง DOGE โดยไม่มี ETH ในระบบ) ล้วนสร้างสถิติที่สำคัญโดยไม่มีการไหลของข้อมูลโดยตรง การจำกัดการทดสอบไบวาเรียตดังที่บทความนี้ทำ ทำให้ปัญหาของตัวแปรที่ถูกละไว้แย่ลง ไม่ดีขึ้น
ความเป็นเชิงเส้น การทดสอบจะเห็นเฉพาะโครงสร้างการทำนายเชิงเส้นในค่าเฉลี่ยแบบมีเงื่อนไข Crypto มีการจัดกลุ่มความผันผวน เอฟเฟกต์เลเวอเรจ และสวิตช์ระบอบการปกครอง — ดู การพยากรณ์ความผันผวนของ GARCH และ DCC-GARCH dynamic correlation สำหรับเรื่องราวช่วงเวลาที่สอง ทางเลือกที่ไม่เชิงเส้นที่ควรรู้: การทดสอบเคอร์เนล Diks-Panchenko (2006) การถ่ายโอนเอนโทรปีเป็นอะนาล็อกเชิงข้อมูลเชิงทฤษฎี และความสัมพันธ์เชิงสาเหตุร่วมของ Granger ในการกระจายข้อต่อแบบเต็ม
การแตกหักของโครงสร้าง ความสัมพันธ์ใดๆ ที่ประมาณไว้บนหน้าต่างเดียวนั้นขึ้นอยู่กับเงื่อนไขของระบอบการปกครองของหน้าต่างนั้น การทดสอบแบบกลิ้งด้านบนเป็นการวินิจฉัยขั้นต่ำ และเป็นการวินิจฉัย ไม่ใช่การแก้ไข
สรุป

- ติดตั้ง VAR บน ระดับ เลือก ด้วย BIC ต่อคู่ เพิ่มด้วย และทดสอบ Wald เฉพาะความล่าช้าของ แรกเท่านั้น สร้างเมทริกซ์ข้อจำกัดด้วยมือ —
test_causalityของไลบรารีก็จำกัดความล่าช้าในการเพิ่มด้วยเช่นกัน ซึ่งไม่ใช่ Toda-Yamamoto - รันการทดสอบการส่งคืนที่ต่างกันเป็นพื้นฐานในคู่และความล่าช้าเดียวกัน และ รายงานความขัดแย้ง ตารางนั้นคือการค้นพบ ไม่ใช่เมทริกซ์ของเครื่องหมายดอกจัน
- แก้ไขเมทริกซ์สำหรับกลุ่มการทดสอบที่สัมพันธ์กันโดยใช้ N ที่มีประสิทธิผล ไม่ใช่ Bonferroni และรายงานจำนวนเซลล์ที่รอดชีวิต
- ม้วนมัน รายงานเศษส่วนของหน้าต่างสำคัญและจำนวนการข้าม นัยสำคัญที่การกะพริบไม่ใช่ความล่าช้าที่สามารถแลกเปลี่ยนได้ ไม่ว่าค่า p-value ที่รวมกันจะน้อยเพียงใด
- ลดช่องว่างแทนการเติมไปข้างหน้า และตรวจสอบการวางตำแหน่งนาฬิกาข้ามสถานที่ ก่อนที่จะเชื่อผลความล่าช้า 1 ใดๆ
ผลลัพธ์ที่ดีอย่างสมบูรณ์ของขั้นตอนนี้คือค่าลบ ความสัมพันธ์ BTC-to-alt ซึ่งมีนัยสำคัญในตัวอย่าง ยังคงได้รับการแก้ไข และยังคงข้ามเส้น 0.05 ในทั้งสองทิศทางทุกๆ สองสามร้อยแท่งเป็นผลลัพธ์ที่แท้จริงเกี่ยวกับความสามารถในการซื้อขาย และคุ้มค่าที่จะเผยแพร่เป็นหนึ่งเดียว
อ้างอิง
- เกรนเจอร์, ซี.ดับบลิว.เจ. (1969). "การตรวจสอบความสัมพันธ์เชิงสาเหตุด้วยแบบจำลองทางเศรษฐมิติและวิธีการข้ามสเปกตรัม" เศรษฐมิติ, 37(3), 424-438.
- โทดะ, ฮ.วาย. และยามาโมโตะ ต. (1995) "การอนุมานทางสถิติในการถดถอยอัตโนมัติของเวกเตอร์ด้วยกระบวนการบูรณาการที่เป็นไปได้" วารสารเศรษฐมิติ, 66(1-2), 225-250.
- Diks, C. และ Panchenko, V. (2006) "แนวปฏิบัติทางสถิติและการปฏิบัติใหม่สำหรับการทดสอบเชิงสาเหตุแบบไม่ใช้พารามิเตอร์ของ Granger" วารสารพลวัตทางเศรษฐกิจและการควบคุม, 30(9-10), 1647-1669
- ซิฟัต, ไอ.เอ็ม., โมฮัมหมัด, อ. (2019) "ความสัมพันธ์แบบ Lead-Lag ระหว่าง Bitcoin และ Ethereum: หลักฐานจากข้อมูลรายชั่วโมงและรายวัน" การวิจัยในธุรกิจระหว่างประเทศและการเงิน, 50, 306-321
- "การส่งราคาจาก Bitcoin ไปยัง Altcoins: หลักฐานความถี่สูงและผลกระทบต่อกลยุทธ์การซื้อขาย" ตลาดการเงินในเอเชียแปซิฟิก, Springer, 2026
- "ความเสี่ยงที่ล้นตลาดสกุลเงินดิจิทัล: ดูจาก VAR-SVAR Granger Causality" Journal of Risk and Financial Management, MDPI
- "โครงสร้างสองระดับของตลาดอัตราการระดมทุนสกุลเงินดิจิทัล" คณิตศาสตร์, MDPI
- "การแลกเปลี่ยนแบบกระจายอำนาจและแบบรวมศูนย์: โทเค็นดิจิทัลใดที่มีความเสี่ยงในการแพร่กระจายมากกว่า" ScienceDirect, 2023
ผู้เขียน
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.