mirror of
https://github.com/BrentNeale1/fx-quant.git
synced 2026-08-05 06:37:44 +00:00
Add S8 Order Block (GBP_USD/M15) to Phase 2 portfolio
Tested all 9 untested strategies across 22 pair combos. S8 Order Block on GBP_USD was the standout: OOS PF=2.14, WR=65.4%, Gen=1.850 PASS. Parameter sweep confirmed DISPLACEMENT_ATR=2.0, TP1_ATR_MULT=1.0, OB_RETEST_WINDOW=40 as best params (all top-5 PASS OOS validation). Portfolio now 4 strategies: S7_Tight, S9_Filtered, S3, S8_OB. OOS portfolio: 82 trades, PF=1.61, WR=64.6%, Sharpe=2.98, +672 pips. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -95,128 +95,64 @@
|
||||
"verdict": "PASS"
|
||||
}
|
||||
},
|
||||
"S10_EUR_USD": {
|
||||
"pair": "EUR_USD",
|
||||
"S8_OB": {
|
||||
"pair": "GBP_USD",
|
||||
"timeframe": "M15",
|
||||
"is_metrics": {
|
||||
"trades": 13,
|
||||
"wr": 53.8,
|
||||
"pf": 1.67,
|
||||
"sharpe": 3.17,
|
||||
"pnl_pips": 20.1,
|
||||
"max_dd_pips": -13.1,
|
||||
"expectancy": 1.55
|
||||
"trades": 107,
|
||||
"wr": 46.7,
|
||||
"pf": 1.02,
|
||||
"sharpe": 0.15,
|
||||
"pnl_pips": 16.4,
|
||||
"max_dd_pips": -116.1,
|
||||
"expectancy": 0.15
|
||||
},
|
||||
"oos_metrics": {
|
||||
"trades": 6,
|
||||
"wr": 33.3,
|
||||
"pf": 1.19,
|
||||
"sharpe": 0.97,
|
||||
"pnl_pips": 1.5,
|
||||
"max_dd_pips": -7.9,
|
||||
"expectancy": 0.25
|
||||
"trades": 26,
|
||||
"wr": 65.4,
|
||||
"pf": 2.14,
|
||||
"sharpe": 4.55,
|
||||
"pnl_pips": 119.0,
|
||||
"max_dd_pips": -51.6,
|
||||
"expectancy": 4.58
|
||||
},
|
||||
"generalization": {
|
||||
"composite": 0.45,
|
||||
"composite": 1.85,
|
||||
"detail": {
|
||||
"wr": 0.619,
|
||||
"pf": 0.713,
|
||||
"expectancy": 0.161,
|
||||
"sharpe": 0.306
|
||||
"wr": 1.4,
|
||||
"pf": 2.0,
|
||||
"expectancy": 2.0,
|
||||
"sharpe": 2.0
|
||||
},
|
||||
"verdict": "FAIL"
|
||||
}
|
||||
},
|
||||
"S10_USD_JPY": {
|
||||
"pair": "USD_JPY",
|
||||
"timeframe": "M15",
|
||||
"is_metrics": {
|
||||
"trades": 20,
|
||||
"wr": 50.0,
|
||||
"pf": 2.08,
|
||||
"sharpe": 4.18,
|
||||
"pnl_pips": 51.5,
|
||||
"max_dd_pips": -19.3,
|
||||
"expectancy": 2.58
|
||||
},
|
||||
"oos_metrics": {
|
||||
"trades": 9,
|
||||
"wr": 33.3,
|
||||
"pf": 0.76,
|
||||
"sharpe": -1.48,
|
||||
"pnl_pips": -10.1,
|
||||
"max_dd_pips": -9.8,
|
||||
"expectancy": -1.13
|
||||
},
|
||||
"generalization": {
|
||||
"composite": 0.258,
|
||||
"detail": {
|
||||
"wr": 0.666,
|
||||
"pf": 0.365,
|
||||
"expectancy": 0.0,
|
||||
"sharpe": 0.0
|
||||
},
|
||||
"verdict": "FAIL"
|
||||
}
|
||||
},
|
||||
"S10_EUR_GBP": {
|
||||
"pair": "EUR_GBP",
|
||||
"timeframe": "M15",
|
||||
"is_metrics": {
|
||||
"trades": 15,
|
||||
"wr": 33.3,
|
||||
"pf": 0.98,
|
||||
"sharpe": -0.14,
|
||||
"pnl_pips": -0.8,
|
||||
"max_dd_pips": -29.2,
|
||||
"expectancy": -0.06
|
||||
},
|
||||
"oos_metrics": {
|
||||
"trades": 7,
|
||||
"wr": 42.9,
|
||||
"pf": 1.28,
|
||||
"sharpe": 1.61,
|
||||
"pnl_pips": 3.5,
|
||||
"max_dd_pips": -9.4,
|
||||
"expectancy": 0.49
|
||||
},
|
||||
"generalization": {
|
||||
"composite": 0.649,
|
||||
"detail": {
|
||||
"wr": 1.288,
|
||||
"pf": 1.306,
|
||||
"expectancy": 0,
|
||||
"sharpe": 0
|
||||
},
|
||||
"verdict": "WARN"
|
||||
"verdict": "PASS"
|
||||
}
|
||||
},
|
||||
"_portfolio": {
|
||||
"is_metrics": {
|
||||
"trades": 197,
|
||||
"wr": 54.8,
|
||||
"pf": 1.3,
|
||||
"sharpe": 1.58,
|
||||
"pnl_pips": 936.6,
|
||||
"trades": 256,
|
||||
"wr": 53.1,
|
||||
"pf": 1.24,
|
||||
"sharpe": 1.27,
|
||||
"pnl_pips": 882.2,
|
||||
"max_dd_pips": -597.5,
|
||||
"expectancy": 4.75
|
||||
"expectancy": 3.45
|
||||
},
|
||||
"oos_metrics": {
|
||||
"trades": 78,
|
||||
"wr": 56.4,
|
||||
"pf": 1.51,
|
||||
"sharpe": 2.52,
|
||||
"pnl_pips": 548.2,
|
||||
"max_dd_pips": -208.7,
|
||||
"expectancy": 7.03
|
||||
"trades": 82,
|
||||
"wr": 64.6,
|
||||
"pf": 1.61,
|
||||
"sharpe": 2.98,
|
||||
"pnl_pips": 672.3,
|
||||
"max_dd_pips": -182.9,
|
||||
"expectancy": 8.2
|
||||
},
|
||||
"generalization": {
|
||||
"composite": 1.316,
|
||||
"composite": 1.629,
|
||||
"detail": {
|
||||
"wr": 1.029,
|
||||
"pf": 1.162,
|
||||
"expectancy": 1.48,
|
||||
"sharpe": 1.595
|
||||
"wr": 1.217,
|
||||
"pf": 1.298,
|
||||
"expectancy": 2.0,
|
||||
"sharpe": 2.0
|
||||
},
|
||||
"verdict": "PASS"
|
||||
}
|
||||
|
||||
@@ -0,0 +1,609 @@
|
||||
{
|
||||
"pair": "GBP_USD",
|
||||
"timeframe": "M15",
|
||||
"htf": "H1",
|
||||
"combos_tested": 27,
|
||||
"is_results_ranked": [
|
||||
{
|
||||
"rank": 1,
|
||||
"params": {
|
||||
"DISPLACEMENT_ATR": 2.0,
|
||||
"TP1_ATR_MULT": 1.0,
|
||||
"OB_RETEST_WINDOW": 40
|
||||
},
|
||||
"metrics": {
|
||||
"trades": 107,
|
||||
"wr": 46.7,
|
||||
"pf": 1.02,
|
||||
"sharpe": 0.15,
|
||||
"pnl_pips": 16.4,
|
||||
"max_dd_pips": -116.1,
|
||||
"expectancy": 0.15
|
||||
}
|
||||
},
|
||||
{
|
||||
"rank": 2,
|
||||
"params": {
|
||||
"DISPLACEMENT_ATR": 2.0,
|
||||
"TP1_ATR_MULT": 1.5,
|
||||
"OB_RETEST_WINDOW": 40
|
||||
},
|
||||
"metrics": {
|
||||
"trades": 129,
|
||||
"wr": 41.9,
|
||||
"pf": 0.93,
|
||||
"sharpe": -0.44,
|
||||
"pnl_pips": -74.3,
|
||||
"max_dd_pips": -257.2,
|
||||
"expectancy": -0.58
|
||||
}
|
||||
},
|
||||
{
|
||||
"rank": 3,
|
||||
"params": {
|
||||
"DISPLACEMENT_ATR": 2.0,
|
||||
"TP1_ATR_MULT": 2.0,
|
||||
"OB_RETEST_WINDOW": 40
|
||||
},
|
||||
"metrics": {
|
||||
"trades": 132,
|
||||
"wr": 35.6,
|
||||
"pf": 0.92,
|
||||
"sharpe": -0.54,
|
||||
"pnl_pips": -113.7,
|
||||
"max_dd_pips": -395.1,
|
||||
"expectancy": -0.86
|
||||
}
|
||||
},
|
||||
{
|
||||
"rank": 4,
|
||||
"params": {
|
||||
"DISPLACEMENT_ATR": 2.0,
|
||||
"TP1_ATR_MULT": 1.5,
|
||||
"OB_RETEST_WINDOW": 30
|
||||
},
|
||||
"metrics": {
|
||||
"trades": 116,
|
||||
"wr": 40.5,
|
||||
"pf": 0.88,
|
||||
"sharpe": -0.79,
|
||||
"pnl_pips": -117.3,
|
||||
"max_dd_pips": -209.9,
|
||||
"expectancy": -1.01
|
||||
}
|
||||
},
|
||||
{
|
||||
"rank": 5,
|
||||
"params": {
|
||||
"DISPLACEMENT_ATR": 2.0,
|
||||
"TP1_ATR_MULT": 1.0,
|
||||
"OB_RETEST_WINDOW": 30
|
||||
},
|
||||
"metrics": {
|
||||
"trades": 95,
|
||||
"wr": 43.2,
|
||||
"pf": 0.87,
|
||||
"sharpe": -0.89,
|
||||
"pnl_pips": -85.9,
|
||||
"max_dd_pips": -138.1,
|
||||
"expectancy": -0.9
|
||||
}
|
||||
},
|
||||
{
|
||||
"rank": 6,
|
||||
"params": {
|
||||
"DISPLACEMENT_ATR": 2.0,
|
||||
"TP1_ATR_MULT": 2.0,
|
||||
"OB_RETEST_WINDOW": 30
|
||||
},
|
||||
"metrics": {
|
||||
"trades": 119,
|
||||
"wr": 34.5,
|
||||
"pf": 0.86,
|
||||
"sharpe": -0.93,
|
||||
"pnl_pips": -174.8,
|
||||
"max_dd_pips": -364.7,
|
||||
"expectancy": -1.47
|
||||
}
|
||||
},
|
||||
{
|
||||
"rank": 7,
|
||||
"params": {
|
||||
"DISPLACEMENT_ATR": 1.5,
|
||||
"TP1_ATR_MULT": 2.0,
|
||||
"OB_RETEST_WINDOW": 40
|
||||
},
|
||||
"metrics": {
|
||||
"trades": 320,
|
||||
"wr": 33.4,
|
||||
"pf": 0.82,
|
||||
"sharpe": -1.29,
|
||||
"pnl_pips": -561.3,
|
||||
"max_dd_pips": -888.8,
|
||||
"expectancy": -1.75
|
||||
}
|
||||
},
|
||||
{
|
||||
"rank": 8,
|
||||
"params": {
|
||||
"DISPLACEMENT_ATR": 1.5,
|
||||
"TP1_ATR_MULT": 1.5,
|
||||
"OB_RETEST_WINDOW": 40
|
||||
},
|
||||
"metrics": {
|
||||
"trades": 319,
|
||||
"wr": 38.9,
|
||||
"pf": 0.8,
|
||||
"sharpe": -1.47,
|
||||
"pnl_pips": -535.9,
|
||||
"max_dd_pips": -723.6,
|
||||
"expectancy": -1.68
|
||||
}
|
||||
},
|
||||
{
|
||||
"rank": 9,
|
||||
"params": {
|
||||
"DISPLACEMENT_ATR": 1.5,
|
||||
"TP1_ATR_MULT": 1.5,
|
||||
"OB_RETEST_WINDOW": 30
|
||||
},
|
||||
"metrics": {
|
||||
"trades": 273,
|
||||
"wr": 39.2,
|
||||
"pf": 0.8,
|
||||
"sharpe": -1.5,
|
||||
"pnl_pips": -459.6,
|
||||
"max_dd_pips": -509.6,
|
||||
"expectancy": -1.68
|
||||
}
|
||||
},
|
||||
{
|
||||
"rank": 10,
|
||||
"params": {
|
||||
"DISPLACEMENT_ATR": 1.5,
|
||||
"TP1_ATR_MULT": 2.0,
|
||||
"OB_RETEST_WINDOW": 30
|
||||
},
|
||||
"metrics": {
|
||||
"trades": 273,
|
||||
"wr": 33.3,
|
||||
"pf": 0.8,
|
||||
"sharpe": -1.4,
|
||||
"pnl_pips": -517.0,
|
||||
"max_dd_pips": -673.6,
|
||||
"expectancy": -1.89
|
||||
}
|
||||
},
|
||||
{
|
||||
"rank": 11,
|
||||
"params": {
|
||||
"DISPLACEMENT_ATR": 2.0,
|
||||
"TP1_ATR_MULT": 1.5,
|
||||
"OB_RETEST_WINDOW": 20
|
||||
},
|
||||
"metrics": {
|
||||
"trades": 80,
|
||||
"wr": 36.2,
|
||||
"pf": 0.8,
|
||||
"sharpe": -1.35,
|
||||
"pnl_pips": -145.1,
|
||||
"max_dd_pips": -231.6,
|
||||
"expectancy": -1.81
|
||||
}
|
||||
},
|
||||
{
|
||||
"rank": 12,
|
||||
"params": {
|
||||
"DISPLACEMENT_ATR": 1.5,
|
||||
"TP1_ATR_MULT": 1.0,
|
||||
"OB_RETEST_WINDOW": 40
|
||||
},
|
||||
"metrics": {
|
||||
"trades": 271,
|
||||
"wr": 44.3,
|
||||
"pf": 0.79,
|
||||
"sharpe": -1.46,
|
||||
"pnl_pips": -355.9,
|
||||
"max_dd_pips": -391.1,
|
||||
"expectancy": -1.31
|
||||
}
|
||||
},
|
||||
{
|
||||
"rank": 13,
|
||||
"params": {
|
||||
"DISPLACEMENT_ATR": 1.5,
|
||||
"TP1_ATR_MULT": 1.0,
|
||||
"OB_RETEST_WINDOW": 30
|
||||
},
|
||||
"metrics": {
|
||||
"trades": 226,
|
||||
"wr": 44.2,
|
||||
"pf": 0.78,
|
||||
"sharpe": -1.63,
|
||||
"pnl_pips": -321.4,
|
||||
"max_dd_pips": -313.9,
|
||||
"expectancy": -1.42
|
||||
}
|
||||
},
|
||||
{
|
||||
"rank": 14,
|
||||
"params": {
|
||||
"DISPLACEMENT_ATR": 1.5,
|
||||
"TP1_ATR_MULT": 1.5,
|
||||
"OB_RETEST_WINDOW": 20
|
||||
},
|
||||
"metrics": {
|
||||
"trades": 187,
|
||||
"wr": 38.0,
|
||||
"pf": 0.77,
|
||||
"sharpe": -1.67,
|
||||
"pnl_pips": -357.8,
|
||||
"max_dd_pips": -461.3,
|
||||
"expectancy": -1.91
|
||||
}
|
||||
},
|
||||
{
|
||||
"rank": 15,
|
||||
"params": {
|
||||
"DISPLACEMENT_ATR": 2.0,
|
||||
"TP1_ATR_MULT": 1.0,
|
||||
"OB_RETEST_WINDOW": 20
|
||||
},
|
||||
"metrics": {
|
||||
"trades": 63,
|
||||
"wr": 38.1,
|
||||
"pf": 0.76,
|
||||
"sharpe": -1.71,
|
||||
"pnl_pips": -109.1,
|
||||
"max_dd_pips": -175.0,
|
||||
"expectancy": -1.73
|
||||
}
|
||||
},
|
||||
{
|
||||
"rank": 16,
|
||||
"params": {
|
||||
"DISPLACEMENT_ATR": 1.5,
|
||||
"TP1_ATR_MULT": 2.0,
|
||||
"OB_RETEST_WINDOW": 20
|
||||
},
|
||||
"metrics": {
|
||||
"trades": 189,
|
||||
"wr": 32.3,
|
||||
"pf": 0.75,
|
||||
"sharpe": -1.82,
|
||||
"pnl_pips": -482.4,
|
||||
"max_dd_pips": -596.3,
|
||||
"expectancy": -2.55
|
||||
}
|
||||
},
|
||||
{
|
||||
"rank": 17,
|
||||
"params": {
|
||||
"DISPLACEMENT_ATR": 2.0,
|
||||
"TP1_ATR_MULT": 2.0,
|
||||
"OB_RETEST_WINDOW": 20
|
||||
},
|
||||
"metrics": {
|
||||
"trades": 83,
|
||||
"wr": 30.1,
|
||||
"pf": 0.73,
|
||||
"sharpe": -1.91,
|
||||
"pnl_pips": -265.9,
|
||||
"max_dd_pips": -384.7,
|
||||
"expectancy": -3.2
|
||||
}
|
||||
},
|
||||
{
|
||||
"rank": 18,
|
||||
"params": {
|
||||
"DISPLACEMENT_ATR": 1.0,
|
||||
"TP1_ATR_MULT": 2.0,
|
||||
"OB_RETEST_WINDOW": 30
|
||||
},
|
||||
"metrics": {
|
||||
"trades": 521,
|
||||
"wr": 30.5,
|
||||
"pf": 0.71,
|
||||
"sharpe": -2.22,
|
||||
"pnl_pips": -1435.4,
|
||||
"max_dd_pips": -1444.2,
|
||||
"expectancy": -2.76
|
||||
}
|
||||
},
|
||||
{
|
||||
"rank": 19,
|
||||
"params": {
|
||||
"DISPLACEMENT_ATR": 1.0,
|
||||
"TP1_ATR_MULT": 1.5,
|
||||
"OB_RETEST_WINDOW": 30
|
||||
},
|
||||
"metrics": {
|
||||
"trades": 522,
|
||||
"wr": 36.4,
|
||||
"pf": 0.7,
|
||||
"sharpe": -2.34,
|
||||
"pnl_pips": -1305.2,
|
||||
"max_dd_pips": -1331.9,
|
||||
"expectancy": -2.5
|
||||
}
|
||||
},
|
||||
{
|
||||
"rank": 20,
|
||||
"params": {
|
||||
"DISPLACEMENT_ATR": 1.0,
|
||||
"TP1_ATR_MULT": 2.0,
|
||||
"OB_RETEST_WINDOW": 40
|
||||
},
|
||||
"metrics": {
|
||||
"trades": 615,
|
||||
"wr": 29.3,
|
||||
"pf": 0.69,
|
||||
"sharpe": -2.34,
|
||||
"pnl_pips": -1765.6,
|
||||
"max_dd_pips": -1761.2,
|
||||
"expectancy": -2.87
|
||||
}
|
||||
},
|
||||
{
|
||||
"rank": 21,
|
||||
"params": {
|
||||
"DISPLACEMENT_ATR": 1.0,
|
||||
"TP1_ATR_MULT": 1.0,
|
||||
"OB_RETEST_WINDOW": 40
|
||||
},
|
||||
"metrics": {
|
||||
"trades": 524,
|
||||
"wr": 40.6,
|
||||
"pf": 0.69,
|
||||
"sharpe": -2.34,
|
||||
"pnl_pips": -1049.1,
|
||||
"max_dd_pips": -1072.5,
|
||||
"expectancy": -2.0
|
||||
}
|
||||
},
|
||||
{
|
||||
"rank": 22,
|
||||
"params": {
|
||||
"DISPLACEMENT_ATR": 1.0,
|
||||
"TP1_ATR_MULT": 1.0,
|
||||
"OB_RETEST_WINDOW": 30
|
||||
},
|
||||
"metrics": {
|
||||
"trades": 427,
|
||||
"wr": 41.2,
|
||||
"pf": 0.69,
|
||||
"sharpe": -2.44,
|
||||
"pnl_pips": -871.7,
|
||||
"max_dd_pips": -895.0,
|
||||
"expectancy": -2.04
|
||||
}
|
||||
},
|
||||
{
|
||||
"rank": 23,
|
||||
"params": {
|
||||
"DISPLACEMENT_ATR": 1.0,
|
||||
"TP1_ATR_MULT": 1.5,
|
||||
"OB_RETEST_WINDOW": 40
|
||||
},
|
||||
"metrics": {
|
||||
"trades": 619,
|
||||
"wr": 34.9,
|
||||
"pf": 0.68,
|
||||
"sharpe": -2.53,
|
||||
"pnl_pips": -1659.0,
|
||||
"max_dd_pips": -1685.7,
|
||||
"expectancy": -2.68
|
||||
}
|
||||
},
|
||||
{
|
||||
"rank": 24,
|
||||
"params": {
|
||||
"DISPLACEMENT_ATR": 1.5,
|
||||
"TP1_ATR_MULT": 1.0,
|
||||
"OB_RETEST_WINDOW": 20
|
||||
},
|
||||
"metrics": {
|
||||
"trades": 144,
|
||||
"wr": 40.3,
|
||||
"pf": 0.67,
|
||||
"sharpe": -2.59,
|
||||
"pnl_pips": -315.3,
|
||||
"max_dd_pips": -346.0,
|
||||
"expectancy": -2.19
|
||||
}
|
||||
},
|
||||
{
|
||||
"rank": 25,
|
||||
"params": {
|
||||
"DISPLACEMENT_ATR": 1.0,
|
||||
"TP1_ATR_MULT": 1.5,
|
||||
"OB_RETEST_WINDOW": 20
|
||||
},
|
||||
"metrics": {
|
||||
"trades": 369,
|
||||
"wr": 34.7,
|
||||
"pf": 0.64,
|
||||
"sharpe": -2.87,
|
||||
"pnl_pips": -1148.3,
|
||||
"max_dd_pips": -1244.8,
|
||||
"expectancy": -3.11
|
||||
}
|
||||
},
|
||||
{
|
||||
"rank": 26,
|
||||
"params": {
|
||||
"DISPLACEMENT_ATR": 1.0,
|
||||
"TP1_ATR_MULT": 2.0,
|
||||
"OB_RETEST_WINDOW": 20
|
||||
},
|
||||
"metrics": {
|
||||
"trades": 373,
|
||||
"wr": 28.7,
|
||||
"pf": 0.62,
|
||||
"sharpe": -3.02,
|
||||
"pnl_pips": -1418.4,
|
||||
"max_dd_pips": -1467.9,
|
||||
"expectancy": -3.8
|
||||
}
|
||||
},
|
||||
{
|
||||
"rank": 27,
|
||||
"params": {
|
||||
"DISPLACEMENT_ATR": 1.0,
|
||||
"TP1_ATR_MULT": 1.0,
|
||||
"OB_RETEST_WINDOW": 20
|
||||
},
|
||||
"metrics": {
|
||||
"trades": 286,
|
||||
"wr": 38.5,
|
||||
"pf": 0.6,
|
||||
"sharpe": -3.33,
|
||||
"pnl_pips": -753.0,
|
||||
"max_dd_pips": -795.6,
|
||||
"expectancy": -2.63
|
||||
}
|
||||
}
|
||||
],
|
||||
"oos_validation": [
|
||||
{
|
||||
"rank": 1,
|
||||
"params": {
|
||||
"DISPLACEMENT_ATR": 2.0,
|
||||
"TP1_ATR_MULT": 1.0,
|
||||
"OB_RETEST_WINDOW": 40
|
||||
},
|
||||
"is_metrics": {
|
||||
"trades": 107,
|
||||
"wr": 46.7,
|
||||
"pf": 1.02,
|
||||
"sharpe": 0.15,
|
||||
"pnl_pips": 16.4,
|
||||
"max_dd_pips": -116.1,
|
||||
"expectancy": 0.15
|
||||
},
|
||||
"oos_metrics": {
|
||||
"trades": 26,
|
||||
"wr": 65.4,
|
||||
"pf": 2.14,
|
||||
"sharpe": 4.55,
|
||||
"pnl_pips": 119.0,
|
||||
"max_dd_pips": -51.6,
|
||||
"expectancy": 4.58
|
||||
},
|
||||
"generalization_score": 1.85,
|
||||
"verdict": "PASS"
|
||||
},
|
||||
{
|
||||
"rank": 2,
|
||||
"params": {
|
||||
"DISPLACEMENT_ATR": 2.0,
|
||||
"TP1_ATR_MULT": 1.5,
|
||||
"OB_RETEST_WINDOW": 40
|
||||
},
|
||||
"is_metrics": {
|
||||
"trades": 129,
|
||||
"wr": 41.9,
|
||||
"pf": 0.93,
|
||||
"sharpe": -0.44,
|
||||
"pnl_pips": -74.3,
|
||||
"max_dd_pips": -257.2,
|
||||
"expectancy": -0.58
|
||||
},
|
||||
"oos_metrics": {
|
||||
"trades": 36,
|
||||
"wr": 52.8,
|
||||
"pf": 1.2,
|
||||
"sharpe": 1.15,
|
||||
"pnl_pips": 52.1,
|
||||
"max_dd_pips": -111.6,
|
||||
"expectancy": 1.45
|
||||
},
|
||||
"generalization_score": 1.275,
|
||||
"verdict": "PASS"
|
||||
},
|
||||
{
|
||||
"rank": 3,
|
||||
"params": {
|
||||
"DISPLACEMENT_ATR": 2.0,
|
||||
"TP1_ATR_MULT": 2.0,
|
||||
"OB_RETEST_WINDOW": 40
|
||||
},
|
||||
"is_metrics": {
|
||||
"trades": 132,
|
||||
"wr": 35.6,
|
||||
"pf": 0.92,
|
||||
"sharpe": -0.54,
|
||||
"pnl_pips": -113.7,
|
||||
"max_dd_pips": -395.1,
|
||||
"expectancy": -0.86
|
||||
},
|
||||
"oos_metrics": {
|
||||
"trades": 34,
|
||||
"wr": 44.1,
|
||||
"pf": 1.26,
|
||||
"sharpe": 1.54,
|
||||
"pnl_pips": 76.4,
|
||||
"max_dd_pips": -118.5,
|
||||
"expectancy": 2.25
|
||||
},
|
||||
"generalization_score": 1.304,
|
||||
"verdict": "PASS"
|
||||
},
|
||||
{
|
||||
"rank": 4,
|
||||
"params": {
|
||||
"DISPLACEMENT_ATR": 2.0,
|
||||
"TP1_ATR_MULT": 1.5,
|
||||
"OB_RETEST_WINDOW": 30
|
||||
},
|
||||
"is_metrics": {
|
||||
"trades": 116,
|
||||
"wr": 40.5,
|
||||
"pf": 0.88,
|
||||
"sharpe": -0.79,
|
||||
"pnl_pips": -117.3,
|
||||
"max_dd_pips": -209.9,
|
||||
"expectancy": -1.01
|
||||
},
|
||||
"oos_metrics": {
|
||||
"trades": 26,
|
||||
"wr": 53.8,
|
||||
"pf": 1.23,
|
||||
"sharpe": 1.26,
|
||||
"pnl_pips": 43.9,
|
||||
"max_dd_pips": -84.1,
|
||||
"expectancy": 1.69
|
||||
},
|
||||
"generalization_score": 1.363,
|
||||
"verdict": "PASS"
|
||||
},
|
||||
{
|
||||
"rank": 5,
|
||||
"params": {
|
||||
"DISPLACEMENT_ATR": 2.0,
|
||||
"TP1_ATR_MULT": 1.0,
|
||||
"OB_RETEST_WINDOW": 30
|
||||
},
|
||||
"is_metrics": {
|
||||
"trades": 95,
|
||||
"wr": 43.2,
|
||||
"pf": 0.87,
|
||||
"sharpe": -0.89,
|
||||
"pnl_pips": -85.9,
|
||||
"max_dd_pips": -138.1,
|
||||
"expectancy": -0.9
|
||||
},
|
||||
"oos_metrics": {
|
||||
"trades": 19,
|
||||
"wr": 68.4,
|
||||
"pf": 2.4,
|
||||
"sharpe": 4.95,
|
||||
"pnl_pips": 98.0,
|
||||
"max_dd_pips": -26.4,
|
||||
"expectancy": 5.16
|
||||
},
|
||||
"generalization_score": 1.792,
|
||||
"verdict": "PASS"
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,696 @@
|
||||
{
|
||||
"S1_GBP_JPY": {
|
||||
"pair": "GBP_JPY",
|
||||
"timeframe": "M15",
|
||||
"is_metrics": {
|
||||
"trades": 27,
|
||||
"wr": 22.2,
|
||||
"pf": 0.4,
|
||||
"sharpe": -5.97,
|
||||
"pnl_pips": -246.3,
|
||||
"max_dd_pips": -283.4,
|
||||
"expectancy": -9.12
|
||||
},
|
||||
"oos_metrics": {
|
||||
"trades": 7,
|
||||
"wr": 42.9,
|
||||
"pf": 0.97,
|
||||
"sharpe": -0.24,
|
||||
"pnl_pips": -3.6,
|
||||
"max_dd_pips": -40.3,
|
||||
"expectancy": -0.51
|
||||
},
|
||||
"generalization": {
|
||||
"composite": 0.983,
|
||||
"detail": {
|
||||
"wr": 1.932,
|
||||
"pf": 2.0,
|
||||
"expectancy": 0,
|
||||
"sharpe": 0
|
||||
},
|
||||
"verdict": "PASS"
|
||||
}
|
||||
},
|
||||
"S1_GBP_USD": {
|
||||
"pair": "GBP_USD",
|
||||
"timeframe": "M15",
|
||||
"is_metrics": {
|
||||
"trades": 24,
|
||||
"wr": 45.8,
|
||||
"pf": 0.93,
|
||||
"sharpe": -0.51,
|
||||
"pnl_pips": -15.2,
|
||||
"max_dd_pips": -93.7,
|
||||
"expectancy": -0.64
|
||||
},
|
||||
"oos_metrics": {
|
||||
"trades": 9,
|
||||
"wr": 22.2,
|
||||
"pf": 0.32,
|
||||
"sharpe": -8.06,
|
||||
"pnl_pips": -55.0,
|
||||
"max_dd_pips": -60.8,
|
||||
"expectancy": -6.11
|
||||
},
|
||||
"generalization": {
|
||||
"composite": 0.207,
|
||||
"detail": {
|
||||
"wr": 0.485,
|
||||
"pf": 0.344,
|
||||
"expectancy": 0,
|
||||
"sharpe": 0
|
||||
},
|
||||
"verdict": "FAIL"
|
||||
}
|
||||
},
|
||||
"S1_EUR_USD": {
|
||||
"pair": "EUR_USD",
|
||||
"timeframe": "M15",
|
||||
"is_metrics": {
|
||||
"trades": 22,
|
||||
"wr": 36.4,
|
||||
"pf": 1.0,
|
||||
"sharpe": -0.02,
|
||||
"pnl_pips": -0.5,
|
||||
"max_dd_pips": -115.0,
|
||||
"expectancy": -0.02
|
||||
},
|
||||
"oos_metrics": {
|
||||
"trades": 5,
|
||||
"wr": 20.0,
|
||||
"pf": 0.12,
|
||||
"sharpe": -15.3,
|
||||
"pnl_pips": -37.7,
|
||||
"max_dd_pips": -31.7,
|
||||
"expectancy": -7.54
|
||||
},
|
||||
"generalization": {
|
||||
"composite": 0.167,
|
||||
"detail": {
|
||||
"wr": 0.549,
|
||||
"pf": 0.12,
|
||||
"expectancy": 0,
|
||||
"sharpe": 0
|
||||
},
|
||||
"verdict": "FAIL"
|
||||
}
|
||||
},
|
||||
"S2_EUR_USD": {
|
||||
"pair": "EUR_USD",
|
||||
"timeframe": "M15",
|
||||
"is_metrics": {
|
||||
"trades": 310,
|
||||
"wr": 25.8,
|
||||
"pf": 0.77,
|
||||
"sharpe": -1.64,
|
||||
"pnl_pips": -533.2,
|
||||
"max_dd_pips": -708.4,
|
||||
"expectancy": -1.72
|
||||
},
|
||||
"oos_metrics": {
|
||||
"trades": 108,
|
||||
"wr": 27.8,
|
||||
"pf": 0.87,
|
||||
"sharpe": -0.85,
|
||||
"pnl_pips": -94.6,
|
||||
"max_dd_pips": -294.3,
|
||||
"expectancy": -0.88
|
||||
},
|
||||
"generalization": {
|
||||
"composite": 0.552,
|
||||
"detail": {
|
||||
"wr": 1.078,
|
||||
"pf": 1.13,
|
||||
"expectancy": 0,
|
||||
"sharpe": 0
|
||||
},
|
||||
"verdict": "WARN"
|
||||
}
|
||||
},
|
||||
"S2_GBP_JPY": {
|
||||
"pair": "GBP_JPY",
|
||||
"timeframe": "M15",
|
||||
"is_metrics": {
|
||||
"trades": 283,
|
||||
"wr": 23.3,
|
||||
"pf": 0.66,
|
||||
"sharpe": -2.5,
|
||||
"pnl_pips": -1235.0,
|
||||
"max_dd_pips": -1314.1,
|
||||
"expectancy": -4.36
|
||||
},
|
||||
"oos_metrics": {
|
||||
"trades": 96,
|
||||
"wr": 21.9,
|
||||
"pf": 0.62,
|
||||
"sharpe": -3.04,
|
||||
"pnl_pips": -505.6,
|
||||
"max_dd_pips": -509.6,
|
||||
"expectancy": -5.27
|
||||
},
|
||||
"generalization": {
|
||||
"composite": 0.47,
|
||||
"detail": {
|
||||
"wr": 0.94,
|
||||
"pf": 0.939,
|
||||
"expectancy": 0,
|
||||
"sharpe": 0
|
||||
},
|
||||
"verdict": "FAIL"
|
||||
}
|
||||
},
|
||||
"S2_GBP_USD": {
|
||||
"pair": "GBP_USD",
|
||||
"timeframe": "M15",
|
||||
"is_metrics": {
|
||||
"trades": 310,
|
||||
"wr": 23.9,
|
||||
"pf": 0.69,
|
||||
"sharpe": -2.28,
|
||||
"pnl_pips": -917.9,
|
||||
"max_dd_pips": -1158.8,
|
||||
"expectancy": -2.96
|
||||
},
|
||||
"oos_metrics": {
|
||||
"trades": 107,
|
||||
"wr": 32.7,
|
||||
"pf": 1.13,
|
||||
"sharpe": 0.77,
|
||||
"pnl_pips": 115.2,
|
||||
"max_dd_pips": -318.7,
|
||||
"expectancy": 1.08
|
||||
},
|
||||
"generalization": {
|
||||
"composite": 0.751,
|
||||
"detail": {
|
||||
"wr": 1.368,
|
||||
"pf": 1.638,
|
||||
"expectancy": 0,
|
||||
"sharpe": 0
|
||||
},
|
||||
"verdict": "WARN"
|
||||
}
|
||||
},
|
||||
"S5_GBP_JPY": {
|
||||
"pair": "GBP_JPY",
|
||||
"timeframe": "M15",
|
||||
"is_metrics": {
|
||||
"trades": 483,
|
||||
"wr": 50.3,
|
||||
"pf": 0.79,
|
||||
"sharpe": -1.64,
|
||||
"pnl_pips": -1281.4,
|
||||
"max_dd_pips": -1608.6,
|
||||
"expectancy": -2.65
|
||||
},
|
||||
"oos_metrics": {
|
||||
"trades": 158,
|
||||
"wr": 41.8,
|
||||
"pf": 0.66,
|
||||
"sharpe": -3.12,
|
||||
"pnl_pips": -893.3,
|
||||
"max_dd_pips": -1033.6,
|
||||
"expectancy": -5.65
|
||||
},
|
||||
"generalization": {
|
||||
"composite": 0.417,
|
||||
"detail": {
|
||||
"wr": 0.831,
|
||||
"pf": 0.835,
|
||||
"expectancy": 0,
|
||||
"sharpe": 0
|
||||
},
|
||||
"verdict": "FAIL"
|
||||
}
|
||||
},
|
||||
"S5_EUR_USD": {
|
||||
"pair": "EUR_USD",
|
||||
"timeframe": "M15",
|
||||
"is_metrics": {
|
||||
"trades": 499,
|
||||
"wr": 51.9,
|
||||
"pf": 0.77,
|
||||
"sharpe": -1.84,
|
||||
"pnl_pips": -794.8,
|
||||
"max_dd_pips": -991.5,
|
||||
"expectancy": -1.59
|
||||
},
|
||||
"oos_metrics": {
|
||||
"trades": 183,
|
||||
"wr": 45.9,
|
||||
"pf": 0.65,
|
||||
"sharpe": -3.08,
|
||||
"pnl_pips": -500.4,
|
||||
"max_dd_pips": -692.8,
|
||||
"expectancy": -2.73
|
||||
},
|
||||
"generalization": {
|
||||
"composite": 0.432,
|
||||
"detail": {
|
||||
"wr": 0.884,
|
||||
"pf": 0.844,
|
||||
"expectancy": 0,
|
||||
"sharpe": 0
|
||||
},
|
||||
"verdict": "FAIL"
|
||||
}
|
||||
},
|
||||
"S6_GBP_JPY": {
|
||||
"pair": "GBP_JPY",
|
||||
"timeframe": "M15",
|
||||
"is_metrics": {
|
||||
"trades": 19,
|
||||
"wr": 21.1,
|
||||
"pf": 0.22,
|
||||
"sharpe": -10.66,
|
||||
"pnl_pips": -465.5,
|
||||
"max_dd_pips": -523.9,
|
||||
"expectancy": -24.5
|
||||
},
|
||||
"oos_metrics": {
|
||||
"trades": 4,
|
||||
"wr": 25.0,
|
||||
"pf": 0.3,
|
||||
"sharpe": -7.38,
|
||||
"pnl_pips": -128.0,
|
||||
"max_dd_pips": -71.7,
|
||||
"expectancy": -32.0
|
||||
},
|
||||
"generalization": {
|
||||
"composite": 0.637,
|
||||
"detail": {
|
||||
"wr": 1.185,
|
||||
"pf": 1.364,
|
||||
"expectancy": 0,
|
||||
"sharpe": 0
|
||||
},
|
||||
"verdict": "WARN"
|
||||
}
|
||||
},
|
||||
"S6_EUR_USD": {
|
||||
"pair": "EUR_USD",
|
||||
"timeframe": "M15",
|
||||
"is_metrics": {
|
||||
"trades": 13,
|
||||
"wr": 23.1,
|
||||
"pf": 0.61,
|
||||
"sharpe": -3.28,
|
||||
"pnl_pips": -88.8,
|
||||
"max_dd_pips": -136.2,
|
||||
"expectancy": -6.83
|
||||
},
|
||||
"oos_metrics": {
|
||||
"trades": 3,
|
||||
"wr": 66.7,
|
||||
"pf": 3.4,
|
||||
"sharpe": 7.73,
|
||||
"pnl_pips": 63.2,
|
||||
"max_dd_pips": -26.3,
|
||||
"expectancy": 21.05
|
||||
},
|
||||
"generalization": {
|
||||
"composite": 1.0,
|
||||
"detail": {
|
||||
"wr": 2.0,
|
||||
"pf": 2.0,
|
||||
"expectancy": 0,
|
||||
"sharpe": 0
|
||||
},
|
||||
"verdict": "PASS"
|
||||
}
|
||||
},
|
||||
"S6A_GBP_JPY": {
|
||||
"pair": "GBP_JPY",
|
||||
"timeframe": "M15",
|
||||
"is_metrics": {
|
||||
"trades": 8,
|
||||
"wr": 0.0,
|
||||
"pf": 0.0,
|
||||
"sharpe": -28.58,
|
||||
"pnl_pips": -305.1,
|
||||
"max_dd_pips": -299.2,
|
||||
"expectancy": -38.13
|
||||
},
|
||||
"oos_metrics": {
|
||||
"trades": 0,
|
||||
"wr": 0,
|
||||
"pf": 0,
|
||||
"sharpe": 0,
|
||||
"pnl_pips": 0,
|
||||
"max_dd_pips": 0,
|
||||
"expectancy": 0
|
||||
},
|
||||
"generalization": {
|
||||
"composite": 0,
|
||||
"detail": {},
|
||||
"verdict": "FAIL"
|
||||
}
|
||||
},
|
||||
"S6A_EUR_USD": {
|
||||
"pair": "EUR_USD",
|
||||
"timeframe": "M15",
|
||||
"is_metrics": {
|
||||
"trades": 1,
|
||||
"wr": 0.0,
|
||||
"pf": 0.0,
|
||||
"sharpe": 0,
|
||||
"pnl_pips": -31.9,
|
||||
"max_dd_pips": 0.0,
|
||||
"expectancy": -31.9
|
||||
},
|
||||
"oos_metrics": {
|
||||
"trades": 0,
|
||||
"wr": 0,
|
||||
"pf": 0,
|
||||
"sharpe": 0,
|
||||
"pnl_pips": 0,
|
||||
"max_dd_pips": 0,
|
||||
"expectancy": 0
|
||||
},
|
||||
"generalization": {
|
||||
"composite": 0,
|
||||
"detail": {},
|
||||
"verdict": "FAIL"
|
||||
}
|
||||
},
|
||||
"S6B_GBP_JPY": {
|
||||
"pair": "GBP_JPY",
|
||||
"timeframe": "M15",
|
||||
"is_metrics": {
|
||||
"trades": 15,
|
||||
"wr": 20.0,
|
||||
"pf": 0.14,
|
||||
"sharpe": -14.21,
|
||||
"pnl_pips": -389.5,
|
||||
"max_dd_pips": -408.3,
|
||||
"expectancy": -25.97
|
||||
},
|
||||
"oos_metrics": {
|
||||
"trades": 2,
|
||||
"wr": 50.0,
|
||||
"pf": 0.57,
|
||||
"sharpe": -3.06,
|
||||
"pnl_pips": -47.3,
|
||||
"max_dd_pips": 0.0,
|
||||
"expectancy": -23.67
|
||||
},
|
||||
"generalization": {
|
||||
"composite": 1.0,
|
||||
"detail": {
|
||||
"wr": 2.0,
|
||||
"pf": 2.0,
|
||||
"expectancy": 0,
|
||||
"sharpe": 0
|
||||
},
|
||||
"verdict": "PASS"
|
||||
}
|
||||
},
|
||||
"S8_GBP_JPY": {
|
||||
"pair": "GBP_JPY",
|
||||
"timeframe": "M15",
|
||||
"is_metrics": {
|
||||
"trades": 156,
|
||||
"wr": 34.0,
|
||||
"pf": 0.56,
|
||||
"sharpe": -3.53,
|
||||
"pnl_pips": -864.5,
|
||||
"max_dd_pips": -985.3,
|
||||
"expectancy": -5.54
|
||||
},
|
||||
"oos_metrics": {
|
||||
"trades": 47,
|
||||
"wr": 40.4,
|
||||
"pf": 0.77,
|
||||
"sharpe": -1.89,
|
||||
"pnl_pips": -150.4,
|
||||
"max_dd_pips": -277.2,
|
||||
"expectancy": -3.2
|
||||
},
|
||||
"generalization": {
|
||||
"composite": 0.641,
|
||||
"detail": {
|
||||
"wr": 1.188,
|
||||
"pf": 1.375,
|
||||
"expectancy": 0,
|
||||
"sharpe": 0
|
||||
},
|
||||
"verdict": "WARN"
|
||||
}
|
||||
},
|
||||
"S8_EUR_USD": {
|
||||
"pair": "EUR_USD",
|
||||
"timeframe": "M15",
|
||||
"is_metrics": {
|
||||
"trades": 251,
|
||||
"wr": 43.8,
|
||||
"pf": 0.86,
|
||||
"sharpe": -0.97,
|
||||
"pnl_pips": -203.3,
|
||||
"max_dd_pips": -261.7,
|
||||
"expectancy": -0.81
|
||||
},
|
||||
"oos_metrics": {
|
||||
"trades": 71,
|
||||
"wr": 33.8,
|
||||
"pf": 0.57,
|
||||
"sharpe": -3.8,
|
||||
"pnl_pips": -217.3,
|
||||
"max_dd_pips": -281.1,
|
||||
"expectancy": -3.06
|
||||
},
|
||||
"generalization": {
|
||||
"composite": 0.359,
|
||||
"detail": {
|
||||
"wr": 0.772,
|
||||
"pf": 0.663,
|
||||
"expectancy": 0,
|
||||
"sharpe": 0
|
||||
},
|
||||
"verdict": "FAIL"
|
||||
}
|
||||
},
|
||||
"S8_GBP_USD": {
|
||||
"pair": "GBP_USD",
|
||||
"timeframe": "M15",
|
||||
"is_metrics": {
|
||||
"trades": 273,
|
||||
"wr": 39.2,
|
||||
"pf": 0.8,
|
||||
"sharpe": -1.5,
|
||||
"pnl_pips": -459.6,
|
||||
"max_dd_pips": -509.6,
|
||||
"expectancy": -1.68
|
||||
},
|
||||
"oos_metrics": {
|
||||
"trades": 57,
|
||||
"wr": 59.6,
|
||||
"pf": 1.45,
|
||||
"sharpe": 2.44,
|
||||
"pnl_pips": 157.9,
|
||||
"max_dd_pips": -71.4,
|
||||
"expectancy": 2.77
|
||||
},
|
||||
"generalization": {
|
||||
"composite": 0.833,
|
||||
"detail": {
|
||||
"wr": 1.52,
|
||||
"pf": 1.812,
|
||||
"expectancy": 0,
|
||||
"sharpe": 0
|
||||
},
|
||||
"verdict": "PASS"
|
||||
}
|
||||
},
|
||||
"S10_EUR_USD": {
|
||||
"pair": "EUR_USD",
|
||||
"timeframe": "M15",
|
||||
"is_metrics": {
|
||||
"trades": 13,
|
||||
"wr": 53.8,
|
||||
"pf": 1.67,
|
||||
"sharpe": 3.17,
|
||||
"pnl_pips": 20.1,
|
||||
"max_dd_pips": -13.1,
|
||||
"expectancy": 1.55
|
||||
},
|
||||
"oos_metrics": {
|
||||
"trades": 6,
|
||||
"wr": 33.3,
|
||||
"pf": 1.19,
|
||||
"sharpe": 0.97,
|
||||
"pnl_pips": 1.5,
|
||||
"max_dd_pips": -7.9,
|
||||
"expectancy": 0.25
|
||||
},
|
||||
"generalization": {
|
||||
"composite": 0.45,
|
||||
"detail": {
|
||||
"wr": 0.619,
|
||||
"pf": 0.713,
|
||||
"expectancy": 0.161,
|
||||
"sharpe": 0.306
|
||||
},
|
||||
"verdict": "FAIL"
|
||||
}
|
||||
},
|
||||
"S10_USD_JPY": {
|
||||
"pair": "USD_JPY",
|
||||
"timeframe": "M15",
|
||||
"is_metrics": {
|
||||
"trades": 20,
|
||||
"wr": 50.0,
|
||||
"pf": 2.08,
|
||||
"sharpe": 4.18,
|
||||
"pnl_pips": 51.5,
|
||||
"max_dd_pips": -19.3,
|
||||
"expectancy": 2.58
|
||||
},
|
||||
"oos_metrics": {
|
||||
"trades": 9,
|
||||
"wr": 33.3,
|
||||
"pf": 0.76,
|
||||
"sharpe": -1.48,
|
||||
"pnl_pips": -10.1,
|
||||
"max_dd_pips": -9.8,
|
||||
"expectancy": -1.13
|
||||
},
|
||||
"generalization": {
|
||||
"composite": 0.258,
|
||||
"detail": {
|
||||
"wr": 0.666,
|
||||
"pf": 0.365,
|
||||
"expectancy": 0.0,
|
||||
"sharpe": 0.0
|
||||
},
|
||||
"verdict": "FAIL"
|
||||
}
|
||||
},
|
||||
"S10_EUR_GBP": {
|
||||
"pair": "EUR_GBP",
|
||||
"timeframe": "M15",
|
||||
"is_metrics": {
|
||||
"trades": 15,
|
||||
"wr": 33.3,
|
||||
"pf": 0.98,
|
||||
"sharpe": -0.14,
|
||||
"pnl_pips": -0.8,
|
||||
"max_dd_pips": -29.2,
|
||||
"expectancy": -0.06
|
||||
},
|
||||
"oos_metrics": {
|
||||
"trades": 7,
|
||||
"wr": 42.9,
|
||||
"pf": 1.28,
|
||||
"sharpe": 1.61,
|
||||
"pnl_pips": 3.5,
|
||||
"max_dd_pips": -9.4,
|
||||
"expectancy": 0.49
|
||||
},
|
||||
"generalization": {
|
||||
"composite": 0.649,
|
||||
"detail": {
|
||||
"wr": 1.288,
|
||||
"pf": 1.306,
|
||||
"expectancy": 0,
|
||||
"sharpe": 0
|
||||
},
|
||||
"verdict": "WARN"
|
||||
}
|
||||
},
|
||||
"S11_USD_JPY": {
|
||||
"pair": "USD_JPY",
|
||||
"timeframe": "M15",
|
||||
"is_metrics": {
|
||||
"trades": 6,
|
||||
"wr": 66.7,
|
||||
"pf": 0.94,
|
||||
"sharpe": -0.39,
|
||||
"pnl_pips": -2.2,
|
||||
"max_dd_pips": -22.0,
|
||||
"expectancy": -0.37
|
||||
},
|
||||
"oos_metrics": {
|
||||
"trades": 7,
|
||||
"wr": 71.4,
|
||||
"pf": 1.61,
|
||||
"sharpe": 3.15,
|
||||
"pnl_pips": 21.4,
|
||||
"max_dd_pips": -21.7,
|
||||
"expectancy": 3.06
|
||||
},
|
||||
"generalization": {
|
||||
"composite": 0.696,
|
||||
"detail": {
|
||||
"wr": 1.07,
|
||||
"pf": 1.713,
|
||||
"expectancy": 0,
|
||||
"sharpe": 0
|
||||
},
|
||||
"verdict": "WARN"
|
||||
}
|
||||
},
|
||||
"S11_GBP_USD": {
|
||||
"pair": "GBP_USD",
|
||||
"timeframe": "M15",
|
||||
"is_metrics": {
|
||||
"trades": 5,
|
||||
"wr": 40.0,
|
||||
"pf": 0.56,
|
||||
"sharpe": -3.87,
|
||||
"pnl_pips": -18.8,
|
||||
"max_dd_pips": -29.9,
|
||||
"expectancy": -3.76
|
||||
},
|
||||
"oos_metrics": {
|
||||
"trades": 4,
|
||||
"wr": 50.0,
|
||||
"pf": 0.37,
|
||||
"sharpe": -6.0,
|
||||
"pnl_pips": -18.3,
|
||||
"max_dd_pips": -29.2,
|
||||
"expectancy": -4.57
|
||||
},
|
||||
"generalization": {
|
||||
"composite": 0.478,
|
||||
"detail": {
|
||||
"wr": 1.25,
|
||||
"pf": 0.661,
|
||||
"expectancy": 0,
|
||||
"sharpe": 0
|
||||
},
|
||||
"verdict": "FAIL"
|
||||
}
|
||||
},
|
||||
"S11_GBP_JPY": {
|
||||
"pair": "GBP_JPY",
|
||||
"timeframe": "M15",
|
||||
"is_metrics": {
|
||||
"trades": 13,
|
||||
"wr": 61.5,
|
||||
"pf": 1.61,
|
||||
"sharpe": 3.13,
|
||||
"pnl_pips": 45.9,
|
||||
"max_dd_pips": -17.3,
|
||||
"expectancy": 3.53
|
||||
},
|
||||
"oos_metrics": {
|
||||
"trades": 3,
|
||||
"wr": 0.0,
|
||||
"pf": 0.0,
|
||||
"sharpe": -73.56,
|
||||
"pnl_pips": -61.5,
|
||||
"max_dd_pips": -36.0,
|
||||
"expectancy": -20.51
|
||||
},
|
||||
"generalization": {
|
||||
"composite": 0.0,
|
||||
"detail": {
|
||||
"wr": 0.0,
|
||||
"pf": 0.0,
|
||||
"expectancy": 0.0,
|
||||
"sharpe": 0.0
|
||||
},
|
||||
"verdict": "FAIL"
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,108 @@
|
||||
timestamp,strategy_id,pair,signal_direction,entry_price,sl_price,tp1_price,tp2_price,tp3_price,lot_size,confluence_score,session,spread_at_entry,atr_at_entry,adx_at_entry,rsi_at_entry,ema_50_value,ema_200_value,vwap_deviation,news_within_60min,macd_hist_at_entry,stoch_k_at_entry,distance_from_ema50_pips,candle_body_ratio,hour_of_day,day_of_week,entry_pattern,exit_price,exit_reason,exit_time,pnl_pips,pnl_dollars,hold_time_minutes,win
|
||||
2021-02-03 08:45:00+00:00,8,GBP_USD,SHORT,1.3656799999999998,1.3668651838276231,1.3650193872412566,1.36331816172377,1.36331816172377,843750.97,4,LONDON,1.5,0.0008506127587433501,37.97546885160844,46.36504340654093,1.3662873245722702,1.3674029531035363,-10.037855889530878,False,9.837861525476078e-05,60.56644880174377,-4.173245722702834,0.5172413793103818,8,2,order_block_retest_short,1.3656799999999998,TP1+SL,2021-02-03 09:30:00+00:00,3.303063793715921,278.6963279919688,45,True
|
||||
2021-02-03 15:00:00+00:00,8,GBP_USD,SHORT,1.3656199999999998,1.3669576597443829,1.3646511341853909,1.3623334025561726,1.3623334025561726,749657.73,4,OVERLAP,1.5,0.0011588658146091202,33.645730082495795,57.662639284853874,1.3650175043353836,1.3666947463207786,11.0218976377352,False,0.0003923976164506115,78.51538987427647,7.924956646163661,0.6915887850467561,15,2,order_block_retest_short,1.3656199999999998,TP1+SL,2021-02-03 16:30:00+00:00,4.844329073044884,363.1588736271832,90,True
|
||||
2021-02-05 11:15:00+00:00,8,GBP_USD,LONG,1.3685100000000001,1.3673530827225562,1.3691763909248127,1.3708891727744383,1.3708891727744383,869914.01,5,LONDON,1.5,0.0008563909248127579,31.21994244548973,47.11812472880249,1.3681179264364378,1.3662055569800107,-10.704906069749498,False,-0.000227221238696778,21.07769613413166,2.020735635621662,0.7227722772276531,11,4,order_block_retest_long,1.3685100000000001,TP1+SL,2021-02-05 12:00:00+00:00,3.331954624062883,289.8514008156585,45,True
|
||||
2021-02-25 12:00:00+00:00,8,GBP_USD,LONG,1.4152200000000001,1.4133129749790034,1.4163867500699892,1.4191002502099674,1.4191002502099674,529262.62,4,LONDON,1.5,0.0013567500699891305,23.802383776180108,48.77770937696442,1.414944837241012,1.4125068353280843,-4.960921027155063,False,-0.00027271248425850747,24.93055555555668,0.8516275898795556,0.7980295566502333,12,3,order_block_retest_long,1.4133129749790034,SL,2021-02-25 13:30:00+00:00,-19.07025020996711,-1009.3170590182742,90,False
|
||||
2021-03-24 10:30:00+00:00,8,GBP_USD,SHORT,1.3708999999999998,1.3722344046949926,1.369675317683358,1.3668459530500743,1.3668459530500743,748816.23,4,LONDON,1.5,0.0014146823166418566,26.525943342685558,48.995551573742176,1.3722136357557708,1.3782305109866388,3.5082183890522423,False,0.0003596470035126338,40.86088460588151,-11.23635755770902,0.8035714285715312,10,2,order_block_retest_short,1.3722344046949926,SL,2021-03-24 12:15:00+00:00,-13.344046949927966,-999.2238929988059,105,False
|
||||
2021-03-24 13:00:00+00:00,8,GBP_USD,SHORT,1.3707799999999999,1.372183462621995,1.36972512459335,1.3672353737800496,1.3672353737800496,704850.73,4,OVERLAP,1.5,0.0012448754066501746,14.962310976234152,47.721116663636224,1.3719173175179198,1.3775710702304071,0.09138301241273794,False,6.553187775585866e-05,38.63235443319647,-9.473175179197657,0.7526881720430287,13,2,order_block_retest_short,1.3707799999999999,TP1+SL,2021-03-24 14:30:00+00:00,5.274377033249733,371.76485021813085,90,True
|
||||
2021-03-29 16:15:00+00:00,8,GBP_USD,SHORT,1.37835,1.3806127629458098,1.3771974568473004,1.3745123705419011,1.3745123705419011,438821.62,5,OVERLAP,1.5,0.0013425431526996327,19.42156367779738,41.6907861737266,1.3800837005140019,1.3778458988012652,-24.79414004627367,False,-0.0002821763161958221,70.73115808300561,-15.437005140017668,0.6470588235291966,16,0,order_block_retest_short,1.37749,TP1+TIME,2021-03-30 02:15:00+00:00,10.062715763496932,441.57372329372606,600,True
|
||||
2021-03-30 09:15:00+00:00,8,GBP_USD,SHORT,1.3766999999999998,1.3778907563106233,1.375820812297922,1.3736824368937663,1.3736824368937663,837589.55,4,LONDON,1.5,0.001069187702077878,28.384127477835552,51.2840474045044,1.3769696583625757,1.3773228573222893,4.469376689053561,False,0.0001473491410700845,74.31535073882608,-0.7965836257572967,0.6634615384616596,9,1,order_block_retest_short,1.3766999999999998,TP1+SL,2021-03-30 10:30:00+00:00,4.395938510388663,368.19921587441115,75,True
|
||||
2021-04-07 09:30:00+00:00,8,GBP_USD,SHORT,1.38241,1.3833895658025055,1.3814014473249814,1.379004341974944,1.379004341974944,1021929.34,4,LONDON,1.5,0.001198552675018703,32.349954380738765,55.39910050892575,1.3820200947090742,1.3839828744318312,7.141562152712666,False,0.0004075997653737915,77.29921210575479,5.799052909258862,0.6610169491525679,9,2,order_block_retest_short,1.3833895658025055,SL,2021-04-07 10:00:00+00:00,-9.795658025055776,-1001.0470340410952,30,False
|
||||
2021-04-07 10:15:00+00:00,8,GBP_USD,SHORT,1.38244,1.3833986567303589,1.381401144232137,1.378943432696411,1.378943432696411,1033776.25,4,LONDON,1.5,0.0012288557678630106,27.143600043655635,54.11405209232595,1.3820952769479904,1.3839443315494278,5.671323769109726,False,0.00031097439811761764,45.37953795379059,5.3472305200963355,0.5984251968502436,10,2,order_block_retest_short,1.38244,TP1+SL,2021-04-07 11:15:00+00:00,5.194278839314448,536.9722099960843,60,True
|
||||
2021-04-08 12:30:00+00:00,8,GBP_USD,SHORT,1.37607,1.3770703553341883,1.3750921488860388,1.3727564466581161,1.3727564466581161,996052.35,4,LONDON,1.5,0.001167851113961273,36.029910001163614,57.665444777196065,1.375239717590481,1.3782740373689433,15.74755822311813,False,0.00026710592992144314,74.70110488565578,10.202824095191243,0.10869565217380811,12,3,order_block_retest_short,1.3770703553341883,SL,2021-04-08 12:45:00+00:00,-10.003553341884073,-996.4062814533986,15,False
|
||||
2021-04-08 13:00:00+00:00,8,GBP_USD,SHORT,1.3757199999999998,1.3770804084259072,1.374708638580309,1.3723059157409265,1.3723059157409265,725107.4,4,OVERLAP,1.5,0.0012013614196911104,42.355881912344486,53.984736709313374,1.3753191395366182,1.3782345158250422,9.989988301359887,False,0.00022055765277420548,49.90929705215245,5.9086046338174825,0.6440677966101503,13,3,order_block_retest_short,1.3757199999999998,TP1+SL,2021-04-08 13:45:00+00:00,5.0568070984546845,366.6728247462021,45,True
|
||||
2021-04-09 08:30:00+00:00,8,GBP_USD,SHORT,1.3702299999999998,1.3713329832786958,1.3693767224043472,1.3672901672130413,1.3672901672130413,897664.52,4,LONDON,1.5,0.001043277595652904,41.41692634216885,45.49816717198157,1.372120697663633,1.375324991430731,3.3326681156564675,False,7.949023673521974e-05,74.58726415094118,-17.006976636331217,0.10000000000008327,8,4,order_block_retest_short,1.3713329832786958,SL,2021-04-09 08:45:00+00:00,-11.02983278695957,-990.1089554386325,15,False
|
||||
2021-04-09 09:30:00+00:00,8,GBP_USD,SHORT,1.3706099999999999,1.3713268765207942,1.369777078264019,1.3677312347920574,1.3677312347920574,1367331.52,4,LONDON,1.5,0.001022921735980911,32.62034714235083,47.628088393261315,1.371960110966697,1.3751569951450575,2.2798202638307785,False,0.00026234041840481276,59.03331911841331,-11.601109666969922,0.22222222222203947,9,4,order_block_retest_short,1.3706099999999999,TP1+SL,2021-04-09 10:15:00+00:00,4.164608679904092,569.4400716498455,45,True
|
||||
2021-04-09 12:15:00+00:00,8,GBP_USD,SHORT,1.37052,1.3713447306488928,1.3696275645036902,1.36746269351107,1.36746269351107,1195423.33,4,LONDON,1.5,0.0010824354963099724,24.051572670423916,45.769038879080355,1.3717573411935284,1.3747608647426401,-3.9319440664553618,False,0.00014398411600924282,41.43273384909072,-10.473411935283394,0.6011235955056005,12,4,order_block_retest_short,1.3713447306488928,SL,2021-04-09 12:45:00+00:00,-8.247306488928796,-985.9022586525871,30,False
|
||||
2021-04-26 09:00:00+00:00,8,GBP_USD,LONG,1.39159,1.3902365197005955,1.3924116009980154,1.3944348029940463,1.3944348029940463,721135.9,4,LONDON,1.5,0.001011600998015472,34.86982588688031,54.664553741783465,1.389886985861894,1.3886319127472304,-1.3358024423393289,False,-0.00012167995905257398,31.081752965408214,15.130141381058948,0.6712328767123079,9,0,order_block_retest_long,1.39159,TP1+SL,2021-04-26 09:30:00+00:00,4.108004990076575,296.2429875723362,30,True
|
||||
2021-04-26 10:15:00+00:00,8,GBP_USD,LONG,1.3913900000000001,1.3902435300585196,1.3921882331382687,1.3941646994148058,1.3941646994148058,853930.52,5,LONDON,1.5,0.000988233138268581,20.772343289416764,51.975923261421784,1.3901498864162787,1.3887645367794779,-3.1660132970534605,False,-0.0001649756040494829,39.55544848476827,10.501135837213127,0.5853658536585498,10,0,order_block_retest_long,1.3902435300585196,SL,2021-04-26 10:45:00+00:00,-11.46469941480488,-979.0056732928027,30,False
|
||||
2021-05-04 09:45:00+00:00,8,GBP_USD,SHORT,1.38773,1.3889908791908736,1.3869170693637547,1.3849112080912638,1.3849112080912638,768682.38,5,LONDON,1.5,0.001002930636245432,19.048754609124305,50.97358638393605,1.3881409193982233,1.3882652406186224,2.644392500075199,False,0.00015568852725437104,59.77885862516471,-2.2091939822321827,0.6935483870968377,9,1,order_block_retest_short,1.3889908791908736,SL,2021-05-04 10:15:00+00:00,-12.608791908736983,-969.2156173332687,30,False
|
||||
2021-05-04 10:30:00+00:00,8,GBP_USD,SHORT,1.38801,1.3889909127486695,1.3871969575044347,1.3851908725133042,1.3851908725133042,978194.5,5,LONDON,1.5,0.0010030424955653182,19.849871453207577,51.86960942266452,1.3881785707328373,1.3882713953701058,3.730088621434202,False,0.0002017904016940715,78.48704761434279,0.21429267162753618,0.9062499999998554,10,1,order_block_retest_short,1.3851908725133042,TP3,2021-05-04 12:00:00+00:00,18.160850199502093,1776.4843780476851,90,True
|
||||
2021-05-06 12:30:00+00:00,8,GBP_USD,LONG,1.39067,1.3889894867335921,1.3920483775546926,1.3951851326640776,1.3951851326640776,581541.56,5,LONDON,1.5,0.001568377554692545,56.58466252643041,47.29570869884925,1.3907402224118506,1.3899894839032472,-4.84291786540636,False,-0.00011073903907925223,41.1289551895022,-2.602224118506413,0.14136125654449289,12,3,order_block_retest_long,1.3889894867335921,SL,2021-05-06 13:00:00+00:00,-16.80513266407946,-977.2883065475726,30,False
|
||||
2021-05-06 13:15:00+00:00,8,GBP_USD,LONG,1.39023,1.3890053671114073,1.391555442961975,1.394586328885925,1.394586328885925,790045.27,5,OVERLAP,1.5,0.0015154429619750399,61.46713889978716,46.618799337920414,1.3905925097174678,1.3899728305132155,-7.061429702812649,False,-0.00024053666248626367,22.999205749393454,-5.525097174678972,0.8294573643410026,13,3,order_block_retest_long,1.3890053671114073,SL,2021-05-06 13:45:00+00:00,-12.24632888592758,-967.5154211191456,30,False
|
||||
2021-05-07 12:15:00+00:00,8,GBP_USD,LONG,1.3900800000000002,1.3892950196676785,1.390739934441072,1.3924398033232162,1.3924398033232162,1220209.25,4,LONDON,1.5,0.0008499344410720426,40.379288994457625,41.39547933157116,1.390759430810124,1.3901133728620985,-14.84192781153304,False,-0.0003052153212046127,21.166356154509227,-8.694308101240278,0.7238095238096165,12,4,order_block_retest_long,1.3924398033232162,TP3,2021-05-07 12:30:00+00:00,15.098689014832164,1842.3559998771595,15,True
|
||||
2021-05-27 08:45:00+00:00,8,GBP_USD,SHORT,1.41139,1.4123617879049257,1.4105407069835811,1.4084621209507429,1.4084621209507429,1004605.86,4,LONDON,1.5,0.0010392930164190295,31.009404001255678,48.72523554915032,1.4118201000311512,1.4135005653935682,-9.467955456141652,False,9.538989752057886e-05,50.19833853882869,-2.4010003115115808,0.9328358208954197,8,3,order_block_retest_short,1.4123617879049257,SL,2021-05-27 09:00:00+00:00,-9.717879049258027,-976.2638239655843,15,False
|
||||
2021-06-15 16:45:00+00:00,8,GBP_USD,SHORT,1.4076,1.4087912460312266,1.4068191798959115,1.4048775396877344,1.4048775396877344,811336.33,4,OVERLAP,1.5,0.000970820104088536,24.827901059687893,48.5859774400525,1.4085174505489417,1.4104979373903277,1.0776873672857512,False,0.00010565472877939171,49.15123456790556,-7.2745054894163275,0.641025641025568,16,1,order_block_retest_short,1.40812,TIME,2021-06-16 02:45:00+00:00,-5.20000000000076,-421.8948916000616,600,False
|
||||
2021-06-25 14:00:00+00:00,8,GBP_USD,SHORT,1.3916,1.3931413054003114,1.3906856486656287,1.388476945996886,1.388476945996886,624329.37,5,OVERLAP,1.5,0.0011043513343713925,33.986696788081794,55.71032802386778,1.391290614890714,1.3927485612021,11.892812763321103,False,0.0002927821956353779,74.06657741001611,4.993851092860435,0.6617647058822665,14,4,order_block_retest_short,1.388476945996886,TP3,2021-06-25 18:00:00+00:00,20.18702718765139,1260.3353966239263,240,True
|
||||
2021-06-28 14:15:00+00:00,8,GBP_USD,SHORT,1.39136,1.393019366377033,1.3903187787432232,1.3878563362296694,1.3878563362296694,587504.73,5,OVERLAP,1.5,0.0012312212567768795,19.56961994323794,55.77046219769993,1.3902910001536513,1.3909130042240416,9.330591699565627,False,0.00011190142202173573,79.94220801041608,12.589998463488072,0.2285714285714875,14,0,order_block_retest_short,1.3878563362296694,TP3,2021-06-28 18:00:00+00:00,22.724425731899796,1335.0707604024842,225,True
|
||||
2021-06-30 12:45:00+00:00,8,GBP_USD,SHORT,1.3840799999999998,1.3851126649484347,1.3831944501718845,1.3810433505156534,1.3810433505156534,956976.7,5,LONDON,1.5,0.0010755498281155218,36.414019265568825,45.68167263689765,1.3847730445937103,1.386004581965077,-4.442385980216734,False,-0.00010715850933297222,20.826437537313296,-5.030445937104222,0.8787878787877769,12,2,order_block_retest_short,1.3810433505156534,TP3,2021-06-30 14:45:00+00:00,19.610996879625105,1876.7267077573931,120,True
|
||||
2021-07-13 16:15:00+00:00,8,GBP_USD,SHORT,1.3848599999999998,1.3857744025713221,1.3839686580955928,1.3818059742867788,1.3818059742867788,1101269.39,4,OVERLAP,1.5,0.0010813419044070184,22.3594102098225,54.303502106643315,1.3852392613423095,1.3858944978653545,15.60319132361876,False,0.0003938123670393209,89.1953755431404,-1.892613423095657,0.13793103448289062,16,1,order_block_retest_short,1.3818059742867788,TP3,2021-07-13 18:00:00+00:00,19.726838365458587,2172.4563253357173,105,True
|
||||
2021-07-20 08:30:00+00:00,8,GBP_USD,SHORT,1.36577,1.36646271062273,1.3648176312575666,1.3625328937726995,1.3625328937726995,1485076.3,4,LONDON,1.5,0.0011423687424334918,33.20282917892974,49.99816403807466,1.3666653543263498,1.3719864918905318,2.4997357835343514,False,0.00012015542054331614,88.45777391416506,-7.053543263497719,0.7155963302752087,8,1,order_block_retest_short,1.36646271062273,SL,2021-07-20 08:45:00+00:00,-6.927106227301305,-1028.728128574758,15,False
|
||||
2021-07-20 09:45:00+00:00,8,GBP_USD,SHORT,1.36469,1.3665057486338381,1.36359417122054,1.3610225136616196,1.3610225136616196,560893.08,4,LONDON,1.5,0.0012858287794601318,24.033192136826855,43.94448857345415,1.3665739649534487,1.371703811197416,-10.610735401641591,False,0.0001123188922722985,25.440003189854508,-16.939649534486456,0.6470588235292837,9,1,order_block_retest_short,1.3610225136616196,TP3,2021-07-20 11:00:00+00:00,23.81657624306719,1335.8552804028784,75,True
|
||||
2021-07-28 10:30:00+00:00,8,GBP_USD,LONG,1.3879500000000002,1.3869243176169475,1.3887122746101752,1.3906168238305254,1.3906168238305254,1005963.85,5,LONDON,1.5,0.0009522746101750727,19.337052248170572,50.417244422867114,1.3875156183565278,1.383938383935468,0.44218429365860956,False,-5.386693350515074e-05,21.378351717336596,2.443816434722912,1.0,10,2,order_block_retest_long,1.3869243176169475,SL,2021-07-28 11:15:00+00:00,-10.25682383052784,-1031.7993989329532,45,False
|
||||
2021-07-28 11:30:00+00:00,8,GBP_USD,LONG,1.3875000000000002,1.3869231804054987,1.3882660653150045,1.3901781959450132,1.3901781959450132,1770885.41,5,LONDON,1.5,0.0009560653150044292,16.52765447905613,47.916392896393894,1.3874952080798972,1.3840736749455695,-3.4035244125707464,False,-7.177981472944003e-05,34.15480102227155,-1.8520807989719223,0.5728155339806222,11,2,order_block_retest_long,1.3869231804054987,SL,2021-07-28 11:45:00+00:00,-5.768195945015098,-1021.4814041048398,15,False
|
||||
2021-07-28 11:45:00+00:00,8,GBP_USD,LONG,1.3881400000000002,1.3869196675193918,1.3889177749353612,1.3908533248060837,1.3908533248060837,828681.21,5,LONDON,1.5,0.0009677749353612564,14.617681932952864,52.11963029657198,1.3875130430571563,1.384112245344121,3.0027063454629577,False,-2.1700397282882975e-05,45.2861952861959,4.369569428437359,0.580357142857173,11,2,order_block_retest_long,1.3869196675193918,SL,2021-07-28 12:30:00+00:00,-12.203324806083769,-1011.2665966328514,45,False
|
||||
2021-07-28 14:30:00+00:00,8,GBP_USD,LONG,1.3870300000000002,1.3860045711708109,1.3879247627639637,1.390094288291891,1.390094288291891,976327.07,4,OVERLAP,1.5,0.0010847627639636252,20.741525901848387,49.58157429042195,1.3871054419775684,1.3843518675808597,-2.754826815063449,False,-8.110122947124917e-05,57.83678543589375,-2.6544197756828147,0.5882352941177335,14,2,order_block_retest_long,1.3870300000000002,TP1+SL,2021-07-28 15:00:00+00:00,4.473813819817485,436.79055384279127,30,True
|
||||
2021-07-28 15:15:00+00:00,8,GBP_USD,LONG,1.38803,1.3868933651101574,1.388895449632809,1.3910063488984272,1.3910063488984272,884648.04,5,OVERLAP,1.5,0.001055449632809085,20.547509729283938,55.986107342178535,1.38713298175829,1.3844401731258387,7.023982850762334,False,0.000144470367784563,81.3451534223724,7.0701824170993355,0.8082191780818793,15,2,order_block_retest_long,1.38803,TP1+SL,2021-07-28 17:15:00+00:00,4.327248164044395,382.8091606915473,120,True
|
||||
2021-09-10 15:45:00+00:00,8,GBP_USD,LONG,1.3848,1.3840575285370118,1.3854515715432938,1.3871347146298818,1.3871347146298818,1359446.08,4,OVERLAP,1.5,0.0008415715432939879,52.10499744204033,34.02766256771919,1.3860534166321838,1.3832183751426057,-22.76572340738081,False,-0.00033930091305477963,15.129685477427044,-14.43416632183947,0.13043478260856972,15,4,order_block_retest_long,1.3848,TP1+SL,2021-09-10 17:15:00+00:00,3.2578577164688034,442.8881901851267,90,True
|
||||
2021-09-14 16:00:00+00:00,8,GBP_USD,LONG,1.3858000000000001,1.3849568733667332,1.3867537554442224,1.3890412663326672,1.3890412663326672,1202403.96,5,OVERLAP,1.5,0.0011437554442224006,35.11854613080423,46.601703372369926,1.3859698104153395,1.384493656769709,-14.216518062297734,False,-0.0003640755419090309,45.53702620728594,-3.5981041533950098,0.8571428571429138,16,1,order_block_retest_long,1.3849568733667332,SL,2021-09-14 16:45:00+00:00,-8.431266332669107,-1013.7788026216011,45,False
|
||||
2021-09-16 12:15:00+00:00,8,GBP_USD,SHORT,1.3824599999999998,1.3829825745477862,1.3818414181740462,1.3802242545221388,1.3802242545221388,1920570.03,4,LONDON,1.5,0.0008085818259536831,30.196747827500012,50.07849923900717,1.3828488891840063,1.3831449910197502,4.464313157368505,False,0.0002161799841374047,58.38744269954003,-1.9888918400634559,0.6461538461539408,12,3,order_block_retest_short,1.3829825745477862,SL,2021-09-16 12:30:00+00:00,-5.225745477863697,-1003.6410149193044,15,False
|
||||
2021-09-30 10:15:00+00:00,8,GBP_USD,SHORT,1.3439499999999998,1.3455606832716118,1.3430043890946275,1.3407331672838825,1.3407331672838825,616883.92,4,LONDON,1.5,0.0011356109053724708,27.3806660734734,48.35626778721171,1.3444601096805955,1.3500999428286857,-3.9785603181652363,False,0.00011775948666916061,46.116064142023106,-3.2010968059559275,0.7970297029703873,10,3,order_block_retest_short,1.3455606832716118,SL,2021-09-30 12:00:00+00:00,-16.106832716120678,-993.6046104704772,105,False
|
||||
2021-09-30 16:00:00+00:00,8,GBP_USD,SHORT,1.3447999999999998,1.34573381367697,1.343277287743433,1.339851863230299,1.339851863230299,1053388.47,5,OVERLAP,1.5,0.0017127122565669729,38.72677160048153,43.05633475620473,1.346133062750346,1.3494613317482482,-18.27300144575217,False,-0.0003214277986664225,7.97402389242907,-11.430627503461466,0.7500000000000216,16,3,order_block_retest_short,1.34573381367697,SL,2021-09-30 16:15:00+00:00,-9.338136769703187,-983.6685604488382,15,False
|
||||
2021-10-08 13:30:00+00:00,8,GBP_USD,LONG,1.3625800000000001,1.3618977716558744,1.3634974278137522,1.3657122834412567,1.3657122834412567,1427428.05,5,OVERLAP,1.5,0.0011074278137522165,38.815052854910036,52.253925345850895,1.36166541967117,1.360525399615265,-3.7109379776700813,False,-4.047860094830711e-05,25.570649867324367,7.24580328830049,0.02890173410397873,13,4,order_block_retest_long,1.3618977716558744,SL,2021-10-08 13:45:00+00:00,-6.822283441256793,-973.8318749100474,15,False
|
||||
2021-10-08 13:45:00+00:00,8,GBP_USD,LONG,1.36291,1.3618891451090263,1.3638561829699127,1.3661285489097383,1.3661285489097383,944398.23,5,OVERLAP,1.5,0.0011361829699127652,34.26260688789481,54.642035541562066,1.3617067757624965,1.3605472364350137,-0.1887451240412119,False,-6.563655920755363e-05,26.441401574550696,10.13224237503385,0.23841059602645015,13,4,order_block_retest_long,1.36291,TP1+SL,2021-10-08 15:30:00+00:00,4.730914849563339,446.78676102083335,105,True
|
||||
2021-10-11 09:45:00+00:00,8,GBP_USD,LONG,1.3619700000000001,1.3610516577382428,1.3628078075391905,1.3648634226175713,1.3648634226175713,1054684.58,4,LONDON,1.5,0.0010278075391904197,41.91846238514492,36.79072118097385,1.3636916356704754,1.3621010733988095,-16.832640151664968,False,-0.00046223075681303504,8.63922846754476,-19.116356704753645,0.2564102564102272,9,0,order_block_retest_long,1.3619700000000001,TP1+SL,2021-10-11 12:45:00+00:00,4.189037695951914,441.8113462959212,180,True
|
||||
2021-10-12 09:30:00+00:00,8,GBP_USD,SHORT,1.3599499999999998,1.3609724989964802,1.3591983366783988,1.357315010035197,1.357315010035197,951570.16,5,LONDON,1.5,0.0009416633216009565,31.765044995035133,52.25280818033017,1.359949437071443,1.3609994288251952,3.883010392466968,False,0.00013056204833784686,74.92428715627359,1.9056292855701429,0.9327731092438182,9,1,order_block_retest_short,1.3609724989964802,SL,2021-10-12 10:15:00+00:00,-10.224989964804363,-972.9795336807284,45,False
|
||||
2021-10-12 13:30:00+00:00,8,GBP_USD,SHORT,1.35943,1.3610664208801175,1.358365263732941,1.3558557911988234,1.3558557911988234,588632.03,5,OVERLAP,1.5,0.001254736267058881,22.004181023080523,43.424941944739345,1.3605665394511348,1.3610380276234428,-11.308872146551519,False,-0.0002079138211461991,30.052388771602086,-9.465394511347647,0.6182795698924738,13,1,order_block_retest_short,1.35943,TP1+SL,2021-10-12 14:45:00+00:00,5.32368133529415,313.3689351467307,75,True
|
||||
2021-10-28 09:45:00+00:00,8,GBP_USD,LONG,1.3757100000000002,1.375124385585483,1.376505381381724,1.3784761441451723,1.3784761441451723,1650204.31,4,LONDON,1.5,0.000985381381724034,23.496881235033392,55.14938765341243,1.374553598464096,1.3752215762154631,3.1462274744264995,False,-8.111872127597848e-05,49.1583189407008,9.664015359041045,0.8611111111111368,9,3,order_block_retest_long,1.375124385585483,SL,2021-10-28 10:00:00+00:00,-5.856144145173214,-966.3834308346104,15,False
|
||||
2021-10-28 10:15:00+00:00,8,GBP_USD,LONG,1.37593,1.3751336845099318,1.3766943849668947,1.378603154900684,1.378603154900684,1201432.86,4,LONDON,1.5,0.0009543849668947046,19.02207805499655,56.22652423452506,1.3746237254564764,1.3752263250837493,4.87709901589195,False,-3.268023068333549e-05,80.69468432162809,11.162745435235877,0.8666666666665186,10,3,order_block_retest_long,1.3751336845099318,SL,2021-10-28 10:30:00+00:00,-7.963154900683111,-956.7195966950727,15,False
|
||||
2021-10-28 10:45:00+00:00,8,GBP_USD,LONG,1.37623,1.3751376616437676,1.3769811278541082,1.3788633835623245,1.3788633835623245,867087.01,4,LONDON,1.5,0.0009411278541081956,15.710195854717936,57.45495388251623,1.3747032390699732,1.3752347530912987,7.460152380223128,False,6.970433268612688e-06,85.94432942258796,13.367609300267702,0.8404255319147831,10,3,order_block_retest_long,1.3751376616437676,SL,2021-10-28 11:15:00+00:00,-10.923383562324585,-947.1523992139173,30,False
|
||||
2021-10-29 10:15:00+00:00,8,GBP_USD,LONG,1.3790000000000002,1.3777157658055423,1.379690780648192,1.3814523419445757,1.3814523419445757,730147.88,4,LONDON,1.5,0.0008807806481918384,29.032328025954058,52.278863649463275,1.378642934895015,1.3774020974592631,7.938492772423533,False,7.386768905713506e-05,80.8488612836425,1.6706510498498695,0.5800000000003108,10,4,order_block_retest_long,1.3790000000000002,TP1+SL,2021-10-29 10:45:00+00:00,3.453903240958622,252.18601291110673,30,True
|
||||
2021-10-29 11:00:00+00:00,8,GBP_USD,LONG,1.3786100000000001,1.3776922826074258,1.379379057975247,1.3812971739257407,1.3812971739257407,1024501.38,4,LONDON,1.5,0.0009590579752468898,30.04307994264525,48.77502149173026,1.378649955352494,1.3774408626178496,2.3277501727214656,False,9.719838044171733e-05,48.1315770289166,-2.2995535249403787,0.010526315789542573,11,4,order_block_retest_long,1.3786100000000001,TP1+SL,2021-10-29 12:00:00+00:00,3.8452898762342254,393.95047847019936,60,True
|
||||
2021-11-02 12:00:00+00:00,8,GBP_USD,SHORT,1.3648999999999998,1.3659079274614074,1.3640635751286414,1.3620107253859244,1.3620107253859244,936716.46,4,LONDON,1.5,0.001026424871358474,31.88519060968046,54.55779148535239,1.3648473473373226,1.3678315048642948,9.776064611826119,False,0.00011699353826857459,69.88593147273332,2.426526626773118,0.22935779816500304,12,1,order_block_retest_short,1.3659079274614074,SL,2021-11-02 12:45:00+00:00,-10.079274614076539,-944.1422435865642,45,False
|
||||
2021-11-02 13:15:00+00:00,8,GBP_USD,SHORT,1.36445,1.365907245206477,1.3636158493117427,1.361567547935228,1.361567547935228,641416.29,4,OVERLAP,1.5,0.0010241506882573176,23.365526151306714,49.64193072879371,1.3649295182243917,1.3677079820324403,2.415944078701937,False,0.0002107403131035005,61.284546822030734,-2.89518224391605,0.903999999999902,13,1,order_block_retest_short,1.361567547935228,TP3,2021-11-02 15:30:00+00:00,18.58301421453414,1191.9448034503753,135,True
|
||||
2021-11-17 10:00:00+00:00,8,GBP_USD,SHORT,1.34198,1.3437115678636058,1.3409647737879813,1.3385543213639435,1.3385543213639435,546683.9,4,LONDON,1.5,0.0012052262120188536,25.127553250869212,41.34555797399634,1.3433022559757302,1.3429254769312162,-17.150649150980968,False,-0.000263938273156434,19.34739798803706,-11.322559757300787,0.7343749999999838,10,2,order_block_retest_short,1.3437115678636058,SL,2021-11-17 10:45:00+00:00,-17.31567863605843,-946.6202727907103,45,False
|
||||
2021-11-18 10:30:00+00:00,8,GBP_USD,LONG,1.34963,1.3487147142004534,1.3502576193318216,1.351892857995465,1.351892857995465,1023892.28,4,LONDON,1.5,0.0008176193318216582,24.578583471515827,48.8762689509464,1.3492135980546456,1.3465092246158348,-2.82218728483441,False,-0.00014146764724706263,20.79562594268017,2.2640194535439306,0.6339285714285555,10,3,order_block_retest_long,1.3487147142004534,SL,2021-11-18 11:45:00+00:00,-9.152857995466945,-937.154064149488,75,False
|
||||
2021-12-13 12:45:00+00:00,8,GBP_USD,SHORT,1.3245299999999998,1.3253687047124048,1.323857650958651,1.3221329528759536,1.3221329528759536,1106208.79,4,LONDON,1.5,0.0008623490413487987,35.25513937296788,49.290484257125044,1.3246694106214625,1.323589264737418,1.1066076967836125,False,0.00012451654379476825,53.84109916367754,0.5058937853741341,0.7852760736197263,12,0,order_block_retest_short,1.3253687047124048,SL,2021-12-13 13:15:00+00:00,-8.387047124049918,-927.782525076824,30,False
|
||||
2021-12-13 15:30:00+00:00,8,GBP_USD,SHORT,1.32469,1.325431794560599,1.3238073514646704,1.321662054394011,1.321662054394011,1238219.78,4,OVERLAP,1.5,0.0010726485353296834,21.731268605421715,48.0931102292679,1.3249596138867934,1.32378839959813,-1.400208288071525,False,-0.0001384924974315973,17.596699882138264,-0.7961388679333936,0.054945054945172926,15,0,order_block_retest_short,1.321662054394011,TP3,2021-12-13 17:45:00+00:00,19.55297095113247,2421.0875389457638,135,True
|
||||
2021-12-16 11:15:00+00:00,8,GBP_USD,LONG,1.32702,1.3259156260774383,1.3277112464085383,1.3294737392256153,1.3294737392256153,853619.92,4,LONDON,1.5,0.0008812464085384174,38.134853135706976,45.131290919186995,1.3266036974459543,1.324702220813913,-20.166359501474496,False,-0.00027226085565593193,16.903588821189853,2.2630255404565425,0.3178807947019848,11,3,order_block_retest_long,1.3294737392256153,TP3,2021-12-16 12:00:00+00:00,15.72492845821823,1342.311217250997,45,True
|
||||
2022-01-11 15:00:00+00:00,8,GBP_USD,LONG,1.3588000000000002,1.3580362911346673,1.3596556962177755,1.3617470886533263,1.3617470886533263,1251967.51,4,OVERLAP,1.5,0.0010456962177754108,46.93200821239312,51.00256274902048,1.3586796676535777,1.357706137045164,-5.327504750940459,False,-1.1984390242834615e-05,51.78384416391094,-0.6966765357763194,0.5688073394495824,15,1,order_block_retest_long,1.3617470886533263,TP3,2022-01-11 16:00:00+00:00,19.013924590903105,2380.481582540073,60,True
|
||||
2022-01-26 13:15:00+00:00,8,GBP_USD,SHORT,1.35035,1.3512573519389977,1.3498154935366742,1.3483664806100226,1.3483664806100226,1080003.76,5,OVERLAP,1.5,0.0007245064633258078,21.849405204248473,44.652765674850386,1.350759492453876,1.3506356774513588,-3.0357092955268783,False,-1.956587934621976e-05,29.405708460749228,-2.1949245387586913,0.7142857142856496,13,2,order_block_retest_short,1.3512573519389977,SL,2022-01-26 13:45:00+00:00,-9.073519389977136,-979.9435057608214,30,False
|
||||
2022-01-26 13:45:00+00:00,8,GBP_USD,SHORT,1.35059,1.351262752437197,1.35003749187601,1.3485524756280298,1.3485524756280298,1442052.1,5,OVERLAP,1.5,0.000742508123990117,19.464348960411343,47.83847408122922,1.3507648371325476,1.3506395203770023,-0.6493989603506556,False,-5.817896106134575e-05,25.39339339339703,0.1516286745251172,0.11627906976741784,13,2,order_block_retest_short,1.351262752437197,SL,2022-01-26 14:15:00+00:00,-6.727524371969994,-970.1440648400513,30,False
|
||||
2022-02-15 16:30:00+00:00,8,GBP_USD,SHORT,1.35316,1.3538106540217145,1.3519811532609514,1.3492434597828542,1.3492434597828542,1476118.79,5,OVERLAP,1.5,0.0013688467390485818,24.246998770758942,50.04002535866185,1.3535871614003312,1.3539734534421677,-7.499780127975253,False,8.01031850030296e-05,86.4551623890161,-2.3716140033114286,0.27536231884050977,16,1,order_block_retest_short,1.3538106540217145,SL,2022-02-15 16:45:00+00:00,-6.506540217146028,-960.4426272419933,15,False
|
||||
2022-02-23 12:00:00+00:00,8,GBP_USD,LONG,1.3595100000000002,1.3585961999175469,1.3602660002748441,1.362158000824532,1.362158000824532,1040531.97,4,LONDON,1.5,0.0009460002748439305,29.256138884575677,45.46445387372739,1.3597048148672606,1.3593243854912713,-10.294592468440555,False,-0.0002278724799112696,17.346838101556738,-3.8481486726049674,0.6610169491525679,12,2,order_block_retest_long,1.3585961999175469,SL,2022-02-23 12:45:00+00:00,-9.138000824533421,-950.8381999813384,45,False
|
||||
2022-02-23 13:00:00+00:00,8,GBP_USD,LONG,1.3593400000000002,1.3586017161559,1.3600776128136667,1.361932838441,1.361932838441,1275024.27,4,OVERLAP,1.5,0.0009276128136666418,33.569848305848666,46.160688569793614,1.3595900772869276,1.3593089097719764,-9.667134105373343,False,-0.00020148909185878895,38.42108990135268,-4.400772869275205,0.6178861788618326,13,2,order_block_retest_long,1.3593400000000002,TP1+SL,2022-02-23 14:00:00+00:00,3.6880640683323307,470.23711964386604,60,True
|
||||
2022-03-02 08:30:00+00:00,8,GBP_USD,SHORT,1.3296599999999998,1.331226327243729,1.3287289091875698,1.3264867275627092,1.3264867275627092,603981.19,4,LONDON,1.5,0.0011210908124302638,34.20503225666808,47.263122632352264,1.3314673452979113,1.3361328355419673,7.710592501291025,False,3.60895352936525e-05,61.84712136247318,-16.173452979113545,0.14049586776857986,8,2,order_block_retest_short,1.3296599999999998,TP1+SL,2022-03-02 09:30:00+00:00,4.655454062150177,281.18066844477977,60,True
|
||||
2022-03-11 10:00:00+00:00,8,GBP_USD,SHORT,1.3069499999999998,1.3087706235801935,1.3060045880660218,1.3037337641980657,1.3037337641980657,521164.29,5,LONDON,1.5,0.0011354119339780757,20.65260953862956,45.13097833460103,1.3086146501039584,1.312110695232964,2.091292555232993,False,-5.858410492648751e-05,66.2359818265914,-14.746501039584192,0.23958333333326587,10,4,order_block_retest_short,1.3087706235801935,SL,2022-03-11 10:15:00+00:00,-18.206235801936366,-948.8439955288746,15,False
|
||||
2022-03-11 10:30:00+00:00,8,GBP_USD,SHORT,1.30819,1.3087846652298607,1.3071977825671313,1.3048333477013936,1.3048333477013936,1579637.6,5,LONDON,1.5,0.0011822174328688544,22.92816436993668,52.77724618079239,1.308617329834527,1.3120422400911018,12.203290661090271,False,0.0001522371211031252,79.69168347258244,-2.3732983452684486,0.572916666666445,10,4,order_block_retest_short,1.3087846652298607,SL,2022-03-11 11:00:00+00:00,-5.946652298607358,-939.355556500661,30,False
|
||||
2022-03-11 14:15:00+00:00,8,GBP_USD,SHORT,1.3075499999999998,1.308861052279197,1.3063031590693428,1.3034294772080286,1.3034294772080286,709324.88,4,OVERLAP,1.5,0.0014368409306570672,22.810091934450387,41.85605240911164,1.3090856538452253,1.3117176895059965,-13.10358539675871,False,-0.000180937851930549,34.45205022418372,-13.456538452254474,0.6958525345622667,14,4,order_block_retest_short,1.308861052279197,SL,2022-03-11 15:00:00+00:00,-13.110522791972556,-929.9620006153199,45,False
|
||||
2022-03-11 15:30:00+00:00,8,GBP_USD,SHORT,1.30802,1.3088403845196568,1.3068420516011439,1.3041061548034314,1.3041061548034314,1122232.76,4,OVERLAP,1.5,0.0013679483988562233,20.60923820415818,45.31870702550157,1.308954727023379,1.3115540490918467,-7.125911605385671,False,-0.00018847951870679922,49.155067371913994,-7.447270233789105,0.19999999999991927,15,4,order_block_retest_short,1.3088403845196568,SL,2022-03-11 15:45:00+00:00,-8.203845196568249,-920.6623837557529,15,False
|
||||
2022-03-11 16:00:00+00:00,8,GBP_USD,SHORT,1.3068899999999999,1.3088459642031736,1.3056934526560884,1.3029203579682649,1.3029203579682649,465987.95,4,OVERLAP,1.5,0.0013865473439117427,20.633944528558615,39.09993768573471,1.308865959086172,1.3114799375779367,-17.894555049609018,False,-0.0002234085261349124,36.74767085883854,-17.85959086171962,0.8097826086956194,16,4,order_block_retest_short,1.3029203579682649,TP3,2022-03-11 20:30:00+00:00,25.830947730109045,1203.6910379310668,270,True
|
||||
2022-03-25 16:00:00+00:00,8,GBP_USD,LONG,1.31987,1.3178927030675411,1.320904323108196,1.3233529693245885,1.3233529693245885,467048.05,4,OVERLAP,1.5,0.0012243231081961606,26.15003240346333,51.680390278641,1.3193205803051988,1.3196091544571193,8.89920627293428,False,2.9846092903719533e-05,30.56884281820456,3.59419694801133,0.6704545454544021,16,4,order_block_retest_long,1.3178927030675411,SL,2022-03-25 19:00:00+00:00,-19.772969324589607,-923.4926765759393,180,False
|
||||
2022-03-29 08:15:00+00:00,8,GBP_USD,SHORT,1.3094,1.3107968056824892,1.3085006477250358,1.3063219431751074,1.3063219431751074,654534.67,5,LONDON,1.5,0.0010893522749641884,18.873603169357363,49.10122904492773,1.3098499650085378,1.313023854835038,0.13880553785483585,False,-3.7653005670985817e-05,25.904784094437463,-2.5996500853775473,0.15584415584415773,8,1,order_block_retest_short,1.3063219431751074,TP3,2022-03-29 08:45:00+00:00,19.887045969549202,1301.676107095372,30,True
|
||||
2022-04-13 11:30:00+00:00,8,GBP_USD,SHORT,1.30127,1.3019417275630538,1.3005542414564872,1.2987427243694618,1.2987427243694618,1380432.41,4,LONDON,1.5,0.0009057585435127484,24.45506660808808,57.511823584136195,1.3004624930150555,1.30156303226693,8.25571268217029,False,0.0001670902476323875,74.00538238800972,9.975069849446072,0.5204081632653269,11,2,order_block_retest_short,1.30127,TP1+SL,2022-04-13 12:30:00+00:00,3.5787927175634504,494.0281455996563,60,True
|
||||
2022-04-13 13:45:00+00:00,8,GBP_USD,SHORT,1.3007699999999998,1.3020324061382043,1.2997519795393193,1.2973359386179582,1.2973359386179582,738442.85,4,OVERLAP,1.5,0.0012080204606805757,24.89803431682006,53.092374545715344,1.3004085286666782,1.3014504502206525,4.954718053260532,False,4.186144776181933e-05,64.00539352108167,5.514713333216736,0.528846153846238,13,2,order_block_retest_short,1.3020324061382043,SL,2022-04-13 14:00:00+00:00,-12.624061382044971,-932.2147865532227,15,False
|
||||
2022-04-18 14:30:00+00:00,8,GBP_USD,SHORT,1.3016999999999999,1.3025786445701322,1.3011278514328923,1.2996035542986768,1.2996035542986768,1050359.46,4,OVERLAP,1.5,0.0007621485671077644,23.13021479246453,40.50322142200413,1.3030376411401314,1.3049227576754854,-9.531249981251655,False,-0.00012621797857736405,11.418227306076998,-11.47641140131439,0.8076923076921873,14,0,order_block_retest_short,1.3016999999999999,TP1+SL,2022-04-18 17:45:00+00:00,2.8607428355376108,300.48082999341534,195,True
|
||||
2022-04-21 08:30:00+00:00,8,GBP_USD,LONG,1.3061500000000001,1.3048753917938007,1.3069086940206645,1.3088060820619933,1.3088060820619933,726417.29,4,LONDON,1.5,0.0009486940206644365,21.70195038999067,48.275160321513944,1.3059086971743232,1.3042912781164757,-2.2795029206035267,False,-4.325631559178722e-05,26.328228997402743,0.5130282567678002,0.31355932203389353,8,3,order_block_retest_long,1.3088060820619933,TP3,2022-04-21 10:15:00+00:00,17.07388077892886,1240.2762205212593,105,True
|
||||
2022-04-27 09:45:00+00:00,8,GBP_USD,SHORT,1.25867,1.2600747124017084,1.2573109586609714,1.2542128759829143,1.2542128759829143,667966.06,5,LONDON,1.5,0.0015490413390286052,29.139558823267404,55.52883479786313,1.2582984085827322,1.2672130449863583,20.66665920295918,False,0.0003135210228932038,86.90957035317943,5.615914172678593,0.6639999999999232,9,2,order_block_retest_short,1.2542128759829143,TP3,2022-04-27 12:30:00+00:00,29.080827447838924,1942.5005731872825,165,True
|
||||
2022-05-06 11:15:00+00:00,8,GBP_USD,SHORT,1.2359999999999998,1.2369814373417736,1.2345518755274216,1.2312756265822653,1.2312756265822653,975839.38,4,LONDON,1.5,0.001638124472578173,24.178256584801755,56.34506176672075,1.2352756003167285,1.2425077103155817,18.428976275775,False,0.0005311578310704136,78.29614604462095,9.143996832714496,0.5642857142857358,11,4,order_block_retest_short,1.2359999999999998,TP1+SL,2022-05-06 12:30:00+00:00,7.240622362890691,706.5684437417387,75,True
|
||||
2022-05-06 12:30:00+00:00,8,GBP_USD,SHORT,1.2347,1.2370238582453352,1.2331104725155497,1.2295514175466493,1.2295514175466493,415167.71,4,LONDON,1.5,0.0017795274844502574,23.200841960184288,51.218525672769246,1.235109904570296,1.2421099894602536,3.907501777620226,False,1.4914589535355768e-05,33.43426962875401,-2.199045702959701,0.16231884057974597,12,4,order_block_retest_short,1.2347,TP1+SL,2022-05-06 13:30:00+00:00,7.947637422250907,329.9602428506213,60,True
|
||||
2022-05-06 15:45:00+00:00,8,GBP_USD,SHORT,1.2342099999999998,1.2371333564779037,1.232255478406988,1.2279664352209638,1.2279664352209638,331157.18,4,OVERLAP,1.5,0.0021445215930120036,14.122705680227327,49.924987995575435,1.2347258168966715,1.2411258128587546,2.2686667029714336,False,0.00022073110242847035,71.99472485313518,-3.258168966715491,0.8802083333332514,15,4,order_block_retest_short,1.2342099999999998,TP1+SL,2022-05-06 19:30:00+00:00,9.772607965059521,323.62692949546494,225,True
|
||||
2022-05-11 14:30:00+00:00,8,GBP_USD,SHORT,1.23555,1.2365197220598108,1.2334409264672974,1.2288427794018923,1.2288427794018923,1001654.81,5,OVERLAP,1.5,0.0022990735327025804,21.79449001343201,51.32874064590108,1.2346959300138933,1.2339977572546452,9.753462615367248,False,0.00022410612404697057,50.25497410885987,10.440699861067326,0.6666666666666309,14,2,order_block_retest_short,1.2365197220598108,SL,2022-05-11 14:45:00+00:00,-9.69722059810829,-971.3267655726247,15,False
|
||||
2022-05-11 14:45:00+00:00,8,GBP_USD,SHORT,1.2338099999999999,1.23654117048411,1.2316294317196332,1.2268882951589,1.2268882951589,352088.42,5,OVERLAP,1.5,0.0023705682803666873,20.51278772361874,46.36115178274529,1.2346686386407995,1.2339977795705195,-7.718968449321739,False,3.0432098737410984e-05,25.825050419422386,-6.686386407994682,0.5272727272727371,14,2,order_block_retest_short,1.2268882951589,TP3,2022-05-11 17:30:00+00:00,45.51136757323209,1602.402550089852,165,True
|
||||
2022-05-26 12:30:00+00:00,8,GBP_USD,LONG,1.2578300000000002,1.2553550528174597,1.2591898239418005,1.2622894718254012,1.2622894718254012,395013.49,4,LONDON,1.5,0.001549823941800382,31.32372513810406,46.31448946960086,1.2580707339252841,1.2556292274396854,-12.389236249608082,False,-0.0003569622828557006,12.2687751101433,-4.307339252840325,0.7120418848168221,12,3,order_block_retest_long,1.2553550528174597,SL,2022-05-26 14:30:00+00:00,-24.749471825404882,-977.6375241409852,120,False
|
||||
2022-05-26 14:45:00+00:00,8,GBP_USD,LONG,1.25747,1.2553728454621464,1.2587705151261783,1.2617515453785353,1.2617515453785353,461511.6,4,OVERLAP,1.5,0.0014905151261784667,20.880034395496782,48.13598026121891,1.2576885014553578,1.2557294381525903,-9.081272133180107,False,-0.00017231193569294432,41.191119891856175,-4.085014553578681,0.77272727272724,14,3,order_block_retest_long,1.2617515453785353,TP3,2022-05-26 23:30:00+00:00,27.910303451289344,1288.0928802290066,525,True
|
||||
2022-05-27 08:00:00+00:00,8,GBP_USD,LONG,1.26221,1.261383420566913,1.263041931443623,1.2650857943308693,1.2650857943308693,1186506.75,5,LONDON,1.5,0.001021931443623157,36.19243921713851,39.43065101854664,1.2624744823715663,1.2588064520538786,3.6333333333349316,False,-0.00037251885790658617,41.21667090367865,-4.544823715664226,0.02758620689658024,8,4,order_block_retest_long,1.261383420566913,SL,2022-05-27 08:15:00+00:00,-8.265794330870602,-980.7420767689703,15,False
|
||||
2022-05-27 08:45:00+00:00,8,GBP_USD,LONG,1.2619900000000002,1.2613791333766429,1.2628362220778573,1.2649086662335716,1.2649086662335716,1589438.06,5,LONDON,1.5,0.0010362220778571546,33.67651437388261,38.488140587140045,1.2623908000432142,1.2588929640662492,0.30321092984619824,False,-0.0002804591040776738,44.991591723332554,-5.908000432142124,0.10465116279062563,8,4,order_block_retest_long,1.2613791333766429,SL,2022-05-27 09:00:00+00:00,-6.108666233572978,-970.9346607477743,15,False
|
||||
2022-05-27 11:30:00+00:00,8,GBP_USD,LONG,1.26194,1.2613165697933346,1.2629947673555513,1.265484302066654,1.265484302066654,1541833.07,5,LONDON,1.5,0.001244767355551314,28.722789638902945,51.107364544145625,1.2617275433601205,1.2590621784457507,8.804808939442132,False,5.349881473838713e-05,73.90600500602825,0.2245663987943125,0.8370786516854388,11,4,order_block_retest_long,1.2613165697933346,SL,2022-05-27 11:45:00+00:00,-6.234302066654429,-961.2253094737143,15,False
|
||||
2022-06-07 08:15:00+00:00,8,GBP_USD,SHORT,1.2504899999999999,1.2516936848384197,1.2490010505386013,1.2456431516158042,1.2456431516158042,790583.24,4,LONDON,1.5,0.001678949461398618,38.293064720107225,56.75220888658982,1.249961458881711,1.252223363764418,-6.2604761519824415,False,0.0006517355242292943,70.42478701141361,7.185411182890622,0.9274611398963576,8,1,order_block_retest_short,1.2516936848384197,SL,2022-06-07 10:15:00+00:00,-12.036848384198162,-951.6130594968148,120,False
|
||||
2022-06-07 10:45:00+00:00,8,GBP_USD,SHORT,1.2493999999999998,1.2516191494904745,1.2481595016984182,1.2452985050952545,1.2452985050952545,424530.63,5,LONDON,1.5,0.001430498301581824,31.87349834596551,49.065548176703984,1.2501526379545918,1.2520610184070793,-11.654555498503694,False,0.00022927179869496078,54.783285927130294,-5.626379545917715,0.7136563876651801,10,1,order_block_retest_short,1.2516191494904745,SL,2022-06-07 13:45:00+00:00,-22.191494904746367,-942.0969312553765,180,False
|
||||
2022-06-22 14:15:00+00:00,8,GBP_USD,LONG,1.2278300000000002,1.224845380196583,1.2294887326780564,1.233186198034169,1.233186198034169,312494.06,5,OVERLAP,1.5,0.0018487326780562896,39.26808647415607,59.82938749625781,1.2246450812356797,1.2251587307631882,28.56708389481266,False,0.00025100949238748957,43.71051579368407,29.949187643203423,0.7102272727272642,14,2,order_block_retest_long,1.2278300000000002,TP1+SL,2022-06-22 15:45:00+00:00,8.293663390280814,259.17205451022164,90,True
|
||||
2022-06-23 12:30:00+00:00,8,GBP_USD,SHORT,1.22427,1.226669358428245,1.2229288052391833,1.2198664157175496,1.2198664157175496,389799.07,4,LONDON,1.5,0.001531194760816837,36.33353494329099,60.91578466553045,1.222763288334345,1.224569929322093,37.27843758370541,False,0.0006882803100625407,83.38573570438915,16.96711665654993,0.5323741007193968,12,3,order_block_retest_short,1.226669358428245,SL,2022-06-23 13:00:00+00:00,-23.993584282451238,-935.2676839266111,30,False
|
||||
2022-06-23 15:15:00+00:00,8,GBP_USD,SHORT,1.2258399999999998,1.2268066236489465,1.2240412545035113,1.2200637635105338,1.2200637635105338,957885.73,4,OVERLAP,1.5,0.001988745496488714,43.493401568924014,55.150662533551504,1.2239881800318608,1.2247358975981042,29.187713807647953,False,0.00022957400344221198,57.73426730250509,20.418199681391247,0.6903553299492432,15,3,order_block_retest_short,1.2268066236489465,SL,2022-06-23 15:30:00+00:00,-9.666236489467295,-925.9149996066017,15,False
|
||||
2022-06-23 15:30:00+00:00,8,GBP_USD,SHORT,1.2258399999999998,1.2267897219597361,1.2240975934675462,1.2202327804026385,1.2202327804026385,965183.38,4,OVERLAP,1.5,0.0019324065324537963,41.8184500977186,55.150662533551504,1.2240682514031604,1.2247487742389191,28.016161439845533,False,0.00013082192991694416,51.680946633160126,19.617485968395076,0.008333333333388844,15,3,order_block_retest_short,1.2258399999999998,TP1+SL,2022-06-23 19:00:00+00:00,8.712032662268054,840.8709131638279,210,True
|
||||
2022-06-27 13:30:00+00:00,8,GBP_USD,LONG,1.22856,1.2264155055347992,1.2297516482173365,1.2325149446520096,1.2325149446520096,431367.19,5,OVERLAP,1.5,0.001381648217336538,38.865852295334825,53.88630428176287,1.2278695189613704,1.2271932777084054,3.8110560583026754,False,8.418430852658368e-05,95.08977617936985,5.004810386295411,0.5560538116591075,13,0,order_block_retest_long,1.22856,TP1+SL,2022-06-27 16:30:00+00:00,5.958241086682081,257.0189714904596,180,True
|
||||
2022-07-08 13:45:00+00:00,8,GBP_USD,SHORT,1.198,1.2013546039838643,1.196074653387119,1.1918439601613569,1.1918439601613569,276525.86,4,OVERLAP,1.5,0.002115346612881093,27.933021142947958,48.07663003382662,1.1990768263459497,1.198795694066415,2.784667445978606,False,0.00014462356256873202,63.54245261941864,-8.868263459496095,0.6142857142857131,13,4,order_block_retest_short,1.2013546039838643,SL,2022-07-08 14:15:00+00:00,-33.546039838643345,-927.6347515975112,30,False
|
||||
2022-07-13 15:15:00+00:00,8,GBP_USD,SHORT,1.1918499999999999,1.194147645329251,1.1890478489024965,1.1830635467074895,1.1830635467074895,399695.46,5,OVERLAP,1.5,0.002992151097503531,41.19187772311505,55.06703043140566,1.189856899069938,1.1902438065703178,28.18900083952469,False,0.0006173634179383994,75.76074390550436,21.831009300619098,0.9417808219178077,15,2,order_block_retest_short,1.18613,TP1+TIME,2022-07-14 01:15:00+00:00,42.610755487516585,1703.1325515530466,600,True
|
||||
2022-08-18 08:15:00+00:00,8,GBP_USD,SHORT,1.20356,1.205081884612868,1.2025770512904403,1.2002311538713206,1.2002311538713206,614625.92,4,LONDON,1.5,0.0011729487095598007,29.958894678639403,52.29747864674,1.2040487108476932,1.2065335139299502,-1.9284029492538934,False,0.0001975341498558418,86.60053762791391,-2.987108476930622,0.61313868613131,8,3,order_block_retest_short,1.205081884612868,SL,2022-08-18 08:45:00+00:00,-15.21884612867952,-935.3897303178089,30,False
|
||||
2022-08-18 08:45:00+00:00,8,GBP_USD,SHORT,1.2045199999999998,1.2050841045896667,1.2035296513677776,1.2011689541033326,1.2011689541033326,1641603.08,4,LONDON,1.5,0.001180348632222486,31.282347075847014,57.25695433263948,1.2040950383488318,1.2064962234880316,4.264062133150226,False,0.00033999190853556166,81.35068091896625,6.149616511681444,0.09448818897628984,8,3,order_block_retest_short,1.2050841045896667,SL,2022-08-18 09:00:00+00:00,-5.64104589666936,-926.0358318393785,15,False
|
||||
2022-08-18 09:00:00+00:00,8,GBP_USD,SHORT,1.2045199999999998,1.2050855971189764,1.203524676270079,1.2011540288102374,1.2011540288102374,1620898.41,4,LONDON,1.5,0.001185323729920878,33.07677083074685,57.25695433263948,1.204119154492015,1.2064784501199917,3.2081889832147326,False,0.0003595315969879812,77.66095476339187,5.908455079850494,0.00800000000005258,9,3,order_block_retest_short,1.2050855971189764,SL,2022-08-18 09:15:00+00:00,-5.65597118976635,-916.7754708498086,15,False
|
||||
2022-08-18 09:15:00+00:00,8,GBP_USD,SHORT,1.20396,1.2050820544676208,1.2029764851079308,1.200629455323792,1.200629455323792,808880.27,4,LONDON,1.5,0.001173514892069388,32.104995501219314,53.26101613249034,1.204120364119779,1.2064552814620813,-2.456556543142252,False,0.0003203459258976678,56.21698141390781,0.29635880220979516,0.5588235294117135,9,3,order_block_retest_short,1.2050820544676208,SL,2022-08-18 09:45:00+00:00,-11.220544676209254,-907.6077207239205,30,False
|
||||
2022-08-18 13:15:00+00:00,8,GBP_USD,SHORT,1.20295,1.205134756104629,1.20179081298457,1.1990924389537099,1.1990924389537099,411273.2,4,OVERLAP,1.5,0.0013491870154300634,33.84769627189922,40.07779465474551,1.2047571689042393,1.2063225369230632,-20.367661014588645,False,-0.00031305666998904556,21.354609652375785,-16.171689042392412,0.7753623188404212,13,3,order_block_retest_short,1.1990924389537099,TP3,2022-08-18 14:00:00+00:00,25.083741246556016,1031.6270530443082,45,True
|
||||
2022-09-07 08:00:00+00:00,8,GBP_USD,SHORT,1.1507399999999999,1.1516735722948401,1.1496847590171995,1.1471942770515986,1.1471942770515986,973516.37,4,LONDON,1.5,0.0012452409828004603,32.22279069661828,64.94412122051264,1.1494666509094293,1.1521594315714312,-3.633333333332711,False,0.0004910041658838279,77.34906994501604,14.633490905706648,0.2732919254658548,8,2,order_block_retest_short,1.1471942770515986,TP3,2022-09-07 09:15:00+00:00,23.004820020226532,2239.5568878594263,75,True
|
||||
2022-09-22 12:45:00+00:00,8,GBP_USD,SHORT,1.1333499999999999,1.135813273081321,1.1311957563955966,1.1265072691867897,1.1265072691867897,378051.26,5,LONDON,1.5,0.002344243604403467,21.28952062109188,60.886875170036234,1.1288489598184133,1.1321854301109038,20.28693844326801,False,5.174008670933805e-05,85.73178993447873,46.91040181586725,0.22279792746110533,12,3,order_block_retest_short,1.1265072691867897,TP3,2022-09-22 13:30:00+00:00,44.984873898068244,1700.6588258105812,45,True
|
||||
2022-10-14 16:15:00+00:00,8,GBP_USD,LONG,1.11989,1.1159821575636792,1.1233261414544025,1.1305784243632078,1.1305784243632078,242653.1,4,OVERLAP,1.5,0.0036261414544026364,18.39034835781186,45.228293497387405,1.1242445015027427,1.121163334862026,-25.06851027672896,False,8.545760636624491e-05,31.040004218040234,-45.4450150274277,0.6497175141243076,16,4,order_block_retest_long,1.1159821575636792,SL,2022-10-14 16:45:00+00:00,-39.07842436320807,-948.2500814847965,30,False
|
||||
2022-12-02 16:00:00+00:00,8,GBP_USD,LONG,1.2237900000000002,1.2227129223190072,1.2261902589366425,1.2313707768099273,1.2313707768099273,871587.62,4,OVERLAP,1.5,0.0025902589366424743,30.439774137507627,50.25519455132627,1.2240577444486214,1.2180170776147872,11.596219631966331,False,3.5736949566538435e-06,81.94210157301917,-4.5774444862134445,0.6507936507936877,16,4,order_block_retest_long,1.2313707768099273,TP3,2022-12-05 01:15:00+00:00,49.90517960261396,4349.673671551485,3435,True
|
||||
2022-12-16 14:00:00+00:00,8,GBP_USD,SHORT,1.2162799999999998,1.21750143596369,1.2148318801210332,1.2115556403630998,1.2115556403630998,804188.13,4,OVERLAP,1.5,0.0016381198789667197,18.312195822383046,43.091236387416366,1.218629998404227,1.2254437360190475,-0.660655351683026,False,4.286313026040405e-05,63.32508605851737,-21.599984042270925,0.6510989010989205,14,4,order_block_retest_short,1.21750143596369,SL,2022-12-16 14:15:00+00:00,-12.214359636901762,-982.2643035547507,15,False
|
||||
2022-12-16 15:00:00+00:00,8,GBP_USD,SHORT,1.2163399999999998,1.2176392040961825,1.2144326530127245,1.210237959038174,1.210237959038174,748490.3,4,OVERLAP,1.5,0.002097346987275329,17.149135119777107,45.03448564067364,1.2186886136052257,1.2251927355466141,-7.833465320434829,False,0.00012162736899418871,60.31699696625433,-21.586136052258453,0.9435336976320927,15,4,order_block_retest_short,1.2176392040961825,SL,2022-12-16 15:15:00+00:00,-12.99204096182782,-972.4416637130796,15,False
|
||||
2022-12-16 15:45:00+00:00,8,GBP_USD,SHORT,1.2151999999999998,1.2176399542271548,1.2132901525761501,1.2090904577284505,1.2090904577284505,394563.65,4,OVERLAP,1.5,0.002099847423849818,18.295755790149993,42.22012611100248,1.2184352065347506,1.2249348488413498,-18.434105310631832,False,-0.00022739306914879967,15.954128927326272,-30.452065347505997,0.5887445887445921,15,4,order_block_retest_short,1.2176399542271548,SL,2022-12-16 17:15:00+00:00,-24.399542271549276,-962.7172456991775,90,False
|
||||
|
@@ -0,0 +1,27 @@
|
||||
timestamp,strategy_id,pair,signal_direction,entry_price,sl_price,tp1_price,tp2_price,tp3_price,lot_size,confluence_score,session,spread_at_entry,atr_at_entry,adx_at_entry,rsi_at_entry,ema_50_value,ema_200_value,vwap_deviation,news_within_60min,macd_hist_at_entry,stoch_k_at_entry,distance_from_ema50_pips,candle_body_ratio,hour_of_day,day_of_week,entry_pattern,exit_price,exit_reason,exit_time,pnl_pips,pnl_dollars,hold_time_minutes,win
|
||||
2023-01-04 16:15:00+00:00,8,GBP_USD,LONG,1.20365,1.2019955181829898,1.2055082727233672,1.209604818170102,1.209604818170102,613640.29,5,OVERLAP,1.5,0.0020482727233673242,24.828586903533257,46.39099175780478,1.203604895620366,1.2022247720538362,-17.790803671431377,False,-0.0003182727667833351,43.12800562857442,-1.4489562036601455,0.017241379310331626,16,2,order_block_retest_long,1.20455,TP1+TIME,2023-01-05 02:15:00+00:00,13.791363616835193,846.2936369330198,600,True
|
||||
2023-01-12 15:00:00+00:00,8,GBP_USD,LONG,1.2146800000000002,1.212450171307346,1.218122762308847,1.2253882869265413,1.2253882869265413,459102.37,4,OVERLAP,1.5,0.0036327623088471023,28.89217519507534,47.38838993188958,1.215728944775918,1.2147773768710421,-21.244394912429687,False,-0.00029395750630274226,28.953810293643233,-12.389447759180161,0.6983372921615515,15,3,order_block_retest_long,1.22135,TP1+TIME,2023-01-13 01:00:00+00:00,50.56381154423306,2321.396571619076,600,True
|
||||
2023-02-07 09:15:00+00:00,8,GBP_USD,SHORT,1.2022,1.2032208252403203,1.2011205825322655,1.1985817475967961,1.1985817475967961,1025575.75,4,LONDON,1.5,0.0012694174677346079,42.8597230543391,45.77773191704183,1.2033762526691942,1.2080886864170148,7.392625945485953,False,-0.00011524751076478362,81.45385867782814,-9.862526691941653,0.6473988439306381,9,1,order_block_retest_short,1.1985817475967961,TP3,2023-02-07 11:00:00+00:00,23.488349707493192,2408.908186752461,105,True
|
||||
2023-02-21 08:15:00+00:00,8,GBP_USD,SHORT,1.2021,1.2030230392116337,1.2012798692945545,1.1992596078836637,1.1992596078836637,1160321.99,5,LONDON,1.5,0.0010101307054454392,26.54969383935887,50.63198756722975,1.2025370449724608,1.2024373969230482,1.6196966840675842,False,7.1416540544322555e-06,69.20631021918076,-2.4704497246075263,0.07182320441998846,8,1,order_block_retest_short,1.2021,TP1+SL,2023-02-21 09:00:00+00:00,4.100653527226994,475.8078461012545,45,True
|
||||
2023-03-22 14:00:00+00:00,8,GBP_USD,LONG,1.2233900000000002,1.2224991079170466,1.2243363069431774,1.226608920829532,1.226608920829532,1207532.08,5,OVERLAP,1.5,0.0011363069431773619,52.961220490356354,31.10235100541459,1.2254561335743301,1.2232547239990288,-37.58683324111889,False,-0.0006889110765645307,13.006996210894407,-22.56133574330077,0.21176470588229915,14,2,order_block_retest_long,1.2224991079170466,SL,2023-03-22 14:15:00+00:00,-8.90892082953565,-1075.780769984451,15,False
|
||||
2023-03-22 16:30:00+00:00,8,GBP_USD,LONG,1.22316,1.2225125696550438,1.2240614344831866,1.22624430344956,1.22624430344956,1645000.07,5,OVERLAP,1.5,0.0010914344831867435,55.531165851663296,35.23118199137821,1.224802314722933,1.2232783635738496,-29.709779643041223,False,-0.0001888055284099445,32.30293412554723,-18.32314722933104,0.14814814814830043,16,2,order_block_retest_long,1.22624430344956,TP3,2023-03-22 18:00:00+00:00,19.928689851228597,3278.2696200279333,90,True
|
||||
2023-04-17 08:00:00+00:00,8,GBP_USD,SHORT,1.2403499999999998,1.2410353112109351,1.2397889626302159,1.2382868878906477,1.2382868878906477,1601908.22,4,LONDON,1.5,0.0007510373697840877,34.93705569993603,42.26660268104398,1.2415868467369284,1.2453386082038231,-2.366666666666628,False,-5.59092643423903e-05,14.875365374219017,-10.468467369284529,0.7142857142857445,8,0,order_block_retest_short,1.2382868878906477,TP3,2023-04-17 08:45:00+00:00,13.120747524471604,2101.8233311995714,45,True
|
||||
2023-04-17 10:45:00+00:00,8,GBP_USD,SHORT,1.2404099999999998,1.2410814805179435,1.239695064940188,1.2378851948205645,1.2378851948205645,1666204.55,5,LONDON,1.5,0.0009049350598118129,35.408856430896606,52.880471730360966,1.240817341135284,1.244714239716178,12.958143718451165,False,0.00010414304926448248,84.7864611022511,-2.1734113528415477,0.09375000000027105,10,0,order_block_retest_short,1.2410814805179435,SL,2023-04-17 11:00:00+00:00,-6.714805179437454,-1118.8238942342255,15,False
|
||||
2023-04-19 12:15:00+00:00,8,GBP_USD,LONG,1.24239,1.2407230516078274,1.2435231613072424,1.246169483921727,1.246169483921727,664469.07,4,LONDON,1.5,0.0013231613072423173,29.756143573916148,50.30855591681825,1.242379101267775,1.2421607130872452,-0.6684668013745565,False,-0.00015925954277813507,68.09784502563475,-1.791012677749837,0.9428571428570884,12,2,order_block_retest_long,1.246169483921727,TP3,2023-04-19 14:00:00+00:00,24.56322671364342,1632.15044106138,105,True
|
||||
2023-04-20 10:15:00+00:00,8,GBP_USD,LONG,1.2430100000000002,1.2421087316329926,1.2437575612233587,1.2456326836700757,1.2456326836700757,1247083.78,4,LONDON,1.5,0.0009375612233585675,17.354460143583257,47.02494713646246,1.243227897611525,1.2429226121995482,-5.340435273353261,False,-9.878322658389219e-05,42.998306041783316,-4.078976115249322,0.011627906976819242,10,3,order_block_retest_long,1.2430100000000002,TP1+SL,2023-04-20 11:45:00+00:00,3.73780611679253,466.135738103675,90,True
|
||||
2023-04-26 15:15:00+00:00,8,GBP_USD,LONG,1.2475600000000002,1.246499647895895,1.248704507013683,1.2513735210410493,1.2513735210410493,1064380.89,5,OVERLAP,1.5,0.0013345070136830542,26.34195359670421,51.29017731534317,1.2460574479327802,1.244526771072989,-3.4121820094146216,False,-0.00027560185090648383,33.00332434861023,13.125520672199187,0.15306122448989534,15,2,order_block_retest_long,1.2475600000000002,TP1+SL,2023-04-26 16:15:00+00:00,5.722535068414246,609.0956969174966,60,True
|
||||
2023-05-10 14:45:00+00:00,8,GBP_USD,LONG,1.26197,1.2607197055404828,1.2632476481983905,1.2661829445951716,1.2661829445951716,907553.79,5,OVERLAP,1.5,0.0014676481983905464,23.980289771359818,45.27490378414957,1.262617719959161,1.262076892421481,-15.489512537254502,False,-0.00016066831904927635,18.98077534844604,-8.37719959161154,0.22321428571416005,14,2,order_block_retest_long,1.2607197055404828,SL,2023-05-10 17:30:00+00:00,-12.502944595171872,-1134.709475350825,165,False
|
||||
2023-05-12 08:30:00+00:00,8,GBP_USD,SHORT,1.25256,1.253868280156616,1.2518890661446125,1.2501671984338374,1.2501671984338374,858655.83,4,LONDON,1.5,0.000860933855387582,20.679617585225813,54.010390574321384,1.2522976210453727,1.2560853457614982,3.188924475667765,False,2.2852086423018282e-05,48.80496259806694,4.523789546273527,0.7058823529412149,8,4,order_block_retest_short,1.25256,TP1+SL,2023-05-12 09:45:00+00:00,3.354669276937061,288.0506332363892,75,True
|
||||
2023-05-12 10:45:00+00:00,8,GBP_USD,SHORT,1.25321,1.2538950927062247,1.2524496909792506,1.2505490729377517,1.2505490729377517,1643927.71,4,LONDON,1.5,0.000950309020749464,15.612495224743,55.32833981513413,1.2525050884668534,1.2558169124359604,6.133020150200785,False,5.010901511437379e-05,83.36477987421839,8.949115331466917,0.06060606060613197,10,4,order_block_retest_short,1.2505490729377517,TP3,2023-05-12 12:15:00+00:00,17.106180576851454,2812.1324262549892,90,True
|
||||
2023-05-16 08:15:00+00:00,8,GBP_USD,SHORT,1.2519399999999998,1.2529850840895402,1.251179719701532,1.2492791591045957,1.2492791591045957,1104565.86,5,LONDON,1.5,0.0009502802984680438,35.15215178281975,56.516566002886144,1.2514082719721524,1.2512077734494853,-1.6330472376924199,False,0.00031663419130228986,90.97651461577807,7.2172802784753465,0.6705882352940562,8,1,order_block_retest_short,1.2529850840895402,SL,2023-05-16 08:30:00+00:00,-10.450840895404044,-1154.364206135514,15,False
|
||||
2023-05-16 11:45:00+00:00,8,GBP_USD,SHORT,1.25158,1.2529864622852407,1.2508151257158644,1.2489053771475929,1.2489053771475929,812549.74,5,LONDON,1.5,0.0009548742841357593,31.402513434601197,44.995672477055756,1.2521906797019333,1.251474000723345,-13.125142193917139,False,-5.627656120118206e-05,27.842131174965555,-4.2067970193326865,0.8773584905660535,11,1,order_block_retest_short,1.25158,TP1+SL,2023-05-16 13:00:00+00:00,3.8243714206775965,310.7492003535012,75,True
|
||||
2023-05-16 13:45:00+00:00,8,GBP_USD,SHORT,1.25131,1.2530970298852058,1.250176567049314,1.2475297011479416,1.2475297011479416,641247.28,5,OVERLAP,1.5,0.0013234329506861644,32.80094027257984,46.95301649878922,1.2520196236700625,1.2514799985877245,-5.287070796238247,False,-0.00013263251404523494,58.10711184240629,-5.1962367006241905,0.9348837209301187,13,1,order_block_retest_short,1.24836,TP1+TIME,2023-05-16 23:45:00+00:00,20.417164753430136,1309.2451363448947,600,True
|
||||
2023-05-23 14:15:00+00:00,8,GBP_USD,SHORT,1.24237,1.2437653729455918,1.241275423514694,1.2387062705440823,1.2387062705440823,830617.01,4,OVERLAP,1.5,0.0012845764853059527,41.43951273219814,65.35758249875914,1.240789497620608,1.2427858970621604,28.209191144135115,False,0.0006123172139903094,86.43022005614006,17.70502379392136,0.02752293577979222,14,1,order_block_retest_short,1.24237,TP1+SL,2023-05-23 17:30:00+00:00,5.472882426529324,454.5869237205332,195,True
|
||||
2023-05-25 10:45:00+00:00,8,GBP_USD,SHORT,1.2354599999999998,1.2362597660440784,1.234684113186405,1.2327523395592155,1.2327523395592155,1454883.45,5,LONDON,1.5,0.0009658868135947878,37.09213068703965,46.781478566249206,1.2360094490026665,1.2384931897638667,-12.742739577773499,False,-5.509036675288906e-05,10.917123031529355,-3.5944900266660085,0.8194444444445087,10,3,order_block_retest_short,1.2362597660440784,SL,2023-05-25 11:00:00+00:00,-7.997660440786091,-1163.566381401939,15,False
|
||||
2023-05-25 11:30:00+00:00,8,GBP_USD,SHORT,1.2357399999999998,1.236259331996662,1.234965560011127,1.2330366800333807,1.2330366800333807,2218100.8,5,LONDON,1.5,0.0009644399888730731,27.29758742867364,48.69653331951773,1.236035570675794,1.2384266750182578,-8.706892601768601,False,-0.00013167141959900342,34.73748354384417,-1.055706757939756,0.6428571428571853,11,3,order_block_retest_short,1.236259331996662,SL,2023-05-25 11:45:00+00:00,-5.193319966620979,-1151.9307172617966,15,False
|
||||
2023-05-25 12:30:00+00:00,8,GBP_USD,SHORT,1.2345599999999999,1.2363153712556398,1.2335987624812004,1.2312962874436013,1.2312962874436013,649669.64,5,LONDON,1.5,0.0011512375187995674,25.071726005857933,41.960735197634946,1.2360721847151899,1.2383434199412342,-16.847903009227227,False,-0.00017713820104579083,54.70385628419199,-13.221847151898558,0.7073170731706864,12,3,order_block_retest_short,1.2345599999999999,TP1+SL,2023-05-25 13:15:00+00:00,4.806187593997534,312.24341639648446,45,True
|
||||
2023-05-31 15:45:00+00:00,8,GBP_USD,SHORT,1.23914,1.2414107390662144,1.237560869779286,1.2340226093378575,1.2340226093378575,503595.44,5,OVERLAP,1.5,0.001769130220714206,30.96208538630321,54.49555859325747,1.2379837435866534,1.237891609141245,17.38356794060536,False,0.0002630570115639937,70.75829013947667,13.462564133466248,0.675889328063214,15,2,order_block_retest_short,1.23914,TP1+SL,2023-05-31 16:30:00+00:00,7.895651103569934,397.6213891588786,45,True
|
||||
2023-07-05 14:45:00+00:00,8,GBP_USD,LONG,1.2718300000000002,1.2700194303892116,1.272808565369295,1.275145696107885,1.275145696107885,633784.0,4,OVERLAP,1.5,0.0011685653692949912,33.735444534485914,52.51237040219962,1.2710746525739183,1.2703244937129279,5.3228735163646235,False,3.390395401762678e-05,28.070575075458922,5.653474260818303,0.6688741721855921,14,2,order_block_retest_long,1.2700194303892116,SL,2023-07-05 18:15:00+00:00,-18.10569610788626,-1147.5100502040586,210,False
|
||||
2023-08-22 11:15:00+00:00,8,GBP_USD,LONG,1.2765900000000001,1.2756016309531895,1.277261230156035,1.2789836904681053,1.2789836904681053,1149403.62,4,LONDON,1.5,0.0008612301560351482,31.175972411376108,41.58462475954048,1.2772887864996425,1.275412799816495,-13.90770917667039,False,-0.0003520272892787923,12.664560511221731,-8.887864996425243,0.8902439024390938,11,1,order_block_retest_long,1.2756016309531895,SL,2023-08-22 12:15:00+00:00,-9.883690468106552,-1136.0349603001168,60,False
|
||||
2023-08-23 16:30:00+00:00,8,GBP_USD,SHORT,1.27137,1.2735848051383152,1.2702106495389494,1.267511948616848,1.267511948616848,507798.45,5,OVERLAP,1.5,0.001349350461050656,68.55560281556299,66.03190653406516,1.2690627231639777,1.272287520885155,48.083376389722595,False,0.0007462097963985394,84.31695649446279,24.972768360222997,0.6222222222222661,16,2,order_block_retest_short,1.27121,TIME,2023-08-24 02:30:00+00:00,1.5999999999993797,81.2477519999685,600,True
|
||||
2023-08-29 15:45:00+00:00,8,GBP_USD,SHORT,1.2609499999999998,1.263424947307137,1.2594235089762094,1.255990526928628,1.255990526928628,454751.94,4,OVERLAP,1.5,0.0017164910237906332,36.04019870741589,54.16072968760498,1.2601316513093,1.2605680853022792,14.310598401192642,False,0.0005103817726420816,73.82834818151917,10.083486906999894,0.8244680851065211,15,1,order_block_retest_short,1.263424947307137,SL,2023-08-29 17:30:00+00:00,-24.749473071372652,-1125.4870893184473,105,False
|
||||
|
@@ -20,6 +20,7 @@ from src.backtester.engine import Backtester
|
||||
from src.strategies_pkg.s7_liquidity_sweep import S7_Liquidity_Sweep
|
||||
from src.strategies_pkg.s9_london_session import S9_London_Session
|
||||
from src.strategies_pkg.s3_key_level_breakout import S3_KeyLevel_Breakout
|
||||
from src.strategies_pkg.s8_order_block import S8_Order_Block
|
||||
|
||||
PROCESSED_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), "data", "processed")
|
||||
RESULTS_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), "results", "phase2")
|
||||
@@ -76,6 +77,21 @@ SWEEP_CONFIGS = [
|
||||
"KEY_LEVEL_TOLERANCE": [0.5, 0.75],
|
||||
},
|
||||
},
|
||||
# S8: Order Block Retest on GBP_USD (M15 + H1 HTF)
|
||||
# OOS: 26t PF=2.14 WR=65.4% Gen=1.850 PASS with DISP=2.0/TP1=1.0/Window=40
|
||||
{
|
||||
"name": "S8_OB",
|
||||
"pair": "GBP_USD",
|
||||
"tf": "M15",
|
||||
"htf_tf": "H1",
|
||||
"factory": lambda: S8_Order_Block(),
|
||||
"param_mode": "setattr",
|
||||
"grid": {
|
||||
"DISPLACEMENT_ATR": [1.5, 2.0, 2.5],
|
||||
"TP1_ATR_MULT": [1.0, 1.5, 2.0],
|
||||
"OB_RETEST_WINDOW": [30, 40, 50],
|
||||
},
|
||||
},
|
||||
# S10 dropped: insufficient trade counts on M15, no pair passes generalization
|
||||
# S11 dropped: OOS collapsed across all param combos (0% WR, Gen=0.00)
|
||||
]
|
||||
|
||||
@@ -26,6 +26,7 @@ from src.backtester.engine import Backtester
|
||||
from src.strategies_pkg.s7_liquidity_sweep import S7_Liquidity_Sweep
|
||||
from src.strategies_pkg.s9_london_session import S9_London_Session
|
||||
from src.strategies_pkg.s3_key_level_breakout import S3_KeyLevel_Breakout
|
||||
from src.strategies_pkg.s8_order_block import S8_Order_Block
|
||||
|
||||
PROCESSED_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), "data", "processed")
|
||||
RESULTS_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), "results", "phase2")
|
||||
@@ -48,11 +49,23 @@ CONFIGS = [
|
||||
"factory": lambda: S9_London_Session(pair="GBP_AUD", filtered=True)},
|
||||
{"name": "S3", "pair": "GBP_JPY", "tf": "H1", "htf_tf": "H1",
|
||||
"factory": lambda: S3_KeyLevel_Breakout()},
|
||||
# S8: Order Block Retest — best sweep params (DISP_ATR=2.0, TP1=1.0, Window=40)
|
||||
# OOS: 26t PF=2.14 WR=65.4% Gen=1.850 PASS
|
||||
{"name": "S8_OB", "pair": "GBP_USD", "tf": "M15", "htf_tf": "H1",
|
||||
"factory": lambda: _s8_tuned()},
|
||||
# S10 dropped: insufficient trade counts on M15, no pair passes generalization
|
||||
# S11 dropped: OOS collapsed across all param combos (0% WR, Gen=0.00)
|
||||
]
|
||||
|
||||
|
||||
def _s8_tuned():
|
||||
s = S8_Order_Block()
|
||||
s.DISPLACEMENT_ATR = 2.0
|
||||
s.TP1_ATR_MULT = 1.0
|
||||
s.OB_RETEST_WINDOW = 40
|
||||
return s
|
||||
|
||||
|
||||
def load_data(pair, tf):
|
||||
"""Load price data with indicators."""
|
||||
fp = os.path.join(PROCESSED_DIR, f"{pair}_{tf}.csv")
|
||||
|
||||
@@ -0,0 +1,279 @@
|
||||
"""
|
||||
Parameter Sweep — S8 Order Block Retest on GBP_USD (M15 + H1 HTF).
|
||||
|
||||
Sweeps key tunable parameters on IS, validates top-N on OOS.
|
||||
|
||||
Grid (27 combos):
|
||||
DISPLACEMENT_ATR: [1.0, 1.5, 2.0] — entry filter strictness
|
||||
TP1_ATR_MULT: [1.0, 1.5, 2.0] — first profit target
|
||||
OB_RETEST_WINDOW: [20, 30, 40] — OB freshness window (bars)
|
||||
"""
|
||||
import os, sys, io, json, time
|
||||
from itertools import product
|
||||
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')
|
||||
sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))
|
||||
|
||||
import pandas as pd
|
||||
import numpy as np
|
||||
from src.indicators.technical import compute_all_indicators
|
||||
from src.backtester.engine import Backtester
|
||||
from src.strategies_pkg.s8_order_block import S8_Order_Block
|
||||
|
||||
PROCESSED_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), "data", "processed")
|
||||
RESULTS_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), "results", "phase2")
|
||||
os.makedirs(RESULTS_DIR, exist_ok=True)
|
||||
|
||||
IS_START = "2021-01-01"
|
||||
IS_END = "2022-12-31"
|
||||
OOS_START = "2023-01-01"
|
||||
OOS_END = "2023-08-31"
|
||||
WARMUP_DAYS = 60
|
||||
|
||||
PAIR = "GBP_USD"
|
||||
TF = "M15"
|
||||
HTF_TF = "H1"
|
||||
|
||||
PARAM_GRID = {
|
||||
"DISPLACEMENT_ATR": [1.0, 1.5, 2.0],
|
||||
"TP1_ATR_MULT": [1.0, 1.5, 2.0],
|
||||
"OB_RETEST_WINDOW": [20, 30, 40],
|
||||
}
|
||||
|
||||
# Number of top IS results to validate on OOS
|
||||
TOP_N = 5
|
||||
|
||||
|
||||
def load_data(pair, tf):
|
||||
fp = os.path.join(PROCESSED_DIR, f"{pair}_{tf}.csv")
|
||||
if not os.path.exists(fp):
|
||||
print(f" WARNING: {fp} not found")
|
||||
return None
|
||||
df = pd.read_csv(fp, index_col=0, parse_dates=True)
|
||||
df.index.name = "timestamp"
|
||||
return compute_all_indicators(df)
|
||||
|
||||
|
||||
def slice_period(df, start, end, warmup_days=WARMUP_DAYS):
|
||||
if df.index.tz is not None:
|
||||
start_ts = pd.Timestamp(start, tz=df.index.tz)
|
||||
end_ts = pd.Timestamp(f"{end} 23:59:59", tz=df.index.tz)
|
||||
else:
|
||||
start_ts = pd.Timestamp(start)
|
||||
end_ts = pd.Timestamp(f"{end} 23:59:59")
|
||||
warmup_start = start_ts - pd.DateOffset(days=warmup_days)
|
||||
sliced = df[(df.index >= warmup_start) & (df.index <= end_ts)].copy()
|
||||
return sliced, start_ts
|
||||
|
||||
|
||||
def run_single(data, htf_data, start, end, params):
|
||||
sliced, start_ts = slice_period(data, start, end)
|
||||
if len(sliced) < 250:
|
||||
return {"trades": 0, "wr": 0, "pf": 0, "sharpe": 0,
|
||||
"pnl_pips": 0, "max_dd_pips": 0, "expectancy": 0}
|
||||
|
||||
htf_sliced = slice_period(htf_data, start, end)[0]
|
||||
|
||||
strategy = S8_Order_Block()
|
||||
for key, value in params.items():
|
||||
setattr(strategy, key, value)
|
||||
|
||||
bt = Backtester(data=sliced, strategy=strategy, pair=PAIR,
|
||||
starting_equity=100_000.0, htf_data=htf_sliced)
|
||||
bt.run()
|
||||
trade_log = bt.get_trade_log_df()
|
||||
|
||||
if not trade_log.empty:
|
||||
ts = pd.to_datetime(trade_log["timestamp"])
|
||||
filter_ts = pd.Timestamp(start_ts)
|
||||
if ts.dt.tz is not None and filter_ts.tz is None:
|
||||
filter_ts = filter_ts.tz_localize(ts.dt.tz)
|
||||
elif ts.dt.tz is None and filter_ts.tz is not None:
|
||||
filter_ts = filter_ts.tz_localize(None)
|
||||
trade_log = trade_log[ts >= filter_ts]
|
||||
|
||||
return compute_metrics(trade_log)
|
||||
|
||||
|
||||
def compute_metrics(trade_log):
|
||||
if trade_log.empty or len(trade_log) == 0:
|
||||
return {"trades": 0, "wr": 0, "pf": 0, "sharpe": 0,
|
||||
"pnl_pips": 0, "max_dd_pips": 0, "expectancy": 0}
|
||||
|
||||
n = len(trade_log)
|
||||
wins = trade_log[trade_log["win"] == True]
|
||||
losses = trade_log[trade_log["win"] == False]
|
||||
|
||||
wr = len(wins) / n * 100 if n > 0 else 0
|
||||
gross_profit = wins["pnl_pips"].sum() if len(wins) > 0 else 0
|
||||
gross_loss = abs(losses["pnl_pips"].sum()) if len(losses) > 0 else 0
|
||||
pf = gross_profit / gross_loss if gross_loss > 0 else float("inf")
|
||||
total_pnl = trade_log["pnl_pips"].sum()
|
||||
expectancy = total_pnl / n if n > 0 else 0
|
||||
|
||||
if n > 1:
|
||||
pnl_series = trade_log["pnl_pips"]
|
||||
sharpe = (pnl_series.mean() / pnl_series.std()) * np.sqrt(252) \
|
||||
if pnl_series.std() > 0 else 0
|
||||
else:
|
||||
sharpe = 0
|
||||
|
||||
cum_pnl = trade_log["pnl_pips"].cumsum()
|
||||
peak = cum_pnl.cummax()
|
||||
dd = cum_pnl - peak
|
||||
max_dd = dd.min() if len(dd) > 0 else 0
|
||||
|
||||
return {
|
||||
"trades": n,
|
||||
"wr": round(wr, 1),
|
||||
"pf": round(pf, 2),
|
||||
"sharpe": round(sharpe, 2),
|
||||
"pnl_pips": round(total_pnl, 1),
|
||||
"max_dd_pips": round(max_dd, 1),
|
||||
"expectancy": round(expectancy, 2),
|
||||
}
|
||||
|
||||
|
||||
def compute_generalization_score(is_m, oos_m):
|
||||
if is_m["trades"] == 0 or oos_m["trades"] == 0:
|
||||
return 0.0
|
||||
ratios = {}
|
||||
if is_m["wr"] > 0:
|
||||
ratios["wr"] = min(oos_m["wr"] / is_m["wr"], 2.0)
|
||||
if is_m["pf"] > 0 and is_m["pf"] != float("inf"):
|
||||
oos_pf = min(oos_m["pf"], 2 * is_m["pf"]) if oos_m["pf"] == float("inf") else oos_m["pf"]
|
||||
ratios["pf"] = min(oos_pf / is_m["pf"], 2.0)
|
||||
if is_m["expectancy"] > 0:
|
||||
ratios["expectancy"] = min(oos_m["expectancy"] / is_m["expectancy"], 2.0)
|
||||
if is_m["sharpe"] > 0:
|
||||
ratios["sharpe"] = min(oos_m["sharpe"] / is_m["sharpe"], 2.0)
|
||||
for k in ratios:
|
||||
ratios[k] = max(ratios[k], 0.0)
|
||||
return round(np.mean(list(ratios.values())), 3) if ratios else 0.0
|
||||
|
||||
|
||||
def expand_grid(grid):
|
||||
keys = list(grid.keys())
|
||||
values = list(grid.values())
|
||||
return [dict(zip(keys, combo)) for combo in product(*values)]
|
||||
|
||||
|
||||
def main():
|
||||
t0 = time.time()
|
||||
|
||||
print(f"{'='*100}")
|
||||
print(f"PARAMETER SWEEP — S8 Order Block Retest / {PAIR} ({TF} + {HTF_TF})")
|
||||
print(f" IS period: {IS_START} to {IS_END}")
|
||||
print(f" OOS period: {OOS_START} to {OOS_END}")
|
||||
print(f"{'='*100}")
|
||||
|
||||
# Load data
|
||||
print(f"\n Loading {PAIR} {TF}...")
|
||||
data = load_data(PAIR, TF)
|
||||
if data is None:
|
||||
return
|
||||
print(f" Loading {PAIR} {HTF_TF}...")
|
||||
htf_data = load_data(PAIR, HTF_TF)
|
||||
if htf_data is None:
|
||||
return
|
||||
|
||||
combos = expand_grid(PARAM_GRID)
|
||||
print(f" Grid: {len(combos)} combinations\n")
|
||||
|
||||
# IS sweep
|
||||
is_results = []
|
||||
for i, params in enumerate(combos, 1):
|
||||
param_str = ", ".join(f"{k}={v}" for k, v in params.items())
|
||||
metrics = run_single(data, htf_data, IS_START, IS_END, params)
|
||||
is_results.append({"params": params, "metrics": metrics})
|
||||
status = f" [{i:>2}/{len(combos)}] {param_str}"
|
||||
status += f" -> {metrics['trades']}t PF={metrics['pf']:.2f} WR={metrics['wr']:.1f}% Exp={metrics['expectancy']:+.2f}"
|
||||
print(status)
|
||||
|
||||
# Rank by PF (filter out < 5 trades)
|
||||
valid = [r for r in is_results if r["metrics"]["trades"] >= 5]
|
||||
if not valid:
|
||||
print("\n No valid IS results (all combos had <5 trades)")
|
||||
return
|
||||
|
||||
valid.sort(key=lambda r: (r["metrics"]["pf"], r["metrics"]["trades"]), reverse=True)
|
||||
|
||||
print(f"\n --- IS Rankings (all valid) ---")
|
||||
print(f" {'Rank':>4} {'PF':>6} {'WR%':>6} {'Trades':>6} {'Sharpe':>7} {'Exp':>7} {'PnL':>9} {'DD':>8} Params")
|
||||
for rank, r in enumerate(valid, 1):
|
||||
m = r["metrics"]
|
||||
p_str = ", ".join(f"{k}={v}" for k, v in r["params"].items())
|
||||
print(f" {rank:>4} {m['pf']:>6.2f} {m['wr']:>5.1f}% {m['trades']:>6} "
|
||||
f"{m['sharpe']:>7.2f} {m['expectancy']:>+7.2f} {m['pnl_pips']:>+9.1f} "
|
||||
f"{m['max_dd_pips']:>+8.1f} {p_str}")
|
||||
|
||||
# Validate top-N on OOS
|
||||
print(f"\n{'='*100}")
|
||||
print(f"OOS VALIDATION (Top {TOP_N} IS param sets)")
|
||||
print(f"{'='*100}")
|
||||
print(f" {'Rank':>4} {'IS PF':>6} {'OOS PF':>7} {'OOS WR':>7} {'OOS Trades':>10} "
|
||||
f"{'OOS Exp':>8} {'OOS PnL':>9} {'OOS DD':>8} {'Gen':>6} {'Verdict':>8} Params")
|
||||
|
||||
oos_results = []
|
||||
for rank, r in enumerate(valid[:TOP_N], 1):
|
||||
params = r["params"]
|
||||
is_m = r["metrics"]
|
||||
oos_m = run_single(data, htf_data, OOS_START, OOS_END, params)
|
||||
gen = compute_generalization_score(is_m, oos_m)
|
||||
|
||||
if gen >= 0.80:
|
||||
verdict = "PASS"
|
||||
elif gen >= 0.50:
|
||||
verdict = "WARN"
|
||||
else:
|
||||
verdict = "FAIL"
|
||||
|
||||
p_str = ", ".join(f"{k}={v}" for k, v in params.items())
|
||||
pf_str = f"{oos_m['pf']:.2f}" if oos_m['pf'] != float('inf') else "inf"
|
||||
print(f" {rank:>4} {is_m['pf']:>6.2f} {pf_str:>7} {oos_m['wr']:>6.1f}% "
|
||||
f"{oos_m['trades']:>10} {oos_m['expectancy']:>+8.2f} "
|
||||
f"{oos_m['pnl_pips']:>+9.1f} {oos_m['max_dd_pips']:>+8.1f} "
|
||||
f"{gen:>5.3f} {verdict:>8} {p_str}")
|
||||
|
||||
oos_results.append({
|
||||
"rank": rank,
|
||||
"params": params,
|
||||
"is_metrics": is_m,
|
||||
"oos_metrics": oos_m,
|
||||
"generalization_score": gen,
|
||||
"verdict": verdict,
|
||||
})
|
||||
|
||||
# Save results
|
||||
out_path = os.path.join(RESULTS_DIR, "s8_param_sweep.json")
|
||||
|
||||
def json_default(obj):
|
||||
if isinstance(obj, (np.integer,)):
|
||||
return int(obj)
|
||||
if isinstance(obj, (np.floating,)):
|
||||
return float(obj)
|
||||
if isinstance(obj, (np.bool_,)):
|
||||
return bool(obj)
|
||||
return str(obj)
|
||||
|
||||
results = {
|
||||
"pair": PAIR,
|
||||
"timeframe": TF,
|
||||
"htf": HTF_TF,
|
||||
"combos_tested": len(combos),
|
||||
"is_results_ranked": [
|
||||
{"rank": i + 1, "params": r["params"], "metrics": r["metrics"]}
|
||||
for i, r in enumerate(valid)
|
||||
],
|
||||
"oos_validation": oos_results,
|
||||
}
|
||||
|
||||
with open(out_path, "w") as f:
|
||||
json.dump(results, f, indent=2, default=json_default)
|
||||
print(f"\nResults saved: {out_path}")
|
||||
|
||||
elapsed = time.time() - t0
|
||||
print(f"Total runtime: {elapsed:.1f}s")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -0,0 +1,401 @@
|
||||
"""
|
||||
Test All Untested Strategies — IS/OOS Backtest.
|
||||
|
||||
Runs all strategy files that aren't in the current Phase 2 portfolio
|
||||
(S3, S7, S9 are already tested) across appropriate pairs.
|
||||
|
||||
Strategies tested:
|
||||
S1 - Trendline Breakout Retest (M15 + H1 HTF)
|
||||
S2 - VWAP Reversal (M15)
|
||||
S5 - Momentum Exhaustion (M15 + H1 HTF)
|
||||
S6 - EMA Bounce v4 (M15 + H1 HTF)
|
||||
S6A - EMA Bounce Three-Checkpoint (M15 + H1 HTF)
|
||||
S6B - EMA Bounce Two-Checkpoint (M15 + H1 HTF)
|
||||
S8 - Order Block Retest (M15 + H1 HTF)
|
||||
S10 - VWAP Mean Reversion (M15 + H1 HTF)
|
||||
S11 - ADX Trend Pullback (M15 + H1 HTF)
|
||||
|
||||
Skipped (need M5 data we don't have):
|
||||
S4, S4D, S4E, S4F, S4Fv2, S4G
|
||||
"""
|
||||
import os, sys, io, json, time
|
||||
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8', errors='replace')
|
||||
sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))
|
||||
|
||||
import pandas as pd
|
||||
import numpy as np
|
||||
from src.indicators.technical import compute_all_indicators
|
||||
from src.backtester.engine import Backtester
|
||||
|
||||
# Strategy imports
|
||||
from src.strategies_pkg.s1_ma_breakout import S1_MA_Breakout
|
||||
from src.strategies_pkg.s2_vwap_reversal import S2_VWAP_Reversal
|
||||
from src.strategies_pkg.s5_momentum_exhaustion import S5_Momentum_Exhaustion
|
||||
from src.strategies_pkg.s6_ema_bounce import S6_EMA_Bounce
|
||||
from src.strategies_pkg.s6a_ema_bounce import S6A_EMA_Bounce
|
||||
from src.strategies_pkg.s6b_ema_bounce import S6B_EMA_Bounce
|
||||
from src.strategies_pkg.s8_order_block import S8_Order_Block
|
||||
from src.strategies_pkg.s10_vwap_mean_reversion import S10_VWAP_MeanReversion
|
||||
from src.strategies_pkg.s11_adx_trend_pullback import S11_ADX_TrendPullback
|
||||
|
||||
PROCESSED_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), "data", "processed")
|
||||
RESULTS_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), "results", "phase2")
|
||||
os.makedirs(RESULTS_DIR, exist_ok=True)
|
||||
|
||||
# IS/OOS period definitions (same as Phase 2)
|
||||
IS_START = "2021-01-01"
|
||||
IS_END = "2022-12-31"
|
||||
OOS_START = "2023-01-01"
|
||||
OOS_END = "2023-08-31"
|
||||
WARMUP_DAYS = 60
|
||||
|
||||
# All M15 strategies with H1 as HTF
|
||||
CONFIGS = [
|
||||
# S1: Trendline Breakout Retest
|
||||
{"name": "S1_GBP_JPY", "pair": "GBP_JPY", "tf": "M15", "htf_tf": "H1",
|
||||
"factory": lambda: S1_MA_Breakout()},
|
||||
{"name": "S1_GBP_USD", "pair": "GBP_USD", "tf": "M15", "htf_tf": "H1",
|
||||
"factory": lambda: S1_MA_Breakout()},
|
||||
{"name": "S1_EUR_USD", "pair": "EUR_USD", "tf": "M15", "htf_tf": "H1",
|
||||
"factory": lambda: S1_MA_Breakout()},
|
||||
|
||||
# S2: VWAP Reversal (no HTF needed, but engine will pass htf_row anyway)
|
||||
{"name": "S2_EUR_USD", "pair": "EUR_USD", "tf": "M15", "htf_tf": "H1",
|
||||
"factory": lambda: S2_VWAP_Reversal()},
|
||||
{"name": "S2_GBP_JPY", "pair": "GBP_JPY", "tf": "M15", "htf_tf": "H1",
|
||||
"factory": lambda: S2_VWAP_Reversal()},
|
||||
{"name": "S2_GBP_USD", "pair": "GBP_USD", "tf": "M15", "htf_tf": "H1",
|
||||
"factory": lambda: S2_VWAP_Reversal()},
|
||||
|
||||
# S5: Momentum Exhaustion
|
||||
{"name": "S5_GBP_JPY", "pair": "GBP_JPY", "tf": "M15", "htf_tf": "H1",
|
||||
"factory": lambda: S5_Momentum_Exhaustion()},
|
||||
{"name": "S5_EUR_USD", "pair": "EUR_USD", "tf": "M15", "htf_tf": "H1",
|
||||
"factory": lambda: S5_Momentum_Exhaustion()},
|
||||
|
||||
# S6: EMA Bounce v4
|
||||
{"name": "S6_GBP_JPY", "pair": "GBP_JPY", "tf": "M15", "htf_tf": "H1",
|
||||
"factory": lambda: S6_EMA_Bounce()},
|
||||
{"name": "S6_EUR_USD", "pair": "EUR_USD", "tf": "M15", "htf_tf": "H1",
|
||||
"factory": lambda: S6_EMA_Bounce()},
|
||||
|
||||
# S6A: EMA Bounce Three-Checkpoint
|
||||
{"name": "S6A_GBP_JPY", "pair": "GBP_JPY", "tf": "M15", "htf_tf": "H1",
|
||||
"factory": lambda: S6A_EMA_Bounce()},
|
||||
{"name": "S6A_EUR_USD", "pair": "EUR_USD", "tf": "M15", "htf_tf": "H1",
|
||||
"factory": lambda: S6A_EMA_Bounce()},
|
||||
|
||||
# S6B: EMA Bounce Two-Checkpoint
|
||||
{"name": "S6B_GBP_JPY", "pair": "GBP_JPY", "tf": "M15", "htf_tf": "H1",
|
||||
"factory": lambda: S6B_EMA_Bounce()},
|
||||
|
||||
# S8: Order Block Retest
|
||||
{"name": "S8_GBP_JPY", "pair": "GBP_JPY", "tf": "M15", "htf_tf": "H1",
|
||||
"factory": lambda: S8_Order_Block()},
|
||||
{"name": "S8_EUR_USD", "pair": "EUR_USD", "tf": "M15", "htf_tf": "H1",
|
||||
"factory": lambda: S8_Order_Block()},
|
||||
{"name": "S8_GBP_USD", "pair": "GBP_USD", "tf": "M15", "htf_tf": "H1",
|
||||
"factory": lambda: S8_Order_Block()},
|
||||
|
||||
# S10: VWAP Mean Reversion (target pairs from strategy doc)
|
||||
{"name": "S10_EUR_USD", "pair": "EUR_USD", "tf": "M15", "htf_tf": "H1",
|
||||
"factory": lambda: S10_VWAP_MeanReversion()},
|
||||
{"name": "S10_USD_JPY", "pair": "USD_JPY", "tf": "M15", "htf_tf": "H1",
|
||||
"factory": lambda: S10_VWAP_MeanReversion()},
|
||||
{"name": "S10_EUR_GBP", "pair": "EUR_GBP", "tf": "M15", "htf_tf": "H1",
|
||||
"factory": lambda: S10_VWAP_MeanReversion()},
|
||||
|
||||
# S11: ADX Trend Pullback (target pairs from strategy doc)
|
||||
{"name": "S11_USD_JPY", "pair": "USD_JPY", "tf": "M15", "htf_tf": "H1",
|
||||
"factory": lambda: S11_ADX_TrendPullback()},
|
||||
{"name": "S11_GBP_USD", "pair": "GBP_USD", "tf": "M15", "htf_tf": "H1",
|
||||
"factory": lambda: S11_ADX_TrendPullback()},
|
||||
{"name": "S11_GBP_JPY", "pair": "GBP_JPY", "tf": "M15", "htf_tf": "H1",
|
||||
"factory": lambda: S11_ADX_TrendPullback()},
|
||||
]
|
||||
|
||||
|
||||
def load_data(pair, tf):
|
||||
"""Load price data with indicators."""
|
||||
fp = os.path.join(PROCESSED_DIR, f"{pair}_{tf}.csv")
|
||||
if not os.path.exists(fp):
|
||||
print(f" WARNING: {fp} not found")
|
||||
return None
|
||||
df = pd.read_csv(fp, index_col=0, parse_dates=True)
|
||||
df.index.name = "timestamp"
|
||||
return compute_all_indicators(df)
|
||||
|
||||
|
||||
def slice_period(df, start, end, warmup_days=WARMUP_DAYS):
|
||||
"""Slice dataframe to a date range, with warmup prepended."""
|
||||
if df.index.tz is not None:
|
||||
start_ts = pd.Timestamp(start, tz=df.index.tz)
|
||||
end_ts = pd.Timestamp(f"{end} 23:59:59", tz=df.index.tz)
|
||||
else:
|
||||
start_ts = pd.Timestamp(start)
|
||||
end_ts = pd.Timestamp(f"{end} 23:59:59")
|
||||
|
||||
warmup_start = start_ts - pd.DateOffset(days=warmup_days)
|
||||
sliced = df[(df.index >= warmup_start) & (df.index <= end_ts)].copy()
|
||||
return sliced, start_ts
|
||||
|
||||
|
||||
def run_backtest_period(cfg, data, htf_data, start, end):
|
||||
"""Run backtester on a period, return filtered trade log."""
|
||||
sliced, start_ts = slice_period(data, start, end)
|
||||
if len(sliced) < 250:
|
||||
print(f" Insufficient data ({len(sliced)} bars)")
|
||||
return pd.DataFrame()
|
||||
|
||||
htf_sliced = slice_period(htf_data, start, end)[0] if htf_data is not None else None
|
||||
|
||||
strategy = cfg["factory"]()
|
||||
bt = Backtester(data=sliced, strategy=strategy, pair=cfg["pair"],
|
||||
starting_equity=100_000.0, htf_data=htf_sliced)
|
||||
bt.run()
|
||||
trade_log = bt.get_trade_log_df()
|
||||
|
||||
# Filter trades to exclude warmup period
|
||||
if not trade_log.empty:
|
||||
ts = pd.to_datetime(trade_log["timestamp"])
|
||||
filter_ts = pd.Timestamp(start_ts)
|
||||
if ts.dt.tz is not None and filter_ts.tz is None:
|
||||
filter_ts = filter_ts.tz_localize(ts.dt.tz)
|
||||
elif ts.dt.tz is None and filter_ts.tz is not None:
|
||||
filter_ts = filter_ts.tz_localize(None)
|
||||
trade_log = trade_log[ts >= filter_ts]
|
||||
|
||||
return trade_log
|
||||
|
||||
|
||||
def compute_metrics(trade_log):
|
||||
"""Compute metrics from a trade log DataFrame."""
|
||||
if trade_log.empty or len(trade_log) == 0:
|
||||
return {
|
||||
"trades": 0, "wr": 0, "pf": 0, "sharpe": 0,
|
||||
"pnl_pips": 0, "max_dd_pips": 0, "expectancy": 0,
|
||||
}
|
||||
|
||||
n = len(trade_log)
|
||||
wins = trade_log[trade_log["win"] == True]
|
||||
losses = trade_log[trade_log["win"] == False]
|
||||
|
||||
wr = len(wins) / n * 100 if n > 0 else 0
|
||||
gross_profit = wins["pnl_pips"].sum() if len(wins) > 0 else 0
|
||||
gross_loss = abs(losses["pnl_pips"].sum()) if len(losses) > 0 else 0
|
||||
pf = gross_profit / gross_loss if gross_loss > 0 else float("inf")
|
||||
total_pnl = trade_log["pnl_pips"].sum()
|
||||
expectancy = total_pnl / n if n > 0 else 0
|
||||
|
||||
if n > 1:
|
||||
pnl_series = trade_log["pnl_pips"]
|
||||
sharpe = (pnl_series.mean() / pnl_series.std()) * np.sqrt(252) \
|
||||
if pnl_series.std() > 0 else 0
|
||||
else:
|
||||
sharpe = 0
|
||||
|
||||
cum_pnl = trade_log["pnl_pips"].cumsum()
|
||||
peak = cum_pnl.cummax()
|
||||
dd = cum_pnl - peak
|
||||
max_dd = dd.min() if len(dd) > 0 else 0
|
||||
|
||||
return {
|
||||
"trades": n,
|
||||
"wr": round(wr, 1),
|
||||
"pf": round(pf, 2),
|
||||
"sharpe": round(sharpe, 2),
|
||||
"pnl_pips": round(total_pnl, 1),
|
||||
"max_dd_pips": round(max_dd, 1),
|
||||
"expectancy": round(expectancy, 2),
|
||||
}
|
||||
|
||||
|
||||
def compute_generalization_scores(is_metrics, oos_metrics):
|
||||
"""Compute OOS/IS ratio per metric + composite generalization score."""
|
||||
if is_metrics["trades"] == 0 or oos_metrics["trades"] == 0:
|
||||
return {"composite": 0, "detail": {}, "verdict": "FAIL"}
|
||||
|
||||
ratios = {}
|
||||
if is_metrics["wr"] > 0:
|
||||
ratios["wr"] = oos_metrics["wr"] / is_metrics["wr"]
|
||||
else:
|
||||
ratios["wr"] = 0
|
||||
|
||||
if is_metrics["pf"] > 0 and is_metrics["pf"] != float("inf"):
|
||||
if oos_metrics["pf"] == float("inf"):
|
||||
ratios["pf"] = 2.0
|
||||
else:
|
||||
ratios["pf"] = oos_metrics["pf"] / is_metrics["pf"]
|
||||
else:
|
||||
ratios["pf"] = 0
|
||||
|
||||
if is_metrics["expectancy"] > 0:
|
||||
ratios["expectancy"] = oos_metrics["expectancy"] / is_metrics["expectancy"]
|
||||
elif is_metrics["expectancy"] < 0 and oos_metrics["expectancy"] < 0:
|
||||
ratios["expectancy"] = 0
|
||||
else:
|
||||
ratios["expectancy"] = 0
|
||||
|
||||
if is_metrics["sharpe"] > 0:
|
||||
ratios["sharpe"] = oos_metrics["sharpe"] / is_metrics["sharpe"]
|
||||
else:
|
||||
ratios["sharpe"] = 0
|
||||
|
||||
for k in ratios:
|
||||
ratios[k] = min(ratios[k], 2.0)
|
||||
ratios[k] = max(ratios[k], 0.0)
|
||||
|
||||
composite = np.mean(list(ratios.values())) if ratios else 0
|
||||
|
||||
if composite >= 0.80:
|
||||
verdict = "PASS"
|
||||
elif composite >= 0.50:
|
||||
verdict = "WARN"
|
||||
else:
|
||||
verdict = "FAIL"
|
||||
|
||||
return {
|
||||
"composite": round(composite, 3),
|
||||
"detail": {k: round(v, 3) for k, v in ratios.items()},
|
||||
"verdict": verdict,
|
||||
}
|
||||
|
||||
|
||||
def main():
|
||||
t0 = time.time()
|
||||
all_results = {}
|
||||
|
||||
print(f"{'='*100}")
|
||||
print("TEST ALL UNTESTED STRATEGIES (IS/OOS Split)")
|
||||
print(f" IS period: {IS_START} to {IS_END}")
|
||||
print(f" OOS period: {OOS_START} to {OOS_END}")
|
||||
print(f" Configs: {len(CONFIGS)} strategy-pair combos")
|
||||
print(f"{'='*100}")
|
||||
|
||||
# Data cache to avoid reloading
|
||||
data_cache = {}
|
||||
|
||||
header = (f"{'Strategy':<16} {'Period':<5} {'Trades':>6} {'WR%':>6} "
|
||||
f"{'PF':>6} {'Sharpe':>7} {'Exp':>7} {'PnL':>9} {'DD':>8} {'Gen':>6}")
|
||||
separator = "-" * 105
|
||||
|
||||
print(f"\n{header}")
|
||||
print(separator)
|
||||
|
||||
for cfg in CONFIGS:
|
||||
name = cfg["name"]
|
||||
pair = cfg["pair"]
|
||||
tf = cfg["tf"]
|
||||
htf_tf = cfg["htf_tf"]
|
||||
|
||||
print(f"\n Loading {name} / {pair} ({tf} + {htf_tf})...")
|
||||
|
||||
# Load primary data (cached)
|
||||
cache_key = f"{pair}_{tf}"
|
||||
if cache_key not in data_cache:
|
||||
data_cache[cache_key] = load_data(pair, tf)
|
||||
data = data_cache[cache_key]
|
||||
if data is None:
|
||||
continue
|
||||
|
||||
# Load HTF data (cached)
|
||||
htf_cache_key = f"{pair}_{htf_tf}"
|
||||
if htf_cache_key not in data_cache:
|
||||
data_cache[htf_cache_key] = load_data(pair, htf_tf)
|
||||
htf_data = data_cache[htf_cache_key]
|
||||
if htf_data is None:
|
||||
continue
|
||||
|
||||
# Run IS
|
||||
is_log = run_backtest_period(cfg, data, htf_data, IS_START, IS_END)
|
||||
is_metrics = compute_metrics(is_log)
|
||||
|
||||
# Run OOS
|
||||
oos_log = run_backtest_period(cfg, data, htf_data, OOS_START, OOS_END)
|
||||
oos_metrics = compute_metrics(oos_log)
|
||||
|
||||
# Generalization score
|
||||
gen = compute_generalization_scores(is_metrics, oos_metrics)
|
||||
|
||||
# Print rows
|
||||
print(f" {name:<16} {'IS':<5} {is_metrics['trades']:>6} "
|
||||
f"{is_metrics['wr']:>5.1f}% {is_metrics['pf']:>6.2f} "
|
||||
f"{is_metrics['sharpe']:>7.2f} {is_metrics['expectancy']:>+7.2f} "
|
||||
f"{is_metrics['pnl_pips']:>+9.1f} {is_metrics['max_dd_pips']:>+8.1f}")
|
||||
print(f" {'':<16} {'OOS':<5} {oos_metrics['trades']:>6} "
|
||||
f"{oos_metrics['wr']:>5.1f}% {oos_metrics['pf']:>6.2f} "
|
||||
f"{oos_metrics['sharpe']:>7.2f} {oos_metrics['expectancy']:>+7.2f} "
|
||||
f"{oos_metrics['pnl_pips']:>+9.1f} {oos_metrics['max_dd_pips']:>+8.1f} "
|
||||
f"{gen['composite']:>5.2f} {gen['verdict']}")
|
||||
|
||||
# Store results
|
||||
all_results[name] = {
|
||||
"pair": pair, "timeframe": tf,
|
||||
"is_metrics": is_metrics, "oos_metrics": oos_metrics,
|
||||
"generalization": gen,
|
||||
}
|
||||
|
||||
# Summary table
|
||||
print(f"\n{'='*105}")
|
||||
print("SUMMARY — SORTED BY OOS PROFIT FACTOR")
|
||||
print(f"{'='*105}")
|
||||
print(f" {'Strategy':<16} {'Pair':<10} {'IS Trades':>9} {'IS PF':>6} "
|
||||
f"{'OOS Trades':>10} {'OOS PF':>7} {'OOS WR%':>8} "
|
||||
f"{'Gen':>6} {'Verdict':>8}")
|
||||
print(f" {'-'*98}")
|
||||
|
||||
# Sort by OOS PF descending
|
||||
sorted_results = sorted(all_results.items(),
|
||||
key=lambda x: x[1]["oos_metrics"]["pf"],
|
||||
reverse=True)
|
||||
|
||||
for name, res in sorted_results:
|
||||
is_m = res["is_metrics"]
|
||||
oos_m = res["oos_metrics"]
|
||||
gen = res["generalization"]
|
||||
pf_str = f"{oos_m['pf']:.2f}" if oos_m['pf'] != float('inf') else "inf"
|
||||
print(f" {name:<16} {res['pair']:<10} {is_m['trades']:>9} {is_m['pf']:>6.2f} "
|
||||
f"{oos_m['trades']:>10} {pf_str:>7} {oos_m['wr']:>7.1f}% "
|
||||
f"{gen['composite']:>5.2f} {gen['verdict']:>8}")
|
||||
|
||||
# Highlight promising strategies (OOS PF > 1.0 and Gen >= 0.50)
|
||||
print(f"\n{'='*105}")
|
||||
print("PROMISING STRATEGIES (OOS PF > 1.0 AND Gen >= 0.50)")
|
||||
print(f"{'='*105}")
|
||||
promising = [(n, r) for n, r in sorted_results
|
||||
if r["oos_metrics"]["pf"] > 1.0
|
||||
and r["oos_metrics"]["trades"] >= 5
|
||||
and r["generalization"]["composite"] >= 0.50]
|
||||
if promising:
|
||||
for name, res in promising:
|
||||
is_m = res["is_metrics"]
|
||||
oos_m = res["oos_metrics"]
|
||||
gen = res["generalization"]
|
||||
print(f" {name:<16} IS: {is_m['trades']}t PF={is_m['pf']:.2f} WR={is_m['wr']:.1f}% "
|
||||
f"OOS: {oos_m['trades']}t PF={oos_m['pf']:.2f} WR={oos_m['wr']:.1f}% "
|
||||
f"Gen={gen['composite']:.3f} {gen['verdict']}")
|
||||
else:
|
||||
print(" None found.")
|
||||
|
||||
# Save JSON report
|
||||
out_path = os.path.join(RESULTS_DIR, "test_all_strategies.json")
|
||||
|
||||
def json_default(obj):
|
||||
if isinstance(obj, (np.integer,)):
|
||||
return int(obj)
|
||||
if isinstance(obj, (np.floating,)):
|
||||
return float(obj)
|
||||
if isinstance(obj, (np.bool_,)):
|
||||
return bool(obj)
|
||||
return str(obj)
|
||||
|
||||
with open(out_path, "w") as f:
|
||||
json.dump(all_results, f, indent=2, default=json_default)
|
||||
print(f"\nResults saved: {out_path}")
|
||||
|
||||
elapsed = time.time() - t0
|
||||
print(f"Total runtime: {elapsed:.1f}s")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user