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

SelezioneStrategie.py
# 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.