Pergunta para alguém bom em matemática

 

Se o movimento de preços segue uma caminhada aleatória, ( e este fórum estaria vazio se todos pensassem que está), quantos Pips um comerciante precisaria capturar/perder para ter as mesmas chances que a roleta? Neste caso, assumiremos a roda européia com 36 números e um único 0. A aposta é a aposta de Dinheiro Equilibrado de probabilidade vs. Dinheiro Equilibrado, pagamento de 1 para 1. Obviamente, quando você pousar em 0/verde você perde. Portanto, basicamente o 0 ou Verde serve como o Spreads. E vamos assumir que os spreads sejam de 1-Pip.

Meu pensamento até agora é que se eu estiver procurando um 1-Pip take Profit e tiver um 1-Pip stop-loss. Assumindo novamente que não há nenhum viés em que lado o preço iria, então eu estaria jogando com uma probabilidade que é muito pior que a roleta. Acho que nem mesmo a procura de um stop-loss de 10-Pip versus takeprofit de 10-Pip faz da negociação a melhor opção. Eu consegui descobrir a resposta dentro da minha cabeça no outro dia, mas hoje, eu esqueci, + eu não tinha certeza da minha matemática de qualquer maneira :).

Alguém por favor me ajude pois tenho uma hipótese a ser testada/simulada. Obrigado.

 

Não sou bom com estatísticas . . . mas não acho que se possa igualar spread e o 0 na roda. O spread é pago independentemente de ganhar ou perder. O 0 na roda significa apenas que se você jogar vermelho ou preto você tem menos de 50% de chances de ganhar . . 18:19 ou 48,65%

Acho que o que você está procurando é que tipo de comércio daria uma taxa efetiva de ganho de 48,65% devido ao efeito do spread. Acho que se sua negociação fosse de 20 pips e o spread fosse de 1 pip que lhe daria o que você procura . . . risco = 21 recompensa 20 . . Mas acho que não me cite ;-)

 

É bom que você pense diferente e essa é uma das principais perguntas que estou tentando responder porque acredito que pode ser igualada. Eu sei que para cada dólar que você aposta na roleta há uma Perda Esperada que é equivalente à diferença entre sua taxa de ganho e sua relação 50/50. Por exemplo, se você não tiver 0/Green na roleta, então você estará jogando um jogo equilibrado a longo prazo. Entretanto, com a chance de apenas 48,65%, você terá uma perda constante de algo como US$ 1,35 para cada US$ 100 apostados.

A única diferença entre isto e o spread é .... com os spreads, você tem que pagá-los sempre que negociar, independentemente se a participação for uma perda ou uma vitória.

O próximo passo agora é eu fazer algumas simulações. A primeira usando negócios aleatórios que procura por 20-pips stoploss e 20-pips takeprofit (claro que não incluindo o spread de 1-pip faz com que a perda total seja de 21 e esperançosamente cria as chances que estou procurando). Obviamente, quanto mais comércio/amostra dentro deste teste, melhor. Hummm, eu me pergunto se alguém acha que não vai dar resultados semelhantes em comparação com a roleta?

 
ubzen: Hummm, será que alguém pensa que não vai dar resultados semelhantes em comparação com a roleta?
Sim eu, porque o comércio tem muitas coisas escondidas que são contra a aposta. Por exemplo, colocar o comércio é um alvo em movimento e pode não ser levado para onde, pois a caixa em uma mesa de roleta não se move. Há muitas coisas que não podem ser simuladas, mas cada uma delas é contra um lucro.
 

Ok, caras, temos alguns dados.

color   Color;
double  Sl; 
double  Tp;
double  Pips;
double  Price;

void start(){
    if(OrdersTotal()==0){
        int Dir=MathRand()%2;
        Pips=Point; if(Digits==3){Pips=0.01;}if(Digits==5){Pips=0.0001;}
        if(Dir==0){Price=Ask; Sl=Ask-20*Pips; Tp=Ask+20*Pips; Color=Blue;}
        if(Dir==1){Price=Bid; Sl=Bid+20*Pips; Tp=Bid-20*Pips; Color=Red;}
        int Ticket=OrderSend(Symbol(),Dir,0.1,Price,999,0,0,"",0,0,Color);
        if(Ticket>-1){
            if(OrderSelect(Ticket, SELECT_BY_TICKET)){
                OrderModify(Ticket,OrderOpenPrice(),Sl,Tp,0,Color);
}   }   }   }

Agora, com certeza há 19,9x de lucro e perdas. No entanto, os lucros% falam por si mesmos.

 

Acontece que é ainda pior do que a roleta, mas isso se deve a erros padrão, ou qualquer que seja a estatística de almofada necessária. Alguém mais pode executá-la e obter valores ligeiramente superiores ou inferiores, entretanto, acredito que sua expectativa matemática é a mesma que a roleta. Cara, se isto não assustar um comerciante que não sabia disto, nada mais o fará.

De qualquer forma, continuando. O próximo passo lógico quando ensinei isso antes foi fazer uma simulação mql4 de números aleatórios para ver se eles pousam em algum lugar entre 0-36 e se é número par, adicionar 1$ ao meu total de corridas (começando em 100.000 dólares) ou subtrair 1$ se for ímpar ou 0. Mas isso será uma perda de tempo porque todos e sua mãe sabem as probabilidades na roleta. E se não souberem, pode-se simplesmente procurá-los on-line. Então, eu vou pular esse passo.

Mas de qualquer forma, somos comerciantes certos, lol. Não acreditamos que os mercados sejam aleatórios e acreditamos que podemos prever o mercado com uma certa probabilidade de sucesso. Portanto, pelo menos para mim, o próximo passo seria empilhar um método de previsão versus as entradas aleatórias. Mas minha próxima pergunta, como podemos comparar um sistema de comercialização com este, considerando que não teremos em nenhum lugar próximo a esse número de amostras, dado todos os filtros que tendemos a usar nas negociações?

 

Ok, ainda estou esperando por sugestões para minha pergunta acima. No momento principal, vou propor 2 sistemas. Um deles vou me referir ao Sistema 14 a partir de http://forex-strategies-revealed.com/simple/simple-trading-with-daily-range. E o outro vou me referir ao sistema Oscar's Grind de http://www.blackjackforumonline.com/content/Betting_Systems_Oscars_Blackjack_System.htm.

Algumas palavras sobre o Sistema 14: Este foi o tópico mais responsivo dentro da seção avançada do site que pude encontrar. Parece bastante simples de codificar e muitos cartazes o creditam como um vencedor.

Algumas palavras sobre OscarGrind: Vantagens que os jogadores não gostam nem mesmo de ouvir a progressão da palavra. Entretanto, vindo de um autor por quem tenho muito respeito (ele não está dizendo que é uma coisa certa) estou disposto a tentar dentro deste contexto.

Vou em frente e codificar e postar minha interpretação de ambos os sistemas. Uma armadilha para o Sistema-14 aqui é provavelmente o fato de que estarei forçando-o a usar um SL-TP de 20-Pip. Uma armadilha para a OscarGrind é como Size-Orders procurar por apenas uma unidade após uma vitória. Mas mantenha seus dedos cruzados, um sistema lucrativo poderá ser confirmado em breve.

 

Ok, aqui está System_14. Quase quebrou-se - 11, portanto nada mal comparado com o Random, mas ainda há muito espaço para melhorias. De qualquer forma, aqui estão os códigos que acabei de escrever, portanto talvez não esteja livre de erros.

int     Magic_S14=14;
double  Sl; 
double  Tp;
double  Pips;
double  Price;
color   Color;
bool    Pen_Mode;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void start(){
    if(!isNewBar() && !Pen_Mode){return(0);}
    Pips=Point; 
    if(Digits==3){Pips=0.01;} 
    if(Digits==5){Pips=0.0001;}
    Check_Pending_Order_Condition();
    Set_Trigger_Market_Order_SlTp();
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bool isNewBar(){ static datetime LastBar;
    datetime CurBar=iTime(Symbol(),PERIOD_D1,0);
    if(LastBar !=CurBar){LastBar=CurBar; return(true);}
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
double Percent25_Previous_24Hours_Move(){
    double High_=iHigh(Symbol(),PERIOD_D1,1); double Low_=iLow(Symbol(),PERIOD_D1,1);
    double Total_Move=High_-Low_; double Percent_25=NormalizeDouble(Total_Move*0.25,Digits); 
    return(Percent_25);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void Check_Pending_Order_Condition(){
    if(Count_Orders_Magic_Symbol_Only()==0){
        int Stop_Level=MarketInfo(Symbol(),MODE_STOPLEVEL);
        double Percent_25=Percent25_Previous_24Hours_Move();
        if(Percent_25<Stop_Level*Pips){Percent_25=Stop_Level*Pips;}
        OrderSend(Symbol(),OP_BUYSTOP,0.1,Ask+Percent_25,999,0,0,"",Magic_S14,0,Blue);
        OrderSend(Symbol(),OP_SELLSTOP,0.1,Bid-Percent_25,999,0,0,"",Magic_S14,0,Red);
        if(Count_Orders_Magic_Symbol_Type(1)==2){Pen_Mode=true;}
        else{Print("Twin_OrderSend_Failed_Error=",GetLastError());}
}   }
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
int Count_Orders_Magic_Symbol_Only(){
    int Ans;
    for(int i=OrdersTotal()-1; i>=0; i--){
        if(OrderSelect(i, SELECT_BY_POS)
        && OrderMagicNumber()==Magic_S14
        && OrderSymbol()==Symbol()){Ans++;}
    }return(Ans);
    //~~~~~~~~~~~~~~~~~~~~
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
int Count_Orders_Magic_Symbol_Type(int x){
    int Ans;
    for(int i=OrdersTotal()-1; i>=0; i--){
        if(OrderSelect(i, SELECT_BY_POS)
        && OrderMagicNumber()==Magic_S14
        && OrderSymbol()==Symbol()
        && OrderType()>x){Ans++;}
    }return(Ans);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bool Set_Trigger_Market_Order_SlTp(){
    if(!Pen_Mode){return(0);}
    for(int i=OrdersTotal()-1; i>=0; i--){
        if(OrderSelect(i, SELECT_BY_POS)
        && OrderMagicNumber()==Magic_S14
        && OrderSymbol()==Symbol()
        && (OrderType()==0 || OrderType()==1)
        ){int Ot=OrderTicket(); double Op=OrderOpenPrice(); bool Res;
            if(OrderType()==OP_BUY){Res=OrderModify(Ot,Op,Op-20*Pips,Op+20*Pips,0,Blue);}else
            if(OrderType()==OP_SELL){Res=OrderModify(Ot,Op,Op+20*Pips,Op-20*Pips,0,Red);}
            if(!Res){Print("Setting_Sl_Tp_Failed_Error=",GetLastError()); return(Res);}
    }   }
    if(Res){
        for(    i=OrdersTotal()-1; i>=0; i--){
            if(OrderSelect(i, SELECT_BY_POS)
            && OrderMagicNumber()==Magic_S14
            && OrderSymbol()==Symbol()
            && (OrderType()==4 || OrderType()==5)
            ){
                Res=OrderDelete(OrderTicket());
                if(!Res){Print("Pending_Delete_Failed_Error=",GetLastError()); return(Res);}
                if(Res){Pen_Mode=false;} return(Res);
}   }   }   }
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

Bem, o Oscar Grind no Forex é um fracasso total. Acho que não há nenhum ouro-graal descoberto aqui. No entanto, algo a apontar. Se você está negociando um Sistema Aleatório e tem Spreads de 1-3, e procura ter lucro entre <60 Pips, seria melhor se você acertasse a roleta do cassino. Se você estiver usando progressões (martingale ou não), é apenas uma questão de tempo até você arruinar, especialmente se você tiver más previsões. Uma previsão mais forte pode ser o melhor método para obter as chances em seu favor.

Novamente, a codificação do testador. Pode conter erros e não usar nenhum deles em contas ao vivo.

int     Magic_OG;
color   Color;
double  Sl; 
double  Tp;
double  Pips;
double  Price;
double  Lots;
double  Bank_Hi;
double  Last_OrSize;
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void start(){
    if(Count_Orders_Magic_Symbol_Only()==0){
        if(AccountEquity()>Bank_Hi){Bank_Hi=AccountEquity();}
        int Dir=MathRand()%2;
        Pips=Point; if(Digits==3){Pips=0.01;}if(Digits==5){Pips=0.0001;}
        if(Dir==0){Price=Ask; Sl=Ask-20*Pips; Tp=Ask+20*Pips; Color=Blue;}
        if(Dir==1){Price=Bid; Sl=Bid+20*Pips; Tp=Bid-20*Pips; Color=Red;}
        Alert(Lot_Size());
        int Ticket=OrderSend(Symbol(),Dir,Lot_Size(),Price,999,0,0,"",0,0,Color);
        if(Ticket>-1){
            if(OrderSelect(Ticket, SELECT_BY_TICKET)){
                OrderModify(Ticket,OrderOpenPrice(),Sl,Tp,0,Color);
}   }   }   }
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
int Count_Orders_Magic_Symbol_Only(){
    int Ans;
    for(int i=OrdersTotal()-1; i>=0; i--){
        if(OrderSelect(i, SELECT_BY_POS)
        && OrderMagicNumber()==Magic_OG
        && OrderSymbol()==Symbol()){Ans++;}
    }return(Ans);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
double Lot_Size(){
    double BkrLotStep=     MarketInfo(Symbol(),MODE_LOTSTEP);
    double BrkMiniLot=     MarketInfo(Symbol(),MODE_MINLOT);
    double BrkMaxiLot=     MarketInfo(Symbol(),MODE_MAXLOT);
    double Tick_Value=     MarketInfo(Symbol(),MODE_TICKVALUE);
    double Tick_Sizes=     MarketInfo(Symbol(),MODE_TICKSIZE);
    if(Digits==2 || Digits==3){ int Pips_2Real=100;}
    if(Digits==4 || Digits==5){ Pips_2Real=10000;}
    double Pip_Values=Tick_Value / (Tick_Sizes*Pips_2Real);
    double AE=AccountEquity();
    bool isLastWin=His_LasOrdWin_Magic_Symbol_Only();
    if(!isLastWin){Lots=Last_OrSize;}
    if( isLastWin && AE>=Bank_Hi){Lots=0.1;}
    if( isLastWin && AE <Bank_Hi){Lots=Last_OrSize+0.1;
        double Target=20+Bank_Hi-AE;
        if(Lots*Pip_Values*20>Target){
            for(double i=Lots; i>BrkMiniLot; i-=BkrLotStep){
                if(i*Pip_Values*20<=Target){Lots=i; break;}
    }   }   }
    if(Lots>BrkMaxiLot){Lots=BrkMaxiLot;}
    if(Lots<BrkMiniLot){Lots=BrkMiniLot;} return(Lots);
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bool His_LasOrdWin_Magic_Symbol_Only(){
    if(OrdersHistoryTotal()==0){return(true);}
    for(int i=OrdersHistoryTotal()-1; i>=0; i--){
        if(OrderSelect(i, SELECT_BY_POS,MODE_HISTORY)
        && OrderMagicNumber()==Magic_OG
        && OrderSymbol()==Symbol()){
            Last_OrSize=OrderLots();
            if(OrderProfit()>0){return(true);}
}   }   }
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

Como você já tem o protótipo, você pode testar rapidamente alguma coisa?

Se você ajustar os lotes muito ligeiramente dependendo de sua ração atual de ganho/perda, assumindo um resultado negativo, deve pelo menos aumentar ligeiramente o resultado.

Exemplo:

Pegue seu sistema aleatório e assuma uma taxa de ganho de 47%.

Agora você recebe o modificador por: 47/ActualWinningRage

E o tamanho do lote seria (47/ActualWinningRage)*lotsize

 

Acabei de acordar e decidi experimentar esta abordagem.

Um truque rude de fato. Acho que, para alguns, é perseguir o que já sabe :). O Sistema de Roleta sofreu, de fato, perdas sem precedentes. Portanto, acho que essa é uma maneira de melhorar um sistema. Também vou considerar isto como uma forma de progressão negativa. O código de gerenciamento de dinheiro está abaixo, também não livre de bugs.

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
double Lot_Size(int Switch){
    static int Saved_His_Total; 
    int His_Total=OrdersHistoryTotal();
    if(His_Total==0){return(0.1);}
    if(Saved_His_Total != His_Total){
        Saved_His_Total=His_Total;
        for(int i=His_Total; i>=0; i--){
            if(OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)
            && OrderMagicNumber()==Magic
            && OrderSymbol()==Symbol()
            ){
                static int Trade_Total; Trade_Total++;
                static int Buy_Wins; static int Sel_Wins;
                static int Buy_Loss; static int Sel_Loss;
                static double Buy_Profit, Buy_Losses;
                static double Sel_Profit, Sel_Losses;
                if(OrderType()==OP_BUY && OrderProfit()>0){
                    Buy_Wins++; Buy_Profit+=OrderProfit();}
                if(OrderType()==OP_BUY && OrderProfit()<=0){
                    Buy_Loss++; Buy_Losses+=OrderProfit();}
                if(OrderType()==OP_SELL && OrderProfit()>0){
                    Sel_Wins++; Sel_Profit+=OrderProfit();}
                if(OrderType()==OP_SELL && OrderProfit()<=0){
                    Sel_Loss++; Sel_Losses+=OrderProfit();} break;
        }   }
        double Win_Total = Buy_Wins + Sel_Wins;
        double Loss_Total = Buy_Loss + Sel_Loss;
        double Profit_Total = Buy_Profit + Sel_Profit;
        double Losses_Total = Buy_Losses + Sel_Losses;
        if(Win_Total !=0){double Avg_Profit = Profit_Total / Win_Total;}
        if(Loss_Total!=0){double Avg_Losses = Losses_Total / Loss_Total;}
        if(Trade_Total !=0){double W2L_Ratio = Win_Total / Trade_Total;}
        if(Trade_Total !=0){double L2W_Ratio = Loss_Total / Trade_Total;}
        if(Avg_Losses !=0){double P2L_Ratio = Avg_Profit / Avg_Losses;}
        if(Avg_Losses !=0){double Kd=Avg_Profit/Avg_Losses;}
        //~~~~~~~~~~~~~~~~~~~~~
        if(W2L_Ratio !=0){double RvRoulette=(0.47/W2L_Ratio)*0.1;}
        //~~~~~~~~~~~~~~~~~~~~~
        //http://www.trader-soft.com/money-management/index.html
        if(Kd !=0){double Kelly=(W2L_Ratio-L2W_Ratio)/(Avg_Profit/Avg_Losses);}
        if(P2L_Ratio!=0){double Optimal_f=((P2L_Ratio + 1)*W2L_Ratio-1)/P2L_Ratio;}
        //~~~~~~~~~~~~~~~~~~~~~
        if(Trade_Total==0){return(0.1);}
        if(Switch=='R'){return(RvRoulette);}
        if(Switch=='K'){return(Kelly);}
        if(Switch=='F'){return(Optimal_f);}
        //~~~~~~~~~~~~~~~~~~~~~
    }
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Incluí o Kelly e o Optimal F porque já tinha as estatísticas para calculá-las. Nunca é recomendado usá-las em amostras de tamanho pequeno imo <100. Também estão em frações de banco para arriscar, então você precisará levar sua (minha preferência) margem de conta * o k ou f * seu_risco_appetite (0,5 normalmente). Então você precisa ter certeza de que os Lotes*Pip_Valores*Stop_Loss<=Target, eu tenho um exemplo disso dentro de um dos códigos acima.

Continuando, aqui estão os resultados da sugestão de Zzuegg. Será que isso pode transformar nosso break-Even System-14 em um vencedor?

Bars in test                        812652
Ticks modelled                      10091174
Modelling quality                   n/a
Mismatched charts errors            22023
Initial deposit                     100000.00
Total net profit                    -37756.90 The Losses decreased vs -41832
Gross profit                        391593.03
Gross loss                          -429349.92
Profit factor                       0.91
Expected payoff                     -0.83
Absolute drawdown                   38180.64
Maximal drawdown                    38280.06 (38.24%)
Relative drawdown                   38.24% (38280.06)
Total trades                        45448
Short positions (won %)             22883 (47.54%)
Long positions (won %)              22565 (47.90%)
Profit trades (% of total)          21687 (47.72%)
Loss trades (% of total)            23761 (52.28%)
Largest profit trade                46.00
loss trade                          -42.00
Average profit trade                18.06
loss trade                          -18.07
        Maximum
consecutive wins (profit in money)  17 (306.11)
consecutive losses (loss in money)  14 (-251.89)
        Maximal
consecutive profit (count of wins)  306.11 (17)
consecutive loss (count of losses)  -259.64 (13)
        Average
consecutive wins        2
consecutive losses      2
Razão: