Your upper bound is determined by how volatile the assets you can trade are and what your maximum firing rate in and out is. So anyone claiming 10% a year is consistently impossible needs to justify cos it looks off market. If you have no hardware other than a cpu and can only trade with illegals on the internet but still wanna try you can. Id say 20%-30% a day might be an upper bound under these conditions but people are usually wrong when they predict what's possible.
double Symbols[50000]
double Ticket[5000][2][2];double Price[5000][2][2];
double orders_total;
int orders_total[2][2];int delta[2][2];int i;int j;int k;int l;
int Y[100][2][2];
int ticket;int type;double price;string symbol;double lots;
int ArraySize_sybols;
int OnInit(){EventSetMillisecondTimer(1);ArraySize_s=ArraySize(s);}
void OnTimer(){
i=0;
ArrayFill(delta,0,WHOLE_ARRAY,0);
ArrayFill(delta,0,WHOLE_ARRAY,0);
ArrayFill(Price,0,WHOLE_ARRAY,0);ArrayFill(Price,0,WHOLE_ARRAY,0);
ArrayFill(Ticket,0,WHOLE_ARRAY,0);ArrayFill(Ticket,0,WHOLE_ARRAY,0);
orders_total=OrdersTotal();ArraySize_symbols=ArraySize(symbols);
Y[5000][50][2]; Price[50000][50][2]; Ticket[50000][50][2] {
OrderSelect(i,SELECT_BY_POS);price=OrderOpenPrice();ticket=OrderTicket();type=OrderType();symbol=OrderSymbol();
j=0;
while(j<ArraySize_symbols)
{
if(symbol==s[j])
{
orders_total[j,type]+=1;
Price[orders_total[j,type]-1,j,type]=price;
Ticket[orders_total[j,type]-1,j,type]=ticket;
}
j+=1;
}
i+=1;
}
while(j<array_size_symbols)
{
k=0;
while(k<array_size_type)
{
i=0;
while(i<orders_total[j,k])
{
l=i+1
while(l<orders_total[j,k])
{
Y[i,j,k]+=(Price[i,j,k]>=Price[i,j,k])*(k==OP_BUY)+(Price[i,j,k]<=Price[i,j,k])*(k==OP_SELL);
Y[l,j,k]+=(Price[l,j,k]<Price[i,j,k])*((k==OP_BUY))+(Price[i,j,k]>Price[i,j,k])*(k==OP_SELL);
}
Price[i,j,k]=Price[Y[i,j,k],j,k];
Ticket[i,j,k]=Ticket[Y[i,j,k],j,k];
k+=1;
}
j+=1;
}
j=0
EventKillTimer();
while(1){
while(j<ArraySize_Symbols)
{
while(marketinfo(s[j],k)<Price[orders_total[j,k],j,k]+profit_margin[j,k]

{
k=Mod(array_size_type,k+1);
}
j=Mod(array_size_symbols,j+1);
}
OrderClose(orders_total[j,k],j,k);orders_total[j,k]-=1;
}