Strategy portfolio on the Mini Index
Ten systematic strategies trading together on the WIN, 10-minute chart. 3,043 simulated trades over 5.3 years, with a separate out-of-sample validation period.
History and validation
The history was used to build the portfolio. The out-of-sample period starts after the cutoff date and did not influence any choice.
History (in-sample)
364,818 pts
- Trades
- 2944
- Max. drawdown
- 17,024 pts
- Result / DD
- 21.4x
- Win rate
- 54%
May 3, 2021 to May 6, 2026
Out-of-sample (OOS)
38,187 pts
- Trades
- 99
- Max. drawdown
- 7,416 pts
- Result / DD
- 5.1x
- Win rate
- 62%
May 7, 2026 to Aug 14, 2026, no adjustment after the cutoff
Portfolio vs. Mini Index
Cumulative portfolio result in points, with one contract per setup (10 contracts in total), versus the raw Mini Index series (continuous WIN, unadjusted) multiplied by 10 to have the same exposure.
Performance by setup
Cumulative result of each of the ten strategies. The dashed line marks the start of the out-of-sample period. Click a setup to highlight it.
Statistics by setup
Same period and same order as the chart above, history and out-of-sample combined.
| Setup | Side | Trades | Result (pts) | Max. drawdown (pts) | Result / DD | Profit factor | Win rate | Average per trade (pts) |
|---|---|---|---|---|---|---|---|---|
| Setup 01 | Short | 429 | 69,198 | 5,120 | 13.5x | 1.63 | 50% | 161 |
| Setup 02 | Short | 429 | 57,234 | 4,849 | 11.8x | 1.58 | 53% | 133 |
| Setup 03 | Short | 432 | 56,570 | 4,849 | 11.7x | 1.56 | 53% | 131 |
| Setup 04 | Long | 255 | 46,632 | 3,737 | 12.5x | 1.70 | 54% | 183 |
| Setup 05 | Long | 314 | 43,861 | 7,334 | 6.0x | 1.55 | 57% | 140 |
| Setup 06 | Long | 314 | 39,831 | 4,436 | 9.0x | 1.72 | 57% | 127 |
| Setup 07 | Long | 314 | 38,029 | 4,159 | 9.1x | 1.68 | 56% | 121 |
| Setup 08 | Short | 157 | 31,041 | 2,226 | 13.9x | 2.22 | 59% | 198 |
| Setup 09 | Short | 208 | 25,895 | 2,361 | 11.0x | 1.77 | 60% | 124 |
| Setup 10 | Long | 107 | 9,918 | 1,926 | 5.1x | 2.03 | 61% | 93 |
Result by year
In index points, all strategies combined.
| Year | Trades | Result (pts) | Max. drawdown (pts) | Win rate |
|---|---|---|---|---|
| 2021 | 421 | 77,116 | 7,250 | 57% |
| 2022 | 650 | 60,881 | 17,024 | 51% |
| 2023 | 623 | 57,701 | 12,464 | 54% |
| 2024 | 550 | 40,854 | 13,784 | 53% |
| 2025 | 517 | 61,334 | 12,011 | 53% |
| 2026* | 282 | 105,118 | 10,563 | 63% |
* year in progress
Quarter-by-quarter result
20 of 22 quarters closed positive.
Month-by-month result
55 of 64 months closed positive. Hover over a bar to see the value.
Monthly map
In thousands of points. Green is a positive month, red is a negative one.
| Jan | Fev | Mar | Abr | Mai | Jun | Jul | Ago | Set | Out | Nov | Dez | Year | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2021 | 2.3 | 8.1 | 14.2 | 1.5 | 23.9 | 17.1 | 9.3 | 0.9 | 77.1 | ||||
| 2022 | 6.6 | 3.0 | 2.0 | 1.5 | 18.1 | 5.6 | -13.5 | 6.9 | -3.8 | 7.1 | 12.5 | 14.9 | 60.9 |
| 2023 | 2.4 | 5.7 | 13.5 | -2.6 | 11.3 | 5.0 | 9.2 | 4.6 | 5.2 | 3.3 | 3.2 | -3.0 | 57.7 |
| 2024 | 12.6 | 6.0 | 1.2 | 3.0 | 0.3 | -3.8 | 8.3 | 8.7 | 3.2 | -5.1 | 4.1 | 2.4 | 40.9 |
| 2025 | 5.8 | 7.2 | 9.4 | -1.2 | 13.3 | 6.7 | 2.1 | 14.1 | -0.2 | 5.9 | 1.7 | -3.7 | 61.3 |
| 2026 | 32.8 | 7.5 | 20.4 | 6.3 | 4.0 | 13.0 | 8.7 | 12.3 | 105.1 |
Result per trade
Average of 132 pts per trade, about 576 trades per year.
Source code of a strategy
An example for technical audit: a research strategy, outside the portfolio and with more modest performance than the ten above. It is plain Python, with no libraries, and runs on any CSV of 10-minute bars of the WIN. Each trade in the list can be checked against your own data.
History
- Trades
- 307
- Largest drop
- 8,969 pts
- Winning trades
- 59%
Out-of-sample
- Trades
- 23
- Largest drop
- 3,115 pts
- Winning trades
- 57%
# python win.py (CSV: datetime,open,high,low,close,roll)
F="WIN_M10.csv"
a,b,c,d,e=.0075,.0175,25,24,1050
L=open(F).read().splitlines()
H=L[0].split(",")
I=[H.index(k) for k in("datetime","open","high","low","close","roll")]
D={}
for s in L[1:]:
r=s.split(",")
t,o,h,l,x,z=[r[i] for i in I]
D.setdefault(t[:10],[]).append((t,int(t[11:13])*60+int(t[14:16])+10,float(o),float(h),float(l),float(x),z=="True"))
K=list(D)
n=S=0
for k in range(1,len(K)):
P,T=D[K[k-1]],D[K[k]]
if any(q[6] for q in T):continue
u=max(q[3] for q in P);v=min(q[4] for q in P)
if u<=v or len(T)<2 or not(T[0][2]-v)/(u-v)*100<c:continue
p=T[0][5];g=p*(1+a);s=p*(1-b);w=T[1][5]
for j in range(1,len(T)):
_,m,_,h,l,x,_=T[j]
if h>=g and l<=s:raise SystemExit(T[j][0])
if h>=g:w=g;break
if l<=s:w=s;break
w=x
if j>=d or m>=e or j==len(T)-1:break
print("%s;%.1f;%.1f;%.1f"%(T[0][0],p,w,w-p))
n+=1;S+=w-p
print(n,round(S))
Result in points, 1 contract, before costs. The simulation of the portfolio strategies follows the same entry, target, stop and exit mechanics; some have variations (such as a trailing stop) that do not appear in this example. The rules and parameters of the ten strategies remain confidential.
Want to talk?
I present the work in detail to anyone who is interested.
Contact