Strategy Selection By Filters
The best come now.
The filters
A strategy has to clear every condition on both brokers, demo and real. If it holds the performance just on one and breaks on the other, the validation is not passed.
Our filters are:
Net PnL $ / %
Max Drawdown %
Number of executions
# filters, checked on both brokers MIN_DRAWDOWN_LIMIT = 10.0 MIN_NET_PROFIT = 500000 MIN_EXECUTIONS = 200 def passes_gate(alpari, acg): for broker in (alpari, acg): if broker["drawdown_percent"] >= MIN_DRAWDOWN_LIMIT: return False if broker["net_profit"] < MIN_NET_PROFIT: return False if broker["executions"] < MIN_EXECUTIONS: return False return True # 50/50 ranking on the worse broker side by_executions = sorted(survivors, key=lambda s: s["worst_executions"], reverse=True) by_drawdown = sorted(survivors, key=lambda s: s["worst_drawdown"]) for s in survivors: s["score"] = s["position_executions"] + s["position_drawdown"] survivors.sort(key=lambda s: s["score"])
The ranking
The strategies that pass the filters applied to the production are now ranked from the best in terms of number of executions and minimum drawdown %, and each strategy that has passed the filter goes straight to demo test on the live markets.
The output
The selection produces a report per asset with the surviving strategies and their full statistics, broker by broker: executions, drawdown, net profit, win rate, profit factor and trades per week. Only these strategies move on to execution.