Software Investor

Strategy portfolio on the Micro E-mini Russell 2000

Four systematic strategies trading together on the M2K, 10-minute chart. 3,316 simulated trades over 7.4 years, with the position closed at the end of the week.

7,110 ptsHistory
2k4k6k2020202120222023202420252026
7,110 ptsCumulative result
3,316Trades
12,9xResult / max. drawdown
552 ptsMaximum drawdown
1.33Profit factor
61%Winning trades
73%Positive months
13Longest losing streak

Portfolio vs. M2K

Cumulative portfolio result in points, with one contract per setup (4 contracts in total), versus the raw continuous M2K series (unadjusted) multiplied by 4 to have the same exposure.

Portfolio 7,110 pts · max. DD 552 ptsM2K ×4 4,836 pts · max. DD 3,169 pts
2020202120222023202420252026-2,5002,5005,000

Performance by setup

Cumulative result of each of the four strategies. Click a setup to highlight it.

2020202120222023202420252026Setup 01 · Long: 900 ptsSetup 02 · Long: 2,589 ptsSetup 03 · Long: 1,838 ptsSetup 04 · Long: 1,783 pts5001,0001,5002,0002,500

Statistics by setup

Same period and same order as the chart above.

SetupSideTradesResult (pts)Max. drawdown (pts)Result / DDProfit factorWin rateAverage per trade (pts)
Setup 01Long7489001038,8x1.4977%1.2
Setup 02Long15142,5894216,1x1.2054%1.7
Setup 03Long5241,8382088,8x1.5657%3.5
Setup 04Long5301,7832168,2x1.5458%3.4

Result by year

In index points, all strategies combined.

YearTradesResult (pts)Max. drawdown (pts)Win rate
201923815517460%
20204341,36423265%
20214911,38239564%
202252365531760%
202345530354154%
202446882934359%
20254341,09736860%
2026*2731,32619260%

* year in progress

Quarter-by-quarter result

26 of 30 quarters closed positive.

Q2/19: 34 ptsQ3/19: 70 ptsQ4/19: 51 ptsQ1/20: 210 ptsQ2/20: 424 ptsQ3/20: 203 ptsQ4/20: 527 ptsQ1/21: 951 ptsQ2/21: 235 ptsQ3/21: 163 ptsQ4/21: 32 ptsQ1/22: 281 ptsQ2/22: 30 ptsQ3/22: 208 ptsQ4/22: 136 ptsQ1/23: -69 ptsQ2/23: 294 ptsQ3/23: -35 ptsQ4/23: 113 ptsQ1/24: 286 ptsQ2/24: 90 ptsQ3/24: 155 ptsQ4/24: 297 ptsQ1/25: 216 ptsQ2/25: 480 ptsQ3/25: 423 ptsQ4/25: -22 ptsQ1/26: 655 ptsQ2/26: 745 ptsQ3/26: -74 ptsQ2/19Q2/20Q2/21Q2/22Q2/23Q2/24Q2/25Q2/26

Month-by-month result

65 of 89 months closed positive. Hover over a bar to see the value.

May/19: -17 ptsJun/19: 51 ptsJul/19: 33 ptsAug/19: -75 ptsSep/19: 113 ptsOct/19: -28 ptsNov/19: 48 ptsDec/19: 31 ptsJan/20: 75 ptsFeb/20: -160 ptsMar/20: 295 ptsApr/20: 332 ptsMay/20: 68 ptsJun/20: 24 ptsJul/20: 28 ptsAug/20: 41 ptsSep/20: 134 ptsOct/20: 32 ptsNov/20: 219 ptsDec/20: 276 ptsJan/21: 371 ptsFeb/21: 283 ptsMar/21: 297 ptsApr/21: -134 ptsMay/21: 119 ptsJun/21: 251 ptsJul/21: 89 ptsAug/21: -11 ptsSep/21: 85 ptsOct/21: 108 ptsNov/21: -49 ptsDec/21: -27 ptsJan/22: -131 ptsFeb/22: 307 ptsMar/22: 106 ptsApr/22: -78 ptsMay/22: 299 ptsJun/22: -191 ptsJul/22: 124 ptsAug/22: -42 ptsSep/22: 126 ptsOct/22: 222 ptsNov/22: 124 ptsDec/22: -210 ptsJan/23: 174 ptsFeb/23: -98 ptsMar/23: -145 ptsApr/23: -12 ptsMay/23: 100 ptsJun/23: 206 ptsJul/23: 162 ptsAug/23: 20 ptsSep/23: -217 ptsOct/23: -248 ptsNov/23: 144 ptsDec/23: 218 ptsJan/24: 21 ptsFeb/24: 191 ptsMar/24: 75 ptsApr/24: -69 ptsMay/24: 104 ptsJun/24: 55 ptsJul/24: 105 ptsAug/24: 36 ptsSep/24: 14 ptsOct/24: -21 ptsNov/24: 243 ptsDec/24: 76 ptsJan/25: 210 ptsFeb/25: 86 ptsMar/25: -80 ptsApr/25: 206 ptsMay/25: 142 ptsJun/25: 133 ptsJul/25: 13 ptsAug/25: 194 ptsSep/25: 216 ptsOct/25: 1 ptsNov/25: 97 ptsDec/25: -120 ptsJan/26: 130 ptsFeb/26: 269 ptsMar/26: 256 ptsApr/26: 365 ptsMay/26: 273 ptsJun/26: 107 ptsJul/26: -6 ptsAug/26: 38 ptsSep/26: -105 ptsMay/19May/20May/21May/22May/23May/24May/25May/26

Monthly map

In points. Green is a positive month, red is a negative one.

JanFevMarAbrMaiJunJulAgoSetOutNovDezYear
2019-175133-75113-284831155
202075-16029533268242841134322192761,364
2021371283297-13411925189-1185108-49-271,382
2022-131307106-78299-191124-42126222124-210655
2023174-98-145-1210020616220-217-248144218303
20242119175-69104551053614-2124376829
202521086-8020614213313194216197-1201,097
2026130269256365273107-638-1051,326

Result per trade

Average of 2.1 pts per trade, about 447 trades per year.

0-58 pts+54 pts

Source code of a strategy

An example for technical audit: a research strategy, outside the portfolio and with more modest performance than the four above. It is plain Python, with no libraries, and runs on any CSV of 10-minute bars of the M2K. Each trade in the list can be checked against your own data.

05/2019 a 01/2023

1,231 pts
Trades
326
Largest drop
568 pts
Winning trades
43%

01/2023 a 09/2026

554 pts
Trades
274
Largest drop
348 pts
Winning trades
44%
# python m2k.py   (CSV: time,open,high,low,close,contract,roll)
F="M2K_M10.csv"
a,b,c,d=.03,.015,90,768
L=open(F).read().splitlines()
H=L[0].split(",")
I=[H.index(k) for k in("time","high","low","close","contract","roll")]
B=[]
for s in L[1:]:
    r=s.split(",")
    t,h,l,x,k,z=[r[i] for i in I]
    B.append((t,float(h),float(l),float(x),k,z=="True"))
N=len(B)
def q(t):
    y,m,e=int(t[:4]),int(t[5:7]),int(t[8:10])
    if m<3:y-=1
    return (y+y//4-y//100+y//400+[0,3,2,5,0,3,5,1,4,6,2,4][m-1]+e)%7+1
G={};R={}
for x in B:
    e=x[0][:10]
    u=G.setdefault(e,[0,1e18])
    u[0]=max(u[0],x[1]);u[1]=min(u[1],x[2])
    R[e]=R.get(e,False) or x[5]
K=list(G)
Y={K[i]:G[K[i-1]] for i in range(1,len(K))}
W=[q(x[0]) for x in B]
V=[0]*N
for i in range(1,N):
    V[i]=V[i-1]+(W[i]<W[i-1] or B[i][4]!=B[i-1][4])
n=S=0;z=-1;i=0
while i<N-1:
    t,h,l,x,k,_=B[i]
    m=int(t[11:13])*60+int(t[14:16])
    p=(W[i]-1)*1440+m
    f=i==N-1 or V[i+1]!=V[i]
    if t[:10] not in Y or R[t[:10]] or p>=8400 or p<1380 or f or(W[i]==6 and m+10>=1170)or t[:10]==z:i+=1;continue
    u,v=Y[t[:10]][0],Y[t[:10]][1]
    if u<=v or not(x-v)/(u-v)*100>c or int(t[11:13])>=12:i+=1;continue
    z=t[:10];g=x*(1-a);s=x*(1+b);j=i+1;w=B[j][3]
    while j<N:
        if V[j]!=V[i]:j-=1;w=B[j][3];break
        T=B[j]
        if T[2]<=g and T[1]>=s:raise SystemExit(T[0])
        if T[2]<=g:w=g;break
        if T[1]>=s:w=s;break
        w=T[3]
        if j==N-1 or V[j+1]!=V[j] or(W[j]==6 and int(T[0][11:13])*60+int(T[0][14:16])+10>=1170)or j-i>=d:break
        j+=1
    print("%s;%.1f;%.1f;%.1f"%(t,x,w,x-w))
    n+=1;S+=x-w;i=j
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 four strategies remain confidential.

Want to talk?

I present the work in detail to anyone who is interested.

Contact