diff --git a/fieldtests/milestone-verb-dissolution/mvd_1_blueprint_sweep_stdout.txt b/fieldtests/milestone-verb-dissolution/mvd_1_blueprint_sweep_stdout.txt new file mode 100644 index 0000000..d6390ed --- /dev/null +++ b/fieldtests/milestone-verb-dissolution/mvd_1_blueprint_sweep_stdout.txt @@ -0,0 +1,4 @@ +{"family_id":"c9051499-0-GER40-w0-r0-s0-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["graph.fast.length",{"I64":3}],["graph.slow.length",{"I64":12}],["graph.bias.scale",{"F64":0.5}],["stop_length",{"I64":3}],["stop_k",{"F64":2.0}]],"window":[1735776899999000000,1751313479999000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","instrument":"GER40","topology_hash":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a"},"metrics":{"total_pips":-2862699.999994523,"max_drawdown":54231416.66667029,"bias_sign_flips":15891,"r":{"expectancy_r":-0.003094165573522419,"n_trades":17257,"win_rate":0.3358057599814568,"avg_win_r":1.7935292472072515,"avg_loss_r":-0.911437620211857,"profit_factor":0.9948888162507548,"max_r_drawdown":566.4995211761315,"n_open_at_end":1,"sqn":-0.1783787608960865,"sqn_normalized":-0.013578771907835513,"net_expectancy_r":-0.003094165573522419,"conviction_terciles_r":[-0.014644128985305857,0.031101557818235325,-0.02573598921419908]}}}} +{"family_id":"c9051499-0-GER40-w0-r0-s0-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["graph.fast.length",{"I64":3}],["graph.slow.length",{"I64":20}],["graph.bias.scale",{"F64":0.5}],["stop_length",{"I64":3}],["stop_k",{"F64":2.0}]],"window":[1735776899999000000,1751313479999000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","instrument":"GER40","topology_hash":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a"},"metrics":{"total_pips":35241319.999987476,"max_drawdown":31772746.666658945,"bias_sign_flips":11235,"r":{"expectancy_r":0.03257206096854835,"n_trades":12715,"win_rate":0.3163979551710578,"avg_win_r":2.1158491102262986,"avg_loss_r":-0.9316506230125727,"profit_factor":1.0511433070554879,"max_r_drawdown":266.5859374316973,"n_open_at_end":1,"sqn":1.4521422112547406,"sqn_normalized":0.12878075519133622,"net_expectancy_r":0.03257206096854835,"conviction_terciles_r":[0.04920222689976142,0.06716125374424935,-0.018635214851196506]}}}} +{"family_id":"c9051499-0-GER40-w0-r0-s0-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["graph.fast.length",{"I64":5}],["graph.slow.length",{"I64":12}],["graph.bias.scale",{"F64":0.5}],["stop_length",{"I64":3}],["stop_k",{"F64":2.0}]],"window":[1735776899999000000,1751313479999000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","instrument":"GER40","topology_hash":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a"},"metrics":{"total_pips":20785143.333291434,"max_drawdown":30654553.33336261,"bias_sign_flips":13848,"r":{"expectancy_r":0.019526291202329023,"n_trades":17215,"win_rate":0.35817600929422017,"avg_win_r":1.777196624871446,"avg_loss_r":-0.961358429351912,"profit_factor":1.03164597470791,"max_r_drawdown":373.7780277379172,"n_open_at_end":1,"sqn":1.0889084897621863,"sqn_normalized":0.08299231333366146,"net_expectancy_r":0.019526291202329023,"conviction_terciles_r":[0.004667062062864069,0.03749828968851462,0.01641406424441263]}}}} +{"family_id":"c9051499-0-GER40-w0-r0-s0-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["graph.fast.length",{"I64":5}],["graph.slow.length",{"I64":20}],["graph.bias.scale",{"F64":0.5}],["stop_length",{"I64":3}],["stop_k",{"F64":2.0}]],"window":[1735776899999000000,1751313479999000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","instrument":"GER40","topology_hash":"597d719b7ac607158cda3e68cd497387620397a5e93087e23da512876dafba9a"},"metrics":{"total_pips":18233000.000000946,"max_drawdown":31101689.99998994,"bias_sign_flips":9458,"r":{"expectancy_r":0.039703430408155306,"n_trades":12266,"win_rate":0.3287135170389695,"avg_win_r":2.163314792457502,"avg_loss_r":-1.0001801027206976,"profit_factor":1.0591346347759685,"max_r_drawdown":224.30257453649057,"n_open_at_end":1,"sqn":1.6764291413616224,"sqn_normalized":0.15136787755392725,"net_expectancy_r":0.039703430408155306,"conviction_terciles_r":[0.019293894904215347,0.09570496525941728,0.004106439733979929]}}}} diff --git a/fieldtests/milestone-verb-dissolution/mvd_1_generalize_stdout.txt b/fieldtests/milestone-verb-dissolution/mvd_1_generalize_stdout.txt new file mode 100644 index 0000000..9abf20a --- /dev/null +++ b/fieldtests/milestone-verb-dissolution/mvd_1_generalize_stdout.txt @@ -0,0 +1,2 @@ +{"generalize":{"metric":"expectancy_r","n_instruments":2,"per_instrument":[["GER40",0.020714763278940063],["USDJPY",-0.02015289368686083]],"sign_agreement":1,"worst_case":-0.02015289368686083}} +{"family_id":"generalize-0"} diff --git a/fieldtests/milestone-verb-dissolution/mvd_1_mc_stdout.txt b/fieldtests/milestone-verb-dissolution/mvd_1_mc_stdout.txt new file mode 100644 index 0000000..00f2d31 --- /dev/null +++ b/fieldtests/milestone-verb-dissolution/mvd_1_mc_stdout.txt @@ -0,0 +1 @@ +{"mc_r_bootstrap":{"block_len":5,"e_r":{"mean":-0.0244452745179496,"p25":-0.049478856865015644,"p5":-0.08954647176285867,"p50":-0.02478708119746579,"p75":0.0025705255279945957,"p95":0.04095084752967499},"n_resamples":1000,"n_trades":4188,"prob_le_zero":0.725}} diff --git a/fieldtests/milestone-verb-dissolution/mvd_1_sweep_stdout.txt b/fieldtests/milestone-verb-dissolution/mvd_1_sweep_stdout.txt new file mode 100644 index 0000000..e9f2014 --- /dev/null +++ b/fieldtests/milestone-verb-dissolution/mvd_1_sweep_stdout.txt @@ -0,0 +1,4 @@ +{"family_id":"sweep-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["fast.length",{"I64":3}],["slow.length",{"I64":12}],["stop_length",{"I64":3}],["stop_k",{"F64":2.0}],["bias_scale",{"F64":0.5}]],"window":[1735776899999000000,1740775980000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)"},"metrics":{"total_pips":14651566.666678049,"max_drawdown":18136499.999995403,"bias_sign_flips":5517,"r":{"expectancy_r":0.018859228268604623,"n_trades":5933,"win_rate":0.3313669307264453,"avg_win_r":1.8426756303388427,"avg_loss_r":-0.8850034000323995,"profit_factor":1.0318706650340974,"max_r_drawdown":225.25426571034052,"n_open_at_end":1,"sqn":0.6974423376927421,"sqn_normalized":0.09054638856123323,"net_expectancy_r":0.018859228268604623,"conviction_terciles_r":[0.0387351724780272,-0.06440452791147729,0.082257088744931]}}}} +{"family_id":"sweep-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["fast.length",{"I64":3}],["slow.length",{"I64":20}],["stop_length",{"I64":3}],["stop_k",{"F64":2.0}],["bias_scale",{"F64":0.5}]],"window":[1735776899999000000,1740775980000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)"},"metrics":{"total_pips":19555223.33332326,"max_drawdown":12253393.333338382,"bias_sign_flips":3883,"r":{"expectancy_r":0.024628978003358875,"n_trades":4329,"win_rate":0.30723030723030725,"avg_win_r":2.1545138422487486,"avg_loss_r":-0.9199348330824573,"profit_factor":1.038645634961237,"max_r_drawdown":251.9859393421582,"n_open_at_end":1,"sqn":0.6914750359042567,"sqn_normalized":0.1050951592554701,"net_expectancy_r":0.024628978003358875,"conviction_terciles_r":[0.006462585142108019,0.024349095590771613,0.04307525327719716]}}}} +{"family_id":"sweep-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["fast.length",{"I64":5}],["slow.length",{"I64":12}],["stop_length",{"I64":3}],["stop_k",{"F64":2.0}],["bias_scale",{"F64":0.5}]],"window":[1735776899999000000,1740775980000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)"},"metrics":{"total_pips":19312446.66667577,"max_drawdown":15871903.333339252,"bias_sign_flips":4750,"r":{"expectancy_r":0.04700233450737109,"n_trades":5894,"win_rate":0.3556158805564981,"avg_win_r":1.8525578436029042,"avg_loss_r":-0.9494285099013277,"profit_factor":1.0768267269441847,"max_r_drawdown":179.24653306247404,"n_open_at_end":1,"sqn":1.5560523190981717,"sqn_normalized":0.2026838426485038,"net_expectancy_r":0.04700233450737109,"conviction_terciles_r":[0.03190319926750814,0.0280326242500623,0.08106349596625315]}}}} +{"family_id":"sweep-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["fast.length",{"I64":5}],["slow.length",{"I64":20}],["stop_length",{"I64":3}],["stop_k",{"F64":2.0}],["bias_scale",{"F64":0.5}]],"window":[1735776899999000000,1740775980000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)"},"metrics":{"total_pips":18328560.000000566,"max_drawdown":9906540.000002608,"bias_sign_flips":3287,"r":{"expectancy_r":0.04859274367149766,"n_trades":4219,"win_rate":0.3211661531168523,"avg_win_r":2.2340448422497614,"avg_loss_r":-0.9853763881628382,"profit_factor":1.072645008931395,"max_r_drawdown":190.26165498821445,"n_open_at_end":1,"sqn":1.2371118790190263,"sqn_normalized":0.1904601905171822,"net_expectancy_r":0.04859274367149766,"conviction_terciles_r":[0.016145802052213384,0.027383921029859034,0.10221037306087778]}}}} diff --git a/fieldtests/milestone-verb-dissolution/mvd_1_walkforward_stdout.txt b/fieldtests/milestone-verb-dissolution/mvd_1_walkforward_stdout.txt new file mode 100644 index 0000000..a5208e3 --- /dev/null +++ b/fieldtests/milestone-verb-dissolution/mvd_1_walkforward_stdout.txt @@ -0,0 +1,3 @@ +{"family_id":"cdb926b9-0-GER40-w0-r0-s1-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["sma_signal.fast.length",{"I64":3}],["sma_signal.slow.length",{"I64":20}],["stop_length",{"I64":3}],["stop_k",{"F64":2.0}]],"window":[1743552899999000000,1746144899998000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","selection":{"selection_metric":"sqn_normalized","n_trials":4,"raw_winner_metric":0.23380026821855684,"mode":"Argmax","deflated_score":-0.02109631640973328,"overfit_probability":0.08691308691308691,"n_resamples":1000,"block_len":5,"seed":0},"instrument":"GER40","topology_hash":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027"},"metrics":{"total_pips":8183056.666656338,"max_drawdown":18858563.333333366,"bias_sign_flips":1719,"r":{"expectancy_r":-0.01920789380675256,"n_trades":1965,"win_rate":0.3282442748091603,"avg_win_r":1.8618888639654576,"avg_loss_r":-0.9383801731727207,"profit_factor":0.9695288007919832,"max_r_drawdown":137.77315046127524,"n_open_at_end":1,"sqn":-0.3748009115721454,"sqn_normalized":-0.08455111928160124,"net_expectancy_r":-0.01920789380675256,"conviction_terciles_r":[0.10598506453251073,-0.05626494177857611,-0.10734380417419227]}}}} +{"family_id":"cdb926b9-0-GER40-w0-r0-s1-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["sma_signal.fast.length",{"I64":3}],["sma_signal.slow.length",{"I64":20}],["stop_length",{"I64":3}],["stop_k",{"F64":2.0}]],"window":[1746144899999000000,1748736899998000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","selection":{"selection_metric":"sqn_normalized","n_trials":4,"raw_winner_metric":0.26435292869838395,"mode":"Argmax","deflated_score":0.008500161995362798,"overfit_probability":0.04095904095904096,"n_resamples":1000,"block_len":5,"seed":0},"instrument":"GER40","topology_hash":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027"},"metrics":{"total_pips":-3961950.0000006165,"max_drawdown":10036766.666671904,"bias_sign_flips":1936,"r":{"expectancy_r":-0.03037327584427613,"n_trades":2223,"win_rate":0.3076923076923077,"avg_win_r":2.0821474859350597,"avg_loss_r":-0.9692713921906461,"profit_factor":0.954736609471486,"max_r_drawdown":115.63656595781805,"n_open_at_end":1,"sqn":-0.5299548162533878,"sqn_normalized":-0.11240072488255289,"net_expectancy_r":-0.03037327584427613,"conviction_terciles_r":[-0.017453577620605926,-0.14329709342399838,0.06963084351177566]}}}} +{"walkforward":{"oos_r":{"avg_loss_r":-0.9550089196115396,"avg_win_r":1.9752499605999214,"conviction_terciles_r":[0.0,0.0,0.0],"expectancy_r":-0.025134504186269092,"max_r_drawdown":182.12945308117088,"n_open_at_end":0,"n_trades":4188,"net_expectancy_r":-0.025134504186269092,"profit_factor":0.9614472455342553,"sqn":-0.6482501288192202,"sqn_normalized":-0.10017036937879212,"win_rate":0.3173352435530086},"param_stability":[{"mean":3.0,"p25":3.0,"p5":3.0,"p50":3.0,"p75":3.0,"p95":3.0},{"mean":20.0,"p25":20.0,"p5":20.0,"p50":20.0,"p75":20.0,"p95":20.0},{"mean":3.0,"p25":3.0,"p5":3.0,"p50":3.0,"p75":3.0,"p95":3.0},{"mean":2.0,"p25":2.0,"p5":2.0,"p50":2.0,"p75":2.0,"p95":2.0}],"stitched_total_pips":4221106.666655721,"windows":2}} diff --git a/fieldtests/milestone-verb-dissolution/mvd_2_campaign_direct_stdout.txt b/fieldtests/milestone-verb-dissolution/mvd_2_campaign_direct_stdout.txt new file mode 100644 index 0000000..b235c85 --- /dev/null +++ b/fieldtests/milestone-verb-dissolution/mvd_2_campaign_direct_stdout.txt @@ -0,0 +1,3 @@ +{"family_id":"18844db5-0-GER40-w0-r0-s0-1","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["sma_signal.fast.length",{"I64":5}],["sma_signal.slow.length",{"I64":20}],["stop_length",{"I64":14}],["stop_k",{"F64":2.0}]],"window":[1735689600000000000,1751328000000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","instrument":"GER40","topology_hash":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","project":{"namespace":"mvd_lab","dylib_sha256":"5d344b782a69518e1dcdaec3dc7de1c674f0a4cc8b381b3200f22b20681107c5","commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34-dirty"}},"metrics":{"total_pips":18233000.000000946,"max_drawdown":31101689.99998994,"bias_sign_flips":9458,"r":{"expectancy_r":0.020714763278940063,"n_trades":11954,"win_rate":0.3347833361218002,"avg_win_r":1.9163637943202063,"avg_loss_r":-0.9333077998784003,"profit_factor":1.0333650637863112,"max_r_drawdown":275.50659414385825,"n_open_at_end":1,"sqn":1.0064752069572405,"sqn_normalized":0.09205480352174625,"net_expectancy_r":0.020714763278940063,"conviction_terciles_r":[0.021638082552302703,0.05122661182958574,-0.010720172846380115]}}}} +{"family_id":"18844db5-0-USDJPY-w0-r0-s0-1","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["sma_signal.fast.length",{"I64":5}],["sma_signal.slow.length",{"I64":20}],["stop_length",{"I64":14}],["stop_k",{"F64":2.0}]],"window":[1735689600000000000,1751328000000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=0.01)","instrument":"USDJPY","topology_hash":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","project":{"namespace":"mvd_lab","dylib_sha256":"5d344b782a69518e1dcdaec3dc7de1c674f0a4cc8b381b3200f22b20681107c5","commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34-dirty"}},"metrics":{"total_pips":-54188.85299999609,"max_drawdown":58066.20499999583,"bias_sign_flips":11638,"r":{"expectancy_r":-0.02015289368686083,"n_trades":14927,"win_rate":0.34353855429758157,"avg_win_r":1.7575394349373088,"avg_loss_r":-0.9504525427515395,"profit_factor":0.9677003547760925,"max_r_drawdown":397.3583054736529,"n_open_at_end":1,"sqn":-1.0814412470315609,"sqn_normalized":-0.08851495715635345,"net_expectancy_r":-0.02015289368686083,"conviction_terciles_r":[0.02290410840773472,-0.028150331805494457,-0.0552038047283186]}}}} +{"campaign_run":{"campaign":"18844db5ee31af117fa9f3ed405a11e62f8d99f9795097d22e4f8b4002c4317e","process":"87851fd8c2fd1a42fe48f921c44db6026b67d67a50d3a708783e454552f677ce","run":1,"seed":0,"cells":[{"strategy":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","instrument":"GER40","window_ms":[1735689600000,1751328000000],"stages":[{"block":"std::sweep","family_id":"18844db5-0-GER40-w0-r0-s0-1","selection":{"winner_ordinal":0,"params":[["fast.length",{"I64":5}],["slow.length",{"I64":20}]],"selection":{"selection_metric":"expectancy_r","n_trials":1,"raw_winner_metric":0.020714763278940063,"mode":"Argmax"}}}]},{"strategy":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","instrument":"USDJPY","window_ms":[1735689600000,1751328000000],"stages":[{"block":"std::sweep","family_id":"18844db5-0-USDJPY-w0-r0-s0-1","selection":{"winner_ordinal":0,"params":[["fast.length",{"I64":5}],["slow.length",{"I64":20}]],"selection":{"selection_metric":"expectancy_r","n_trials":1,"raw_winner_metric":-0.02015289368686083,"mode":"Argmax"}}}]}],"generalizations":[{"strategy_ordinal":0,"window_ordinal":0,"regime_ordinal":0,"generalization":{"selection_metric":"expectancy_r","n_instruments":2,"worst_case":-0.02015289368686083,"sign_agreement":1,"per_instrument":[["GER40",0.020714763278940063],["USDJPY",-0.02015289368686083]]},"winners":[["GER40",[["fast.length",{"I64":5}],["slow.length",{"I64":20}]]],["USDJPY",[["fast.length",{"I64":5}],["slow.length",{"I64":20}]]]]}]}} diff --git a/fieldtests/milestone-verb-dissolution/mvd_2_campaign_runs.jsonl b/fieldtests/milestone-verb-dissolution/mvd_2_campaign_runs.jsonl new file mode 100644 index 0000000..c309ecb --- /dev/null +++ b/fieldtests/milestone-verb-dissolution/mvd_2_campaign_runs.jsonl @@ -0,0 +1,3 @@ +{"campaign":"18844db5ee31af117fa9f3ed405a11e62f8d99f9795097d22e4f8b4002c4317e","process":"87851fd8c2fd1a42fe48f921c44db6026b67d67a50d3a708783e454552f677ce","run":0,"seed":0,"cells":[{"strategy":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","instrument":"GER40","window_ms":[1735689600000,1751328000000],"stages":[{"block":"std::sweep","family_id":"18844db5-0-GER40-w0-r0-s0-0","selection":{"winner_ordinal":0,"params":[["fast.length",{"I64":5}],["slow.length",{"I64":20}]],"selection":{"selection_metric":"expectancy_r","n_trials":1,"raw_winner_metric":0.020714763278940063,"mode":"Argmax"}}}]},{"strategy":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","instrument":"USDJPY","window_ms":[1735689600000,1751328000000],"stages":[{"block":"std::sweep","family_id":"18844db5-0-USDJPY-w0-r0-s0-0","selection":{"winner_ordinal":0,"params":[["fast.length",{"I64":5}],["slow.length",{"I64":20}]],"selection":{"selection_metric":"expectancy_r","n_trials":1,"raw_winner_metric":-0.02015289368686083,"mode":"Argmax"}}}]}],"generalizations":[{"strategy_ordinal":0,"window_ordinal":0,"regime_ordinal":0,"generalization":{"selection_metric":"expectancy_r","n_instruments":2,"worst_case":-0.02015289368686083,"sign_agreement":1,"per_instrument":[["GER40",0.020714763278940063],["USDJPY",-0.02015289368686083]]},"winners":[["GER40",[["fast.length",{"I64":5}],["slow.length",{"I64":20}]]],["USDJPY",[["fast.length",{"I64":5}],["slow.length",{"I64":20}]]]]}]} +{"campaign":"18844db5ee31af117fa9f3ed405a11e62f8d99f9795097d22e4f8b4002c4317e","process":"87851fd8c2fd1a42fe48f921c44db6026b67d67a50d3a708783e454552f677ce","run":1,"seed":0,"cells":[{"strategy":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","instrument":"GER40","window_ms":[1735689600000,1751328000000],"stages":[{"block":"std::sweep","family_id":"18844db5-0-GER40-w0-r0-s0-1","selection":{"winner_ordinal":0,"params":[["fast.length",{"I64":5}],["slow.length",{"I64":20}]],"selection":{"selection_metric":"expectancy_r","n_trials":1,"raw_winner_metric":0.020714763278940063,"mode":"Argmax"}}}]},{"strategy":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","instrument":"USDJPY","window_ms":[1735689600000,1751328000000],"stages":[{"block":"std::sweep","family_id":"18844db5-0-USDJPY-w0-r0-s0-1","selection":{"winner_ordinal":0,"params":[["fast.length",{"I64":5}],["slow.length",{"I64":20}]],"selection":{"selection_metric":"expectancy_r","n_trials":1,"raw_winner_metric":-0.02015289368686083,"mode":"Argmax"}}}]}],"generalizations":[{"strategy_ordinal":0,"window_ordinal":0,"regime_ordinal":0,"generalization":{"selection_metric":"expectancy_r","n_instruments":2,"worst_case":-0.02015289368686083,"sign_agreement":1,"per_instrument":[["GER40",0.020714763278940063],["USDJPY",-0.02015289368686083]]},"winners":[["GER40",[["fast.length",{"I64":5}],["slow.length",{"I64":20}]]],["USDJPY",[["fast.length",{"I64":5}],["slow.length",{"I64":20}]]]]}]} +{"campaign":"9a10a79992c81520f9fbb3e01c43651f89f1caa4ffeb8f16b7821c0e78bc808a","process":"d68e747465a7e0ccde2fc1ea425119bd2f2bc26c43a3001a71c7ee0b6ac6a901","run":0,"seed":42,"cells":[{"strategy":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","instrument":"GER40","window_ms":[1735689600000,1751328000000],"stages":[{"block":"std::sweep","family_id":"9a10a799-0-GER40-w0-r0-s0-0","selection":{"winner_ordinal":1,"params":[["fast.length",{"I64":3}],["slow.length",{"I64":20}]],"selection":{"selection_metric":"sqn_normalized","n_trials":4,"raw_winner_metric":0.10148439699175255,"mode":"Argmax","deflated_score":-0.08114854473066763,"overfit_probability":0.34665334665334663,"n_resamples":1000,"block_len":5,"seed":42}}}]},{"strategy":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","instrument":"GER40","window_ms":[1735689600000,1751328000000],"stages":[{"block":"std::sweep","family_id":"9a10a799-0-GER40-w0-r1-s0-0","selection":{"winner_ordinal":1,"params":[["fast.length",{"I64":3}],["slow.length",{"I64":20}]],"selection":{"selection_metric":"sqn_normalized","n_trials":4,"raw_winner_metric":0.08616357801435585,"mode":"Argmax","deflated_score":-0.10805573667334291,"overfit_probability":0.4775224775224775,"n_resamples":1000,"block_len":5,"seed":42}}}]},{"strategy":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","instrument":"GER40","window_ms":[1719792000000,1735689600000],"stages":[{"block":"std::sweep","family_id":"9a10a799-0-GER40-w1-r0-s0-0","selection":{"winner_ordinal":0,"params":[["fast.length",{"I64":3}],["slow.length",{"I64":12}]],"selection":{"selection_metric":"sqn_normalized","n_trials":4,"raw_winner_metric":-0.04076578974816012,"mode":"Argmax","deflated_score":-0.22196079259088028,"overfit_probability":0.993006993006993,"n_resamples":1000,"block_len":5,"seed":42}}}]},{"strategy":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","instrument":"GER40","window_ms":[1719792000000,1735689600000],"stages":[{"block":"std::sweep","family_id":"9a10a799-0-GER40-w1-r1-s0-0","selection":{"winner_ordinal":0,"params":[["fast.length",{"I64":3}],["slow.length",{"I64":12}]],"selection":{"selection_metric":"sqn_normalized","n_trials":4,"raw_winner_metric":-0.04041165246874232,"mode":"Argmax","deflated_score":-0.2402782956052792,"overfit_probability":0.986013986013986,"n_resamples":1000,"block_len":5,"seed":42}}}]},{"strategy":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","instrument":"USDJPY","window_ms":[1735689600000,1751328000000],"stages":[{"block":"std::sweep","family_id":"9a10a799-0-USDJPY-w0-r0-s0-0","selection":{"winner_ordinal":3,"params":[["fast.length",{"I64":5}],["slow.length",{"I64":20}]],"selection":{"selection_metric":"sqn_normalized","n_trials":4,"raw_winner_metric":-0.08851495715635345,"mode":"Argmax","deflated_score":-0.2397838721442369,"overfit_probability":1.0,"n_resamples":1000,"block_len":5,"seed":42}}}]},{"strategy":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","instrument":"USDJPY","window_ms":[1735689600000,1751328000000],"stages":[{"block":"std::sweep","family_id":"9a10a799-0-USDJPY-w0-r1-s0-0","selection":{"winner_ordinal":3,"params":[["fast.length",{"I64":5}],["slow.length",{"I64":20}]],"selection":{"selection_metric":"sqn_normalized","n_trials":4,"raw_winner_metric":-0.12040461736026072,"mode":"Argmax","deflated_score":-0.28156217867888617,"overfit_probability":1.0,"n_resamples":1000,"block_len":5,"seed":42}}}]},{"strategy":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","instrument":"USDJPY","window_ms":[1719792000000,1735689600000],"stages":[{"block":"std::sweep","family_id":"9a10a799-0-USDJPY-w1-r0-s0-0","selection":{"winner_ordinal":1,"params":[["fast.length",{"I64":3}],["slow.length",{"I64":20}]],"selection":{"selection_metric":"sqn_normalized","n_trials":4,"raw_winner_metric":0.08358080475399424,"mode":"Argmax","deflated_score":-0.07173920660059865,"overfit_probability":0.40559440559440557,"n_resamples":1000,"block_len":5,"seed":42}}}]},{"strategy":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","instrument":"USDJPY","window_ms":[1719792000000,1735689600000],"stages":[{"block":"std::sweep","family_id":"9a10a799-0-USDJPY-w1-r1-s0-0","selection":{"winner_ordinal":1,"params":[["fast.length",{"I64":3}],["slow.length",{"I64":20}]],"selection":{"selection_metric":"sqn_normalized","n_trials":4,"raw_winner_metric":0.07752903615301221,"mode":"Argmax","deflated_score":-0.09653911415964003,"overfit_probability":0.5074925074925075,"n_resamples":1000,"block_len":5,"seed":42}}}]}],"generalizations":[{"strategy_ordinal":0,"window_ordinal":0,"regime_ordinal":0,"generalization":{"selection_metric":"expectancy_r","n_instruments":2,"worst_case":-0.02015289368686083,"sign_agreement":1,"per_instrument":[["GER40",0.022214720124996902],["USDJPY",-0.02015289368686083]]},"winners":[["GER40",[["fast.length",{"I64":3}],["slow.length",{"I64":20}]]],["USDJPY",[["fast.length",{"I64":5}],["slow.length",{"I64":20}]]]]},{"strategy_ordinal":0,"window_ordinal":0,"regime_ordinal":1,"generalization":{"selection_metric":"expectancy_r","n_instruments":2,"worst_case":-0.019030434830470302,"sign_agreement":1,"per_instrument":[["GER40",0.013069073372316402],["USDJPY",-0.019030434830470302]]},"winners":[["GER40",[["fast.length",{"I64":3}],["slow.length",{"I64":20}]]],["USDJPY",[["fast.length",{"I64":5}],["slow.length",{"I64":20}]]]]},{"strategy_ordinal":0,"window_ordinal":1,"regime_ordinal":0,"generalization":{"selection_metric":"expectancy_r","n_instruments":2,"worst_case":-0.006927220530948696,"sign_agreement":1,"per_instrument":[["GER40",-0.006927220530948696],["USDJPY",0.022075569990904518]]},"winners":[["GER40",[["fast.length",{"I64":3}],["slow.length",{"I64":12}]]],["USDJPY",[["fast.length",{"I64":3}],["slow.length",{"I64":20}]]]]},{"strategy_ordinal":0,"window_ordinal":1,"regime_ordinal":1,"generalization":{"selection_metric":"expectancy_r","n_instruments":2,"worst_case":-0.004675086476808556,"sign_agreement":1,"per_instrument":[["GER40",-0.004675086476808556],["USDJPY",0.013826491137629468]]},"winners":[["GER40",[["fast.length",{"I64":3}],["slow.length",{"I64":12}]]],["USDJPY",[["fast.length",{"I64":3}],["slow.length",{"I64":20}]]]]}]} diff --git a/fieldtests/milestone-verb-dissolution/mvd_2_generalize_inproject_stdout.txt b/fieldtests/milestone-verb-dissolution/mvd_2_generalize_inproject_stdout.txt new file mode 100644 index 0000000..9abf20a --- /dev/null +++ b/fieldtests/milestone-verb-dissolution/mvd_2_generalize_inproject_stdout.txt @@ -0,0 +1,2 @@ +{"generalize":{"metric":"expectancy_r","n_instruments":2,"per_instrument":[["GER40",0.020714763278940063],["USDJPY",-0.02015289368686083]],"sign_agreement":1,"worst_case":-0.02015289368686083}} +{"family_id":"generalize-0"} diff --git a/fieldtests/milestone-verb-dissolution/mvd_2_generated_campaign.json b/fieldtests/milestone-verb-dissolution/mvd_2_generated_campaign.json new file mode 100644 index 0000000..e7d56d8 --- /dev/null +++ b/fieldtests/milestone-verb-dissolution/mvd_2_generated_campaign.json @@ -0,0 +1 @@ +{"format_version":1,"kind":"campaign","name":"generalize","data":{"instruments":["GER40","USDJPY"],"windows":[{"from_ms":1735689600000,"to_ms":1751328000000}]},"risk":[{"vol":{"length":14,"k":2.0}}],"strategies":[{"ref":{"content_id":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027"},"axes":{"fast.length":{"kind":"I64","values":[5]},"slow.length":{"kind":"I64","values":[20]}}}],"process":{"ref":{"content_id":"87851fd8c2fd1a42fe48f921c44db6026b67d67a50d3a708783e454552f677ce"}},"seed":0,"presentation":{"persist_taps":[],"emit":["family_table"]}} \ No newline at end of file diff --git a/fieldtests/milestone-verb-dissolution/mvd_2_generated_process.json b/fieldtests/milestone-verb-dissolution/mvd_2_generated_process.json new file mode 100644 index 0000000..3eef5c6 --- /dev/null +++ b/fieldtests/milestone-verb-dissolution/mvd_2_generated_process.json @@ -0,0 +1 @@ +{"format_version":1,"kind":"process","name":"generalize","pipeline":[{"block":"std::sweep","metric":"expectancy_r","select":"argmax"},{"block":"std::generalize","metric":"expectancy_r"}]} \ No newline at end of file diff --git a/fieldtests/milestone-verb-dissolution/mvd_3_campaign_regime_matrix.json b/fieldtests/milestone-verb-dissolution/mvd_3_campaign_regime_matrix.json new file mode 100644 index 0000000..5ae0470 --- /dev/null +++ b/fieldtests/milestone-verb-dissolution/mvd_3_campaign_regime_matrix.json @@ -0,0 +1,28 @@ +{ + "format_version": 1, + "kind": "campaign", + "name": "mvd-regime-window-matrix", + "seed": 42, + "data": { + "instruments": ["GER40", "USDJPY"], + "windows": [ + { "from_ms": 1735689600000, "to_ms": 1751328000000 }, + { "from_ms": 1719792000000, "to_ms": 1735689600000 } + ] + }, + "risk": [ + { "vol": { "length": 14, "k": 2.0 } }, + { "vol": { "length": 20, "k": 3.0 } } + ], + "strategies": [ + { + "ref": { "content_id": "546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027" }, + "axes": { + "fast.length": { "kind": "I64", "values": [3, 5] }, + "slow.length": { "kind": "I64", "values": [12, 20] } + } + } + ], + "process": { "ref": { "content_id": "d68e747465a7e0ccde2fc1ea425119bd2f2bc26c43a3001a71c7ee0b6ac6a901" } }, + "presentation": { "persist_taps": [], "emit": ["family_table", "selection_report"] } +} diff --git a/fieldtests/milestone-verb-dissolution/mvd_3_matrix_run_stdout.txt b/fieldtests/milestone-verb-dissolution/mvd_3_matrix_run_stdout.txt new file mode 100644 index 0000000..ea87d26 --- /dev/null +++ b/fieldtests/milestone-verb-dissolution/mvd_3_matrix_run_stdout.txt @@ -0,0 +1,41 @@ +{"family_id":"9a10a799-0-GER40-w0-r0-s0-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["sma_signal.fast.length",{"I64":3}],["sma_signal.slow.length",{"I64":12}],["stop_length",{"I64":14}],["stop_k",{"F64":2.0}]],"window":[1735689600000000000,1751328000000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","instrument":"GER40","topology_hash":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","project":{"namespace":"mvd_lab","dylib_sha256":"5d344b782a69518e1dcdaec3dc7de1c674f0a4cc8b381b3200f22b20681107c5","commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34-dirty"}},"metrics":{"total_pips":-2862699.999994523,"max_drawdown":54231416.66667029,"bias_sign_flips":15891,"r":{"expectancy_r":-0.0042955323667449915,"n_trades":17005,"win_rate":0.33807703616583357,"avg_win_r":1.611086737773969,"avg_loss_r":-0.8293517398151209,"profit_factor":0.9921752442922958,"max_r_drawdown":538.6213293612095,"n_open_at_end":1,"sqn":-0.29455247961417624,"sqn_normalized":-0.02258782242984215,"net_expectancy_r":-0.0042955323667449915,"conviction_terciles_r":[-0.019465865348083044,0.03193386043353896,-0.025350877410630093]}}}} +{"family_id":"9a10a799-0-GER40-w0-r0-s0-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["sma_signal.fast.length",{"I64":3}],["sma_signal.slow.length",{"I64":20}],["stop_length",{"I64":14}],["stop_k",{"F64":2.0}]],"window":[1735689600000000000,1751328000000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","instrument":"GER40","topology_hash":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","project":{"namespace":"mvd_lab","dylib_sha256":"5d344b782a69518e1dcdaec3dc7de1c674f0a4cc8b381b3200f22b20681107c5","commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34-dirty"}},"metrics":{"total_pips":35241319.999987476,"max_drawdown":31772746.666658945,"bias_sign_flips":11235,"r":{"expectancy_r":0.022214720124996902,"n_trades":12657,"win_rate":0.3152405783360986,"avg_win_r":1.9547936614731534,"avg_loss_r":-0.867480673434384,"profit_factor":1.037397538822423,"max_r_drawdown":299.20611306207655,"n_open_at_end":1,"sqn":1.1417332937884042,"sqn_normalized":0.10148439699175255,"net_expectancy_r":0.022214720124996902,"conviction_terciles_r":[0.038011496712793184,0.06384376183637909,-0.03521109817418249]}}}} +{"family_id":"9a10a799-0-GER40-w0-r0-s0-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["sma_signal.fast.length",{"I64":5}],["sma_signal.slow.length",{"I64":12}],["stop_length",{"I64":14}],["stop_k",{"F64":2.0}]],"window":[1735689600000000000,1751328000000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","instrument":"GER40","topology_hash":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","project":{"namespace":"mvd_lab","dylib_sha256":"5d344b782a69518e1dcdaec3dc7de1c674f0a4cc8b381b3200f22b20681107c5","commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34-dirty"}},"metrics":{"total_pips":20785143.333291434,"max_drawdown":30654553.33336261,"bias_sign_flips":13848,"r":{"expectancy_r":0.005965095152861892,"n_trades":16637,"win_rate":0.36460900402716834,"avg_win_r":1.5385911779117916,"avg_loss_r":-0.8735079743784642,"profit_factor":1.0107475492882845,"max_r_drawdown":366.52386865224867,"n_open_at_end":1,"sqn":0.3964135192051271,"sqn_normalized":0.030733424092118346,"net_expectancy_r":0.005965095152861892,"conviction_terciles_r":[-0.018703132170736842,0.02131673086464827,0.015277238833314253]}}}} +{"family_id":"9a10a799-0-GER40-w0-r0-s0-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["sma_signal.fast.length",{"I64":5}],["sma_signal.slow.length",{"I64":20}],["stop_length",{"I64":14}],["stop_k",{"F64":2.0}]],"window":[1735689600000000000,1751328000000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","instrument":"GER40","topology_hash":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","project":{"namespace":"mvd_lab","dylib_sha256":"5d344b782a69518e1dcdaec3dc7de1c674f0a4cc8b381b3200f22b20681107c5","commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34-dirty"}},"metrics":{"total_pips":18233000.000000946,"max_drawdown":31101689.99998994,"bias_sign_flips":9458,"r":{"expectancy_r":0.020714763278940063,"n_trades":11954,"win_rate":0.3347833361218002,"avg_win_r":1.9163637943202063,"avg_loss_r":-0.9333077998784003,"profit_factor":1.0333650637863112,"max_r_drawdown":275.50659414385825,"n_open_at_end":1,"sqn":1.0064752069572405,"sqn_normalized":0.09205480352174625,"net_expectancy_r":0.020714763278940063,"conviction_terciles_r":[0.021638082552302703,0.05122661182958574,-0.010720172846380115]}}}} +{"selection_report":{"family_id":"9a10a799-0-GER40-w0-r0-s0-0","stage":0,"block":"std::sweep","winner_ordinal":1,"params":[["fast.length",{"I64":3}],["slow.length",{"I64":20}]],"selection":{"selection_metric":"sqn_normalized","n_trials":4,"raw_winner_metric":0.10148439699175255,"mode":"Argmax","deflated_score":-0.08114854473066763,"overfit_probability":0.34665334665334663,"n_resamples":1000,"block_len":5,"seed":42}}} +{"family_id":"9a10a799-0-GER40-w0-r1-s0-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["sma_signal.fast.length",{"I64":3}],["sma_signal.slow.length",{"I64":12}],["stop_length",{"I64":20}],["stop_k",{"F64":3.0}]],"window":[1735689600000000000,1751328000000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","instrument":"GER40","topology_hash":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","project":{"namespace":"mvd_lab","dylib_sha256":"5d344b782a69518e1dcdaec3dc7de1c674f0a4cc8b381b3200f22b20681107c5","commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34-dirty"}},"metrics":{"total_pips":-2862699.999994523,"max_drawdown":54231416.66667029,"bias_sign_flips":15891,"r":{"expectancy_r":-0.00338734165765293,"n_trades":15786,"win_rate":0.33409350057012543,"avg_win_r":1.1255968500523315,"avg_loss_r":-0.5698126296217374,"profit_factor":0.9910728326039027,"max_r_drawdown":353.30919382999036,"n_open_at_end":1,"sqn":-0.3306823327552413,"sqn_normalized":-0.026319336907043356,"net_expectancy_r":-0.00338734165765293,"conviction_terciles_r":[-0.01560282933524134,0.025700402951550613,-0.020259598589268266]}}}} +{"family_id":"9a10a799-0-GER40-w0-r1-s0-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["sma_signal.fast.length",{"I64":3}],["sma_signal.slow.length",{"I64":20}],["stop_length",{"I64":20}],["stop_k",{"F64":3.0}]],"window":[1735689600000000000,1751328000000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","instrument":"GER40","topology_hash":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","project":{"namespace":"mvd_lab","dylib_sha256":"5d344b782a69518e1dcdaec3dc7de1c674f0a4cc8b381b3200f22b20681107c5","commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34-dirty"}},"metrics":{"total_pips":35241319.999987476,"max_drawdown":31772746.666658945,"bias_sign_flips":11235,"r":{"expectancy_r":0.013069073372316402,"n_trades":11439,"win_rate":0.3120902176763703,"avg_win_r":1.4003403617441517,"avg_loss_r":-0.616306768473845,"profit_factor":1.0308259431794644,"max_r_drawdown":206.29844865909178,"n_open_at_end":1,"sqn":0.9215475632541353,"sqn_normalized":0.08616357801435585,"net_expectancy_r":0.013069073372316402,"conviction_terciles_r":[0.022608605790387662,0.047500072806651576,-0.030901458480089787]}}}} +{"family_id":"9a10a799-0-GER40-w0-r1-s0-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["sma_signal.fast.length",{"I64":5}],["sma_signal.slow.length",{"I64":12}],["stop_length",{"I64":20}],["stop_k",{"F64":3.0}]],"window":[1735689600000000000,1751328000000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","instrument":"GER40","topology_hash":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","project":{"namespace":"mvd_lab","dylib_sha256":"5d344b782a69518e1dcdaec3dc7de1c674f0a4cc8b381b3200f22b20681107c5","commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34-dirty"}},"metrics":{"total_pips":20785143.333291434,"max_drawdown":30654553.33336261,"bias_sign_flips":13848,"r":{"expectancy_r":0.003402312067358068,"n_trades":14669,"win_rate":0.3647828754516327,"avg_win_r":1.0917308099689236,"avg_loss_r":-0.6215865044459845,"profit_factor":1.008616886474665,"max_r_drawdown":244.97812820175523,"n_open_at_end":1,"sqn":0.30689515067344797,"sqn_normalized":0.025339017520327863,"net_expectancy_r":0.003402312067358068,"conviction_terciles_r":[-0.014146541150578488,0.024942675335000615,-0.0005927867048873787]}}}} +{"family_id":"9a10a799-0-GER40-w0-r1-s0-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["sma_signal.fast.length",{"I64":5}],["sma_signal.slow.length",{"I64":20}],["stop_length",{"I64":20}],["stop_k",{"F64":3.0}]],"window":[1735689600000000000,1751328000000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","instrument":"GER40","topology_hash":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","project":{"namespace":"mvd_lab","dylib_sha256":"5d344b782a69518e1dcdaec3dc7de1c674f0a4cc8b381b3200f22b20681107c5","commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34-dirty"}},"metrics":{"total_pips":18233000.000000946,"max_drawdown":31101689.99998994,"bias_sign_flips":9458,"r":{"expectancy_r":0.01293662075237729,"n_trades":10244,"win_rate":0.3415657946114799,"avg_win_r":1.3772545049068394,"avg_loss_r":-0.6948096026214517,"profit_factor":1.028277606742484,"max_r_drawdown":195.62491027693872,"n_open_at_end":1,"sqn":0.8201213591182418,"sqn_normalized":0.0810295333571846,"net_expectancy_r":0.01293662075237729,"conviction_terciles_r":[0.00657844454588382,0.0390921152004837,-0.006862559327070657]}}}} +{"selection_report":{"family_id":"9a10a799-0-GER40-w0-r1-s0-0","stage":0,"block":"std::sweep","winner_ordinal":1,"params":[["fast.length",{"I64":3}],["slow.length",{"I64":20}]],"selection":{"selection_metric":"sqn_normalized","n_trials":4,"raw_winner_metric":0.08616357801435585,"mode":"Argmax","deflated_score":-0.10805573667334291,"overfit_probability":0.4775224775224775,"n_resamples":1000,"block_len":5,"seed":42}}} +{"family_id":"9a10a799-0-GER40-w1-r0-s0-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["sma_signal.fast.length",{"I64":3}],["sma_signal.slow.length",{"I64":12}],["stop_length",{"I64":14}],["stop_k",{"F64":2.0}]],"window":[1719792000000000000,1735689600000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","instrument":"GER40","topology_hash":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","project":{"namespace":"mvd_lab","dylib_sha256":"5d344b782a69518e1dcdaec3dc7de1c674f0a4cc8b381b3200f22b20681107c5","commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34-dirty"}},"metrics":{"total_pips":-21020366.666673057,"max_drawdown":29789033.333325572,"bias_sign_flips":16074,"r":{"expectancy_r":-0.006927220530948696,"n_trades":17039,"win_rate":0.3318856740419039,"avg_win_r":1.5509149164259284,"avg_loss_r":-0.7807850283745141,"profit_factor":0.9867206519901212,"max_r_drawdown":339.1024402398201,"n_open_at_end":1,"sqn":-0.5321302055830714,"sqn_normalized":-0.04076578974816012,"net_expectancy_r":-0.006927220530948696,"conviction_terciles_r":[-0.004585231182406188,-0.04624509758948296,0.030049079501111162]}}}} +{"family_id":"9a10a799-0-GER40-w1-r0-s0-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["sma_signal.fast.length",{"I64":3}],["sma_signal.slow.length",{"I64":20}],["stop_length",{"I64":14}],["stop_k",{"F64":2.0}]],"window":[1719792000000000000,1735689600000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","instrument":"GER40","topology_hash":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","project":{"namespace":"mvd_lab","dylib_sha256":"5d344b782a69518e1dcdaec3dc7de1c674f0a4cc8b381b3200f22b20681107c5","commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34-dirty"}},"metrics":{"total_pips":-36176543.333341956,"max_drawdown":37983716.666672386,"bias_sign_flips":11500,"r":{"expectancy_r":-0.027058551526511897,"n_trades":12942,"win_rate":0.3014217277082368,"avg_win_r":1.8371431058264787,"avg_loss_r":-0.8314220804872512,"profit_factor":0.9534126597256033,"max_r_drawdown":495.81739080210633,"n_open_at_end":1,"sqn":-1.606586926686023,"sqn_normalized":-0.1412223814904396,"net_expectancy_r":-0.027058551526511897,"conviction_terciles_r":[-0.03152995394506738,-0.04818908175554454,-0.0014566188789239592]}}}} +{"family_id":"9a10a799-0-GER40-w1-r0-s0-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["sma_signal.fast.length",{"I64":5}],["sma_signal.slow.length",{"I64":12}],["stop_length",{"I64":14}],["stop_k",{"F64":2.0}]],"window":[1719792000000000000,1735689600000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","instrument":"GER40","topology_hash":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","project":{"namespace":"mvd_lab","dylib_sha256":"5d344b782a69518e1dcdaec3dc7de1c674f0a4cc8b381b3200f22b20681107c5","commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34-dirty"}},"metrics":{"total_pips":-28088610.000000786,"max_drawdown":31082646.66666011,"bias_sign_flips":13955,"r":{"expectancy_r":-0.013561174069220317,"n_trades":16686,"win_rate":0.35047345079707537,"avg_win_r":1.4928414237036158,"avg_loss_r":-0.8263903299813453,"profit_factor":0.974735241197352,"max_r_drawdown":367.7991477085624,"n_open_at_end":1,"sqn":-1.004193773416202,"sqn_normalized":-0.07773943940946046,"net_expectancy_r":-0.013561174069220317,"conviction_terciles_r":[-0.029343063061341695,-0.019925437521909277,0.00858497837559006]}}}} +{"family_id":"9a10a799-0-GER40-w1-r0-s0-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["sma_signal.fast.length",{"I64":5}],["sma_signal.slow.length",{"I64":20}],["stop_length",{"I64":14}],["stop_k",{"F64":2.0}]],"window":[1719792000000000000,1735689600000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","instrument":"GER40","topology_hash":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","project":{"namespace":"mvd_lab","dylib_sha256":"5d344b782a69518e1dcdaec3dc7de1c674f0a4cc8b381b3200f22b20681107c5","commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34-dirty"}},"metrics":{"total_pips":-23382540.000012066,"max_drawdown":37304800.00000529,"bias_sign_flips":9799,"r":{"expectancy_r":-0.013208231146844277,"n_trades":12382,"win_rate":0.3286221935067033,"avg_win_r":1.7606811371200208,"avg_loss_r":-0.8814815187058349,"profit_factor":0.9776815274589931,"max_r_drawdown":363.0641235941006,"n_open_at_end":1,"sqn":-0.7447895379014975,"sqn_normalized":-0.06693267275900883,"net_expectancy_r":-0.013208231146844277,"conviction_terciles_r":[-0.03320690420227606,-0.016069525074967526,0.009646198054011073]}}}} +{"selection_report":{"family_id":"9a10a799-0-GER40-w1-r0-s0-0","stage":0,"block":"std::sweep","winner_ordinal":0,"params":[["fast.length",{"I64":3}],["slow.length",{"I64":12}]],"selection":{"selection_metric":"sqn_normalized","n_trials":4,"raw_winner_metric":-0.04076578974816012,"mode":"Argmax","deflated_score":-0.22196079259088028,"overfit_probability":0.993006993006993,"n_resamples":1000,"block_len":5,"seed":42}}} +{"family_id":"9a10a799-0-GER40-w1-r1-s0-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["sma_signal.fast.length",{"I64":3}],["sma_signal.slow.length",{"I64":12}],["stop_length",{"I64":20}],["stop_k",{"F64":3.0}]],"window":[1719792000000000000,1735689600000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","instrument":"GER40","topology_hash":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","project":{"namespace":"mvd_lab","dylib_sha256":"5d344b782a69518e1dcdaec3dc7de1c674f0a4cc8b381b3200f22b20681107c5","commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34-dirty"}},"metrics":{"total_pips":-21020366.666673057,"max_drawdown":29789033.333325572,"bias_sign_flips":16074,"r":{"expectancy_r":-0.004675086476808556,"n_trades":15754,"win_rate":0.32944014218611145,"avg_win_r":1.0848206020804947,"avg_loss_r":-0.5399347062810864,"profit_factor":0.9870874845861874,"max_r_drawdown":220.02777792204276,"n_open_at_end":1,"sqn":-0.5072266108641968,"sqn_normalized":-0.04041165246874232,"net_expectancy_r":-0.004675086476808556,"conviction_terciles_r":[-0.0005862215631179619,-0.03296327708080011,0.01951963157341425]}}}} +{"family_id":"9a10a799-0-GER40-w1-r1-s0-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["sma_signal.fast.length",{"I64":3}],["sma_signal.slow.length",{"I64":20}],["stop_length",{"I64":20}],["stop_k",{"F64":3.0}]],"window":[1719792000000000000,1735689600000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","instrument":"GER40","topology_hash":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","project":{"namespace":"mvd_lab","dylib_sha256":"5d344b782a69518e1dcdaec3dc7de1c674f0a4cc8b381b3200f22b20681107c5","commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34-dirty"}},"metrics":{"total_pips":-36176543.333341956,"max_drawdown":37983716.666672386,"bias_sign_flips":11500,"r":{"expectancy_r":-0.019013878804248385,"n_trades":11667,"win_rate":0.2950201422816491,"avg_win_r":1.3340237522197445,"avg_loss_r":-0.5852333956412802,"profit_factor":0.9539144354533416,"max_r_drawdown":325.0116665260927,"n_open_at_end":1,"sqn":-1.5467389370484759,"sqn_normalized":-0.14319815402872818,"net_expectancy_r":-0.019013878804248385,"conviction_terciles_r":[-0.010509444138849392,-0.04314676600222643,-0.003385426271669641]}}}} +{"family_id":"9a10a799-0-GER40-w1-r1-s0-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["sma_signal.fast.length",{"I64":5}],["sma_signal.slow.length",{"I64":12}],["stop_length",{"I64":20}],["stop_k",{"F64":3.0}]],"window":[1719792000000000000,1735689600000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","instrument":"GER40","topology_hash":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","project":{"namespace":"mvd_lab","dylib_sha256":"5d344b782a69518e1dcdaec3dc7de1c674f0a4cc8b381b3200f22b20681107c5","commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34-dirty"}},"metrics":{"total_pips":-28088610.000000786,"max_drawdown":31082646.66666011,"bias_sign_flips":13955,"r":{"expectancy_r":-0.010729184339159285,"n_trades":14651,"win_rate":0.3524674083680295,"avg_win_r":1.0595714332687052,"avg_loss_r":-0.5933192960000635,"profit_factor":0.9720734940444747,"max_r_drawdown":235.90668359190232,"n_open_at_end":1,"sqn":-1.065507800808208,"sqn_normalized":-0.0880284387619853,"net_expectancy_r":-0.010729184339159285,"conviction_terciles_r":[-0.01947333251870767,-0.02151531644072374,0.008799305575823289]}}}} +{"family_id":"9a10a799-0-GER40-w1-r1-s0-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["sma_signal.fast.length",{"I64":5}],["sma_signal.slow.length",{"I64":20}],["stop_length",{"I64":20}],["stop_k",{"F64":3.0}]],"window":[1719792000000000000,1735689600000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=1)","instrument":"GER40","topology_hash":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","project":{"namespace":"mvd_lab","dylib_sha256":"5d344b782a69518e1dcdaec3dc7de1c674f0a4cc8b381b3200f22b20681107c5","commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34-dirty"}},"metrics":{"total_pips":-23382540.000012066,"max_drawdown":37304800.00000529,"bias_sign_flips":9799,"r":{"expectancy_r":-0.011310826945465294,"n_trades":10503,"win_rate":0.3339045986860897,"avg_win_r":1.2771601135182706,"avg_loss_r":-0.6572038498451714,"profit_factor":0.9741620636751668,"max_r_drawdown":248.1838466809362,"n_open_at_end":1,"sqn":-0.8216772975565315,"sqn_normalized":-0.0801760405604832,"net_expectancy_r":-0.011310826945465294,"conviction_terciles_r":[-0.01328054755296467,-0.027183248898294606,0.006531315614863602]}}}} +{"selection_report":{"family_id":"9a10a799-0-GER40-w1-r1-s0-0","stage":0,"block":"std::sweep","winner_ordinal":0,"params":[["fast.length",{"I64":3}],["slow.length",{"I64":12}]],"selection":{"selection_metric":"sqn_normalized","n_trials":4,"raw_winner_metric":-0.04041165246874232,"mode":"Argmax","deflated_score":-0.2402782956052792,"overfit_probability":0.986013986013986,"n_resamples":1000,"block_len":5,"seed":42}}} +{"family_id":"9a10a799-0-USDJPY-w0-r0-s0-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["sma_signal.fast.length",{"I64":3}],["sma_signal.slow.length",{"I64":12}],["stop_length",{"I64":14}],["stop_k",{"F64":2.0}]],"window":[1735689600000000000,1751328000000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=0.01)","instrument":"USDJPY","topology_hash":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","project":{"namespace":"mvd_lab","dylib_sha256":"5d344b782a69518e1dcdaec3dc7de1c674f0a4cc8b381b3200f22b20681107c5","commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34-dirty"}},"metrics":{"total_pips":-52725.25499999993,"max_drawdown":57045.85833333401,"bias_sign_flips":19376,"r":{"expectancy_r":-0.04153791691541394,"n_trades":21136,"win_rate":0.33639288417865254,"avg_win_r":1.5259126495102302,"avg_loss_r":-0.8361032617953693,"profit_factor":0.925135873562995,"max_r_drawdown":999.3645029853625,"n_open_at_end":1,"sqn":-3.171974802176275,"sqn_normalized":-0.21818170362986997,"net_expectancy_r":-0.04153791691541394,"conviction_terciles_r":[-0.0006668966721897961,-0.052396168313798355,-0.07154642621315732]}}}} +{"family_id":"9a10a799-0-USDJPY-w0-r0-s0-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["sma_signal.fast.length",{"I64":3}],["sma_signal.slow.length",{"I64":20}],["stop_length",{"I64":14}],["stop_k",{"F64":2.0}]],"window":[1735689600000000000,1751328000000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=0.01)","instrument":"USDJPY","topology_hash":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","project":{"namespace":"mvd_lab","dylib_sha256":"5d344b782a69518e1dcdaec3dc7de1c674f0a4cc8b381b3200f22b20681107c5","commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34-dirty"}},"metrics":{"total_pips":-64864.085000000894,"max_drawdown":69358.39166666752,"bias_sign_flips":13708,"r":{"expectancy_r":-0.03093861619030559,"n_trades":15588,"win_rate":0.32371054657428794,"avg_win_r":1.7889512625531472,"avg_loss_r":-0.9020412843879407,"profit_factor":0.9492843664182309,"max_r_drawdown":570.3304379381022,"n_open_at_end":1,"sqn":-1.776045192631038,"sqn_normalized":-0.14225214177308151,"net_expectancy_r":-0.03093861619030559,"conviction_terciles_r":[-0.011928063332515898,-0.020482774650355685,-0.06040501058804486]}}}} +{"family_id":"9a10a799-0-USDJPY-w0-r0-s0-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["sma_signal.fast.length",{"I64":5}],["sma_signal.slow.length",{"I64":12}],["stop_length",{"I64":14}],["stop_k",{"F64":2.0}]],"window":[1735689600000000000,1751328000000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=0.01)","instrument":"USDJPY","topology_hash":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","project":{"namespace":"mvd_lab","dylib_sha256":"5d344b782a69518e1dcdaec3dc7de1c674f0a4cc8b381b3200f22b20681107c5","commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34-dirty"}},"metrics":{"total_pips":-40777.3183333289,"max_drawdown":44391.973666662554,"bias_sign_flips":17063,"r":{"expectancy_r":-0.036318344932804676,"n_trades":20635,"win_rate":0.3687908892658105,"avg_win_r":1.4276801687818008,"avg_loss_r":-0.8916756339437945,"profit_factor":0.9354723437584862,"max_r_drawdown":841.0947762688764,"n_open_at_end":1,"sqn":-2.762886900734944,"sqn_normalized":-0.19233612885031,"net_expectancy_r":-0.036318344932804676,"conviction_terciles_r":[-0.010532654358975541,-0.0610106513602964,-0.0374115701339249]}}}} +{"family_id":"9a10a799-0-USDJPY-w0-r0-s0-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["sma_signal.fast.length",{"I64":5}],["sma_signal.slow.length",{"I64":20}],["stop_length",{"I64":14}],["stop_k",{"F64":2.0}]],"window":[1735689600000000000,1751328000000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=0.01)","instrument":"USDJPY","topology_hash":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","project":{"namespace":"mvd_lab","dylib_sha256":"5d344b782a69518e1dcdaec3dc7de1c674f0a4cc8b381b3200f22b20681107c5","commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34-dirty"}},"metrics":{"total_pips":-54188.85299999609,"max_drawdown":58066.20499999583,"bias_sign_flips":11638,"r":{"expectancy_r":-0.02015289368686083,"n_trades":14927,"win_rate":0.34353855429758157,"avg_win_r":1.7575394349373088,"avg_loss_r":-0.9504525427515395,"profit_factor":0.9677003547760925,"max_r_drawdown":397.3583054736529,"n_open_at_end":1,"sqn":-1.0814412470315609,"sqn_normalized":-0.08851495715635345,"net_expectancy_r":-0.02015289368686083,"conviction_terciles_r":[0.02290410840773472,-0.028150331805494457,-0.0552038047283186]}}}} +{"selection_report":{"family_id":"9a10a799-0-USDJPY-w0-r0-s0-0","stage":0,"block":"std::sweep","winner_ordinal":3,"params":[["fast.length",{"I64":5}],["slow.length",{"I64":20}]],"selection":{"selection_metric":"sqn_normalized","n_trials":4,"raw_winner_metric":-0.08851495715635345,"mode":"Argmax","deflated_score":-0.2397838721442369,"overfit_probability":1.0,"n_resamples":1000,"block_len":5,"seed":42}}} +{"family_id":"9a10a799-0-USDJPY-w0-r1-s0-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["sma_signal.fast.length",{"I64":3}],["sma_signal.slow.length",{"I64":12}],["stop_length",{"I64":20}],["stop_k",{"F64":3.0}]],"window":[1735689600000000000,1751328000000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=0.01)","instrument":"USDJPY","topology_hash":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","project":{"namespace":"mvd_lab","dylib_sha256":"5d344b782a69518e1dcdaec3dc7de1c674f0a4cc8b381b3200f22b20681107c5","commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34-dirty"}},"metrics":{"total_pips":-52725.25499999993,"max_drawdown":57045.85833333401,"bias_sign_flips":19376,"r":{"expectancy_r":-0.03057679391775675,"n_trades":19512,"win_rate":0.33246207462074623,"avg_win_r":1.0657136149389268,"avg_loss_r":-0.5765757100216556,"profit_factor":0.9205562640894388,"max_r_drawdown":670.8291922924291,"n_open_at_end":1,"sqn":-3.3548561507832266,"sqn_normalized":-0.24017235116448954,"net_expectancy_r":-0.03057679391775675,"conviction_terciles_r":[-0.005332725166398245,-0.0342763776761564,-0.052121278910715094]}}}} +{"family_id":"9a10a799-0-USDJPY-w0-r1-s0-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["sma_signal.fast.length",{"I64":3}],["sma_signal.slow.length",{"I64":20}],["stop_length",{"I64":20}],["stop_k",{"F64":3.0}]],"window":[1735689600000000000,1751328000000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=0.01)","instrument":"USDJPY","topology_hash":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","project":{"namespace":"mvd_lab","dylib_sha256":"5d344b782a69518e1dcdaec3dc7de1c674f0a4cc8b381b3200f22b20681107c5","commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34-dirty"}},"metrics":{"total_pips":-64864.085000000894,"max_drawdown":69358.39166666752,"bias_sign_flips":13708,"r":{"expectancy_r":-0.02486351481938498,"n_trades":14063,"win_rate":0.31877977671905,"avg_win_r":1.284528723635844,"avg_loss_r":-0.6375989433157084,"profit_factor":0.9427563389484097,"max_r_drawdown":405.3992252434444,"n_open_at_end":1,"sqn":-1.9948857021005162,"sqn_normalized":-0.1682205425149407,"net_expectancy_r":-0.02486351481938498,"conviction_terciles_r":[-0.0049522884606626435,-0.029977398065461097,-0.03965661065678386]}}}} +{"family_id":"9a10a799-0-USDJPY-w0-r1-s0-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["sma_signal.fast.length",{"I64":5}],["sma_signal.slow.length",{"I64":12}],["stop_length",{"I64":20}],["stop_k",{"F64":3.0}]],"window":[1735689600000000000,1751328000000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=0.01)","instrument":"USDJPY","topology_hash":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","project":{"namespace":"mvd_lab","dylib_sha256":"5d344b782a69518e1dcdaec3dc7de1c674f0a4cc8b381b3200f22b20681107c5","commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34-dirty"}},"metrics":{"total_pips":-40777.3183333289,"max_drawdown":44391.973666662554,"bias_sign_flips":17063,"r":{"expectancy_r":-0.027078759369531084,"n_trades":18192,"win_rate":0.3677990325417766,"avg_win_r":1.0118803362925501,"avg_loss_r":-0.631519704424305,"profit_factor":0.9321754843419741,"max_r_drawdown":550.6174148015205,"n_open_at_end":1,"sqn":-2.8027208689154666,"sqn_normalized":-0.2077971676144602,"net_expectancy_r":-0.027078759369531084,"conviction_terciles_r":[-0.011979392559909608,-0.045870663638103985,-0.023386221910579538]}}}} +{"family_id":"9a10a799-0-USDJPY-w0-r1-s0-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["sma_signal.fast.length",{"I64":5}],["sma_signal.slow.length",{"I64":20}],["stop_length",{"I64":20}],["stop_k",{"F64":3.0}]],"window":[1735689600000000000,1751328000000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=0.01)","instrument":"USDJPY","topology_hash":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","project":{"namespace":"mvd_lab","dylib_sha256":"5d344b782a69518e1dcdaec3dc7de1c674f0a4cc8b381b3200f22b20681107c5","commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34-dirty"}},"metrics":{"total_pips":-54188.85299999609,"max_drawdown":58066.20499999583,"bias_sign_flips":11638,"r":{"expectancy_r":-0.019030434830470302,"n_trades":12814,"win_rate":0.3487591696581864,"avg_win_r":1.2609856310043703,"avg_loss_r":-0.7045177683494501,"profit_factor":0.9585222547804874,"max_r_drawdown":302.89545559574174,"n_open_at_end":1,"sqn":-1.3629675047180312,"sqn_normalized":-0.12040461736026072,"net_expectancy_r":-0.019030434830470302,"conviction_terciles_r":[0.01763790695804771,-0.03326646663958158,-0.0414574938009868]}}}} +{"selection_report":{"family_id":"9a10a799-0-USDJPY-w0-r1-s0-0","stage":0,"block":"std::sweep","winner_ordinal":3,"params":[["fast.length",{"I64":5}],["slow.length",{"I64":20}]],"selection":{"selection_metric":"sqn_normalized","n_trials":4,"raw_winner_metric":-0.12040461736026072,"mode":"Argmax","deflated_score":-0.28156217867888617,"overfit_probability":1.0,"n_resamples":1000,"block_len":5,"seed":42}}} +{"family_id":"9a10a799-0-USDJPY-w1-r0-s0-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["sma_signal.fast.length",{"I64":3}],["sma_signal.slow.length",{"I64":12}],["stop_length",{"I64":14}],["stop_k",{"F64":2.0}]],"window":[1719792000000000000,1735689600000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=0.01)","instrument":"USDJPY","topology_hash":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","project":{"namespace":"mvd_lab","dylib_sha256":"5d344b782a69518e1dcdaec3dc7de1c674f0a4cc8b381b3200f22b20681107c5","commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34-dirty"}},"metrics":{"total_pips":-50848.431666669094,"max_drawdown":62179.113333334346,"bias_sign_flips":19186,"r":{"expectancy_r":0.012363247579204687,"n_trades":20724,"win_rate":0.35070449720131247,"avg_win_r":1.572069172888202,"avg_loss_r":-0.8300819564298415,"profit_factor":1.0229387209252163,"max_r_drawdown":188.92403856854332,"n_open_at_end":1,"sqn":0.9297929329318398,"sqn_normalized":0.06458764493505749,"net_expectancy_r":0.012363247579204687,"conviction_terciles_r":[0.014853624009682837,0.02833207567490197,-0.0060959569469707965]}}}} +{"family_id":"9a10a799-0-USDJPY-w1-r0-s0-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["sma_signal.fast.length",{"I64":3}],["sma_signal.slow.length",{"I64":20}],["stop_length",{"I64":14}],["stop_k",{"F64":2.0}]],"window":[1719792000000000000,1735689600000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=0.01)","instrument":"USDJPY","topology_hash":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","project":{"namespace":"mvd_lab","dylib_sha256":"5d344b782a69518e1dcdaec3dc7de1c674f0a4cc8b381b3200f22b20681107c5","commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34-dirty"}},"metrics":{"total_pips":-51763.0056666631,"max_drawdown":77435.69833333006,"bias_sign_flips":13716,"r":{"expectancy_r":0.022075569990904518,"n_trades":15465,"win_rate":0.32305205302295503,"avg_win_r":1.9391237453430303,"avg_loss_r":-0.8927751974232955,"profit_factor":1.0365270445213395,"max_r_drawdown":199.9694186853591,"n_open_at_end":1,"sqn":1.0393971234769983,"sqn_normalized":0.08358080475399424,"net_expectancy_r":0.022075569990904518,"conviction_terciles_r":[0.09475554927246022,-0.02054929674545486,-0.007979542554292044]}}}} +{"family_id":"9a10a799-0-USDJPY-w1-r0-s0-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["sma_signal.fast.length",{"I64":5}],["sma_signal.slow.length",{"I64":12}],["stop_length",{"I64":14}],["stop_k",{"F64":2.0}]],"window":[1719792000000000000,1735689600000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=0.01)","instrument":"USDJPY","topology_hash":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","project":{"namespace":"mvd_lab","dylib_sha256":"5d344b782a69518e1dcdaec3dc7de1c674f0a4cc8b381b3200f22b20681107c5","commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34-dirty"}},"metrics":{"total_pips":-38512.24166666414,"max_drawdown":44337.95099999713,"bias_sign_flips":16948,"r":{"expectancy_r":0.009775129788931759,"n_trades":20264,"win_rate":0.3708547177260166,"avg_win_r":1.519812223176319,"avg_loss_r":-0.8803283102303809,"profit_factor":1.017649277015511,"max_r_drawdown":145.3515053827141,"n_open_at_end":1,"sqn":0.7088963303862105,"sqn_normalized":0.04979894472329575,"net_expectancy_r":0.009775129788931759,"conviction_terciles_r":[0.050020318478151735,0.02772795093763017,-0.04841692221202294]}}}} +{"family_id":"9a10a799-0-USDJPY-w1-r0-s0-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["sma_signal.fast.length",{"I64":5}],["sma_signal.slow.length",{"I64":20}],["stop_length",{"I64":14}],["stop_k",{"F64":2.0}]],"window":[1719792000000000000,1735689600000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=0.01)","instrument":"USDJPY","topology_hash":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","project":{"namespace":"mvd_lab","dylib_sha256":"5d344b782a69518e1dcdaec3dc7de1c674f0a4cc8b381b3200f22b20681107c5","commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34-dirty"}},"metrics":{"total_pips":-37979.061999990605,"max_drawdown":61037.331999991475,"bias_sign_flips":11551,"r":{"expectancy_r":0.01569677086872409,"n_trades":14659,"win_rate":0.341292039020397,"avg_win_r":1.8839010019325075,"avg_loss_r":-0.9522636442112437,"profit_factor":1.0250242000059226,"max_r_drawdown":183.1105341777003,"n_open_at_end":1,"sqn":0.74434698624342,"sqn_normalized":0.06147849988479057,"net_expectancy_r":0.01569677086872409,"conviction_terciles_r":[0.07153254543025914,-0.035145314745673784,0.010704103752760707]}}}} +{"selection_report":{"family_id":"9a10a799-0-USDJPY-w1-r0-s0-0","stage":0,"block":"std::sweep","winner_ordinal":1,"params":[["fast.length",{"I64":3}],["slow.length",{"I64":20}]],"selection":{"selection_metric":"sqn_normalized","n_trials":4,"raw_winner_metric":0.08358080475399424,"mode":"Argmax","deflated_score":-0.07173920660059865,"overfit_probability":0.40559440559440557,"n_resamples":1000,"block_len":5,"seed":42}}} +{"family_id":"9a10a799-0-USDJPY-w1-r1-s0-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["sma_signal.fast.length",{"I64":3}],["sma_signal.slow.length",{"I64":12}],["stop_length",{"I64":20}],["stop_k",{"F64":3.0}]],"window":[1719792000000000000,1735689600000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=0.01)","instrument":"USDJPY","topology_hash":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","project":{"namespace":"mvd_lab","dylib_sha256":"5d344b782a69518e1dcdaec3dc7de1c674f0a4cc8b381b3200f22b20681107c5","commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34-dirty"}},"metrics":{"total_pips":-50848.431666669094,"max_drawdown":62179.113333334346,"bias_sign_flips":19186,"r":{"expectancy_r":0.007546389988772996,"n_trades":19216,"win_rate":0.34757493755203994,"avg_win_r":1.0898941786142393,"avg_loss_r":-0.5690669050761904,"profit_factor":1.0203256891847603,"max_r_drawdown":129.45850322802562,"n_open_at_end":1,"sqn":0.8216367289881804,"sqn_normalized":0.05927183187854173,"net_expectancy_r":0.007546389988772996,"conviction_terciles_r":[0.006774679878095983,0.02154153871890376,-0.005674984403609468]}}}} +{"family_id":"9a10a799-0-USDJPY-w1-r1-s0-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["sma_signal.fast.length",{"I64":3}],["sma_signal.slow.length",{"I64":20}],["stop_length",{"I64":20}],["stop_k",{"F64":3.0}]],"window":[1719792000000000000,1735689600000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=0.01)","instrument":"USDJPY","topology_hash":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","project":{"namespace":"mvd_lab","dylib_sha256":"5d344b782a69518e1dcdaec3dc7de1c674f0a4cc8b381b3200f22b20681107c5","commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34-dirty"}},"metrics":{"total_pips":-51763.0056666631,"max_drawdown":77435.69833333006,"bias_sign_flips":13716,"r":{"expectancy_r":0.013826491137629468,"n_trades":13994,"win_rate":0.31906531370587393,"avg_win_r":1.3831917740009176,"avg_loss_r":-0.6278164921748438,"profit_factor":1.032342516039446,"max_r_drawdown":131.3253055004579,"n_open_at_end":1,"sqn":0.9171393337259621,"sqn_normalized":0.07752903615301221,"net_expectancy_r":0.013826491137629468,"conviction_terciles_r":[0.05607161303991221,-0.01355402901992385,-0.0010290548467779723]}}}} +{"family_id":"9a10a799-0-USDJPY-w1-r1-s0-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["sma_signal.fast.length",{"I64":5}],["sma_signal.slow.length",{"I64":12}],["stop_length",{"I64":20}],["stop_k",{"F64":3.0}]],"window":[1719792000000000000,1735689600000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=0.01)","instrument":"USDJPY","topology_hash":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","project":{"namespace":"mvd_lab","dylib_sha256":"5d344b782a69518e1dcdaec3dc7de1c674f0a4cc8b381b3200f22b20681107c5","commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34-dirty"}},"metrics":{"total_pips":-38512.24166666414,"max_drawdown":44337.95099999713,"bias_sign_flips":16948,"r":{"expectancy_r":0.0052064498569127605,"n_trades":17953,"win_rate":0.3706901353534228,"avg_win_r":1.0700657675427006,"avg_loss_r":-0.6220407407253962,"profit_factor":1.0133002045644295,"max_r_drawdown":96.44449169446348,"n_open_at_end":1,"sqn":0.5223864538444245,"sqn_normalized":0.038987320760500786,"net_expectancy_r":0.0052064498569127605,"conviction_terciles_r":[0.024722433565459796,0.014925740434069133,-0.024023939671182333]}}}} +{"family_id":"9a10a799-0-USDJPY-w1-r1-s0-0","report":{"manifest":{"commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34","params":[["sma_signal.fast.length",{"I64":5}],["sma_signal.slow.length",{"I64":20}],["stop_length",{"I64":20}],["stop_k",{"F64":3.0}]],"window":[1719792000000000000,1735689600000000000],"seed":0,"broker":"sim-optimal+risk-executor(pip_size=0.01)","instrument":"USDJPY","topology_hash":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","project":{"namespace":"mvd_lab","dylib_sha256":"5d344b782a69518e1dcdaec3dc7de1c674f0a4cc8b381b3200f22b20681107c5","commit":"2a7caa6e38bbd7768ad8ef1a4bc5a745f1122e34-dirty"}},"metrics":{"total_pips":-37979.061999990605,"max_drawdown":61037.331999991475,"bias_sign_flips":11551,"r":{"expectancy_r":0.01151064735789281,"n_trades":12621,"win_rate":0.34854607400364473,"avg_win_r":1.3433615964735752,"avg_loss_r":-0.7010668672565449,"profit_factor":1.0252032530923008,"max_r_drawdown":117.09224215951497,"n_open_at_end":1,"sqn":0.7353777719126346,"sqn_normalized":0.06545813313070956,"net_expectancy_r":0.01151064735789281,"conviction_terciles_r":[0.05781926794507495,-0.015429527978610988,-0.007857797892785604]}}}} +{"selection_report":{"family_id":"9a10a799-0-USDJPY-w1-r1-s0-0","stage":0,"block":"std::sweep","winner_ordinal":1,"params":[["fast.length",{"I64":3}],["slow.length",{"I64":20}]],"selection":{"selection_metric":"sqn_normalized","n_trials":4,"raw_winner_metric":0.07752903615301221,"mode":"Argmax","deflated_score":-0.09653911415964003,"overfit_probability":0.5074925074925075,"n_resamples":1000,"block_len":5,"seed":42}}} +{"campaign_run":{"campaign":"9a10a79992c81520f9fbb3e01c43651f89f1caa4ffeb8f16b7821c0e78bc808a","process":"d68e747465a7e0ccde2fc1ea425119bd2f2bc26c43a3001a71c7ee0b6ac6a901","run":0,"seed":42,"cells":[{"strategy":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","instrument":"GER40","window_ms":[1735689600000,1751328000000],"stages":[{"block":"std::sweep","family_id":"9a10a799-0-GER40-w0-r0-s0-0","selection":{"winner_ordinal":1,"params":[["fast.length",{"I64":3}],["slow.length",{"I64":20}]],"selection":{"selection_metric":"sqn_normalized","n_trials":4,"raw_winner_metric":0.10148439699175255,"mode":"Argmax","deflated_score":-0.08114854473066763,"overfit_probability":0.34665334665334663,"n_resamples":1000,"block_len":5,"seed":42}}}]},{"strategy":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","instrument":"GER40","window_ms":[1735689600000,1751328000000],"stages":[{"block":"std::sweep","family_id":"9a10a799-0-GER40-w0-r1-s0-0","selection":{"winner_ordinal":1,"params":[["fast.length",{"I64":3}],["slow.length",{"I64":20}]],"selection":{"selection_metric":"sqn_normalized","n_trials":4,"raw_winner_metric":0.08616357801435585,"mode":"Argmax","deflated_score":-0.10805573667334291,"overfit_probability":0.4775224775224775,"n_resamples":1000,"block_len":5,"seed":42}}}]},{"strategy":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","instrument":"GER40","window_ms":[1719792000000,1735689600000],"stages":[{"block":"std::sweep","family_id":"9a10a799-0-GER40-w1-r0-s0-0","selection":{"winner_ordinal":0,"params":[["fast.length",{"I64":3}],["slow.length",{"I64":12}]],"selection":{"selection_metric":"sqn_normalized","n_trials":4,"raw_winner_metric":-0.04076578974816012,"mode":"Argmax","deflated_score":-0.22196079259088028,"overfit_probability":0.993006993006993,"n_resamples":1000,"block_len":5,"seed":42}}}]},{"strategy":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","instrument":"GER40","window_ms":[1719792000000,1735689600000],"stages":[{"block":"std::sweep","family_id":"9a10a799-0-GER40-w1-r1-s0-0","selection":{"winner_ordinal":0,"params":[["fast.length",{"I64":3}],["slow.length",{"I64":12}]],"selection":{"selection_metric":"sqn_normalized","n_trials":4,"raw_winner_metric":-0.04041165246874232,"mode":"Argmax","deflated_score":-0.2402782956052792,"overfit_probability":0.986013986013986,"n_resamples":1000,"block_len":5,"seed":42}}}]},{"strategy":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","instrument":"USDJPY","window_ms":[1735689600000,1751328000000],"stages":[{"block":"std::sweep","family_id":"9a10a799-0-USDJPY-w0-r0-s0-0","selection":{"winner_ordinal":3,"params":[["fast.length",{"I64":5}],["slow.length",{"I64":20}]],"selection":{"selection_metric":"sqn_normalized","n_trials":4,"raw_winner_metric":-0.08851495715635345,"mode":"Argmax","deflated_score":-0.2397838721442369,"overfit_probability":1.0,"n_resamples":1000,"block_len":5,"seed":42}}}]},{"strategy":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","instrument":"USDJPY","window_ms":[1735689600000,1751328000000],"stages":[{"block":"std::sweep","family_id":"9a10a799-0-USDJPY-w0-r1-s0-0","selection":{"winner_ordinal":3,"params":[["fast.length",{"I64":5}],["slow.length",{"I64":20}]],"selection":{"selection_metric":"sqn_normalized","n_trials":4,"raw_winner_metric":-0.12040461736026072,"mode":"Argmax","deflated_score":-0.28156217867888617,"overfit_probability":1.0,"n_resamples":1000,"block_len":5,"seed":42}}}]},{"strategy":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","instrument":"USDJPY","window_ms":[1719792000000,1735689600000],"stages":[{"block":"std::sweep","family_id":"9a10a799-0-USDJPY-w1-r0-s0-0","selection":{"winner_ordinal":1,"params":[["fast.length",{"I64":3}],["slow.length",{"I64":20}]],"selection":{"selection_metric":"sqn_normalized","n_trials":4,"raw_winner_metric":0.08358080475399424,"mode":"Argmax","deflated_score":-0.07173920660059865,"overfit_probability":0.40559440559440557,"n_resamples":1000,"block_len":5,"seed":42}}}]},{"strategy":"546f4838aca6b0bf67140b5868b4aba18fdc53be57e6cca28bf23588fbf68027","instrument":"USDJPY","window_ms":[1719792000000,1735689600000],"stages":[{"block":"std::sweep","family_id":"9a10a799-0-USDJPY-w1-r1-s0-0","selection":{"winner_ordinal":1,"params":[["fast.length",{"I64":3}],["slow.length",{"I64":20}]],"selection":{"selection_metric":"sqn_normalized","n_trials":4,"raw_winner_metric":0.07752903615301221,"mode":"Argmax","deflated_score":-0.09653911415964003,"overfit_probability":0.5074925074925075,"n_resamples":1000,"block_len":5,"seed":42}}}]}],"generalizations":[{"strategy_ordinal":0,"window_ordinal":0,"regime_ordinal":0,"generalization":{"selection_metric":"expectancy_r","n_instruments":2,"worst_case":-0.02015289368686083,"sign_agreement":1,"per_instrument":[["GER40",0.022214720124996902],["USDJPY",-0.02015289368686083]]},"winners":[["GER40",[["fast.length",{"I64":3}],["slow.length",{"I64":20}]]],["USDJPY",[["fast.length",{"I64":5}],["slow.length",{"I64":20}]]]]},{"strategy_ordinal":0,"window_ordinal":0,"regime_ordinal":1,"generalization":{"selection_metric":"expectancy_r","n_instruments":2,"worst_case":-0.019030434830470302,"sign_agreement":1,"per_instrument":[["GER40",0.013069073372316402],["USDJPY",-0.019030434830470302]]},"winners":[["GER40",[["fast.length",{"I64":3}],["slow.length",{"I64":20}]]],["USDJPY",[["fast.length",{"I64":5}],["slow.length",{"I64":20}]]]]},{"strategy_ordinal":0,"window_ordinal":1,"regime_ordinal":0,"generalization":{"selection_metric":"expectancy_r","n_instruments":2,"worst_case":-0.006927220530948696,"sign_agreement":1,"per_instrument":[["GER40",-0.006927220530948696],["USDJPY",0.022075569990904518]]},"winners":[["GER40",[["fast.length",{"I64":3}],["slow.length",{"I64":12}]]],["USDJPY",[["fast.length",{"I64":3}],["slow.length",{"I64":20}]]]]},{"strategy_ordinal":0,"window_ordinal":1,"regime_ordinal":1,"generalization":{"selection_metric":"expectancy_r","n_instruments":2,"worst_case":-0.004675086476808556,"sign_agreement":1,"per_instrument":[["GER40",-0.004675086476808556],["USDJPY",0.013826491137629468]]},"winners":[["GER40",[["fast.length",{"I64":3}],["slow.length",{"I64":12}]]],["USDJPY",[["fast.length",{"I64":3}],["slow.length",{"I64":20}]]]]}]}} diff --git a/fieldtests/milestone-verb-dissolution/mvd_3_process_sweep_generalize.json b/fieldtests/milestone-verb-dissolution/mvd_3_process_sweep_generalize.json new file mode 100644 index 0000000..0518096 --- /dev/null +++ b/fieldtests/milestone-verb-dissolution/mvd_3_process_sweep_generalize.json @@ -0,0 +1,10 @@ +{ + "format_version": 1, + "kind": "process", + "name": "mvd-sweep-deflate-generalize", + "description": "Anti-false-discovery sweep (deflated argmax) then a cross-instrument worst-case floor, run once per (window, risk regime) cell.", + "pipeline": [ + { "block": "std::sweep", "metric": "sqn_normalized", "select": "argmax", "deflate": true }, + { "block": "std::generalize", "metric": "expectancy_r" } + ] +} diff --git a/fieldtests/milestone-verb-dissolution/mvd_bare.json b/fieldtests/milestone-verb-dissolution/mvd_bare.json new file mode 100644 index 0000000..9e26dfe --- /dev/null +++ b/fieldtests/milestone-verb-dissolution/mvd_bare.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/fieldtests/milestone-verb-dissolution/mvd_lab/.gitignore b/fieldtests/milestone-verb-dissolution/mvd_lab/.gitignore new file mode 100644 index 0000000..af5cf3d --- /dev/null +++ b/fieldtests/milestone-verb-dissolution/mvd_lab/.gitignore @@ -0,0 +1,3 @@ +/target +Cargo.lock +/runs diff --git a/fieldtests/milestone-verb-dissolution/mvd_lab/Aura.toml b/fieldtests/milestone-verb-dissolution/mvd_lab/Aura.toml new file mode 100644 index 0000000..d45dade --- /dev/null +++ b/fieldtests/milestone-verb-dissolution/mvd_lab/Aura.toml @@ -0,0 +1,4 @@ +# Static project context only (C17); paths only. +[paths] +runs = "runs" +# data = "/path/to/archive" # the recorded-data root; defaults to the built-in path diff --git a/fieldtests/milestone-verb-dissolution/mvd_lab/CLAUDE.md b/fieldtests/milestone-verb-dissolution/mvd_lab/CLAUDE.md new file mode 100644 index 0000000..6e47f36 --- /dev/null +++ b/fieldtests/milestone-verb-dissolution/mvd_lab/CLAUDE.md @@ -0,0 +1,10 @@ +# mvd_lab — an aura research project + +This crate is an aura project: a cdylib of node/strategy blueprints the +`aura` host loads during research (see the engine's docs/project-layout.md). + +- Build: `cargo build` (the next `aura` invocation loads the fresh dylib) +- Run: `aura run blueprints/signal.json` (from anywhere inside this dir) +- Nodes live in `src/`; each is registered in `vocabulary()`/`type_ids()` + under the `mvd_lab::` namespace prefix. +- Topology is data (`blueprints/*.json`), node logic is Rust. diff --git a/fieldtests/milestone-verb-dissolution/mvd_lab/Cargo.toml b/fieldtests/milestone-verb-dissolution/mvd_lab/Cargo.toml new file mode 100644 index 0000000..8c0bdfb --- /dev/null +++ b/fieldtests/milestone-verb-dissolution/mvd_lab/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "mvd_lab" +version = "0.1.0" +edition = "2024" +publish = false + +[lib] +crate-type = ["cdylib"] + +[dependencies] +aura-core = { path = "/home/brummel/dev/aura/crates/aura-core" } + +# Standalone workspace root: never a member of an enclosing workspace. +[workspace] diff --git a/fieldtests/milestone-verb-dissolution/mvd_lab/blueprints/signal.json b/fieldtests/milestone-verb-dissolution/mvd_lab/blueprints/signal.json new file mode 100644 index 0000000..4f18387 --- /dev/null +++ b/fieldtests/milestone-verb-dissolution/mvd_lab/blueprints/signal.json @@ -0,0 +1 @@ +{"format_version":1,"blueprint":{"name":"mvd_lab_signal","nodes":[{"primitive":{"type":"SMA","name":"fast","bound":[{"pos":0,"name":"length","kind":"I64","value":{"I64":2}}]}},{"primitive":{"type":"SMA","name":"slow","bound":[{"pos":0,"name":"length","kind":"I64","value":{"I64":4}}]}},{"primitive":{"type":"Sub"}},{"primitive":{"type":"Bias","name":"bias","bound":[{"pos":0,"name":"scale","kind":"F64","value":{"F64":0.5}}]}},{"primitive":{"type":"mvd_lab::Identity"}}],"edges":[{"from":0,"to":2,"slot":0,"from_field":0},{"from":1,"to":2,"slot":1,"from_field":0},{"from":2,"to":3,"slot":0,"from_field":0},{"from":3,"to":4,"slot":0,"from_field":0}],"input_roles":[{"name":"price","targets":[{"node":0,"slot":0},{"node":1,"slot":0}],"source":"F64"}],"output":[{"node":4,"field":0,"name":"bias"}]}} \ No newline at end of file diff --git a/fieldtests/milestone-verb-dissolution/mvd_lab/src/lib.rs b/fieldtests/milestone-verb-dissolution/mvd_lab/src/lib.rs new file mode 100644 index 0000000..246fd35 --- /dev/null +++ b/fieldtests/milestone-verb-dissolution/mvd_lab/src/lib.rs @@ -0,0 +1,76 @@ +//! mvd_lab — an aura research project: node logic + the exported vocabulary. +//! +//! Every node type this crate provides is registered in `vocabulary()` / +//! `type_ids()` under the `mvd_lab::` namespace prefix; the `aura` host loads +//! this cdylib per invocation and merges it with the std vocabulary. + +use aura_core::{ + Cell, Ctx, FieldSpec, Firing, Node, NodeSchema, PortSpec, PrimitiveBuilder, + ScalarKind, +}; + +/// One-input f64 pass-through. Emits `None` until its input has a value. +pub struct Identity { + out: [Cell; 1], +} + +impl Identity { + pub fn new() -> Self { + Self { out: [Cell::from_f64(0.0)] } + } + pub fn builder() -> PrimitiveBuilder { + PrimitiveBuilder::new( + "mvd_lab::Identity", + NodeSchema { + inputs: vec![PortSpec { + kind: ScalarKind::F64, + firing: Firing::Any, + name: "value".into(), + }], + output: vec![FieldSpec { name: "value".into(), kind: ScalarKind::F64 }], + params: vec![], + }, + |_| Box::new(Identity::new()), + ) + } +} + +impl Default for Identity { + fn default() -> Self { + Self::new() + } +} + +impl Node for Identity { + fn lookbacks(&self) -> Vec { + vec![1] + } + fn eval(&mut self, ctx: Ctx<'_>) -> Option<&[Cell]> { + let w = ctx.f64_in(0); + if w.is_empty() { + return None; + } + self.out[0] = Cell::from_f64(w[0]); + Some(&self.out) + } + fn label(&self) -> String { + "mvd_lab::Identity".to_string() + } +} + +fn vocabulary(type_id: &str) -> Option { + match type_id { + "mvd_lab::Identity" => Some(Identity::builder()), + _ => None, + } +} + +fn type_ids() -> &'static [&'static str] { + &["mvd_lab::Identity"] +} + +aura_core::aura_project! { + namespace: "mvd_lab", + vocabulary: vocabulary, + type_ids: type_ids, +} diff --git a/fieldtests/milestone-verb-dissolution/mvd_sweep_smacross_blueprint.json b/fieldtests/milestone-verb-dissolution/mvd_sweep_smacross_blueprint.json new file mode 100644 index 0000000..83ba539 --- /dev/null +++ b/fieldtests/milestone-verb-dissolution/mvd_sweep_smacross_blueprint.json @@ -0,0 +1 @@ +{"format_version":1,"blueprint":{"name":"graph","nodes":[{"primitive":{"type":"SMA","name":"fast"}},{"primitive":{"type":"SMA","name":"slow"}},{"primitive":{"type":"Sub","name":"sub"}},{"primitive":{"type":"Bias","name":"bias"}}],"edges":[{"from":0,"to":2,"slot":0,"from_field":0},{"from":1,"to":2,"slot":1,"from_field":0},{"from":2,"to":3,"slot":0,"from_field":0}],"input_roles":[{"name":"price","targets":[{"node":0,"slot":0},{"node":1,"slot":0}],"source":"F64"}],"output":[{"node":3,"field":0,"name":"bias"}]}} \ No newline at end of file diff --git a/fieldtests/milestone-verb-dissolution/mvd_sweep_smacross_op.json b/fieldtests/milestone-verb-dissolution/mvd_sweep_smacross_op.json new file mode 100644 index 0000000..ccbeb1a --- /dev/null +++ b/fieldtests/milestone-verb-dissolution/mvd_sweep_smacross_op.json @@ -0,0 +1,12 @@ +[ + {"op": "source", "role": "price", "kind": "F64"}, + {"op": "add", "type": "SMA", "name": "fast"}, + {"op": "add", "type": "SMA", "name": "slow"}, + {"op": "feed", "role": "price", "into": ["fast.series", "slow.series"]}, + {"op": "add", "type": "Sub", "name": "sub"}, + {"op": "connect", "from": "fast.value", "to": "sub.lhs"}, + {"op": "connect", "from": "slow.value", "to": "sub.rhs"}, + {"op": "add", "type": "Bias", "name": "bias"}, + {"op": "connect", "from": "sub.value", "to": "bias.signal"}, + {"op": "expose", "from": "bias.bias", "as": "bias"} +]