File size: 1,455 Bytes
8e50444
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import sys, os
import warnings; warnings.filterwarnings('ignore')

from backtesting.framework.config import STRATEGY_NAME, ACTIVE_STRATEGY_FN, ACTIVE_PARAMS, load_data

try:
    from v30_causal_engine import evaluate_slice
except ImportError:
    from backtesting.v30_causal_engine import evaluate_slice

def run_test_2_1():
    print("=" * 80)
    print(f" TEST 2.1: STRICT TRAIN/TEST SPLIT - {STRATEGY_NAME}")
    print("=" * 80)

    dc, spy, vf, daily_ret = load_data()
    
    print("Evaluating Full Strategy...")
    c = ACTIVE_STRATEGY_FN(dc, spy, vf, daily_ret, **ACTIVE_PARAMS)
    if isinstance(c, dict) and 'curve' in c:
        c = c['curve']
        
    m_train = evaluate_slice(c, "2008-01-01", "2018-12-31")
    m_test = evaluate_slice(c, "2019-01-01", "2025-12-31")
    
    print(f"  Train Sharpe (2008-2018): {m_train['sharpe']:.4f}")
    print(f"  Test Sharpe  (2019-2025): {m_test['sharpe']:.4f}")
    
    diff = m_test['sharpe'] - m_train['sharpe']
    print(f"  Difference (Out-of-Sample Lift): {diff:+.4f}")
    
    print("-" * 80)
    if diff > -0.20:
        if diff > 0:
            print("  VERDICT: STRONG PASS (Exceptionally robust, test improved)")
        else:
            print("  VERDICT: PASS (Test decay is within acceptable limits of -0.20)")
    else:
        print("  VERDICT: FAIL (Likely overfit, test decayed > -0.20)")

if __name__ == "__main__":
    run_test_2_1()