Question pour une personne douée en mathématiques

 

Si le mouvement des prix suit une marche aléatoire, ( et ce forum serait vide si tout le monde le pensait ), combien de Pips un trader devrait-il capturer/perdre pour avoir les mêmes chances qu'à la roulette ? Dans ce cas, nous supposerons une roue européenne avec 36 numéros et un seul 0. Le pari est le pari Even Money de Odds vs Even, paiement de 1 pour 1. Évidemment, si vous tombez sur le 0/vert, vous perdez. Donc, en fait, le 0 ou le vert sert d'écart. Et nous supposerons que les spreads sont de 1 point.

Jusqu'à présent, je pense que si je cherche un take profit de 1 point et que j'ai un stop-loss de 1 point. En supposant encore une fois qu'il n'y a pas de biais sur le côté où le prix irait, alors je jouerais avec une cote qui est bien pire que la roulette. Je ne pense même pas que chercher un stop-loss de 10 points contre un takeprofit de 10 points fasse du trading la meilleure option. J'ai réussi à trouver la réponse dans ma tête l'autre jour mais aujourd'hui, j'ai oublié, + je n'étais pas sûr de mes calculs de toute façon :).

Quelqu'un peut m'aider car j'ai une hypothèse à tester/simuler. Merci.

 

Je ne suis pas doué pour les statistiques, mais je ne pense pas que l'on puisse assimiler l'écart et le 0 de la roue. L'écart est payé indépendamment de la victoire ou de la défaite. Le 0 sur la roue signifie simplement que si vous jouez rouge ou noir, vous avez moins de 50% de chances de gagner ... 18:19 ou 48,65%.

Je suppose que ce que vous cherchez à savoir, c'est quel type de transactions donnerait un taux de gain effectif de 48,65 % en raison de l'effet du spread. Je pense que si votre transaction était de 20 pips et que le spread était de 1 pip, vous obtiendriez ce que vous recherchez... risque = 21 récompense 20... Je pense, mais ne me citez pas ;-)

 

C'est bien que vous pensiez différemment et c'est l'une des questions principales auxquelles j'essaie de répondre parce que je crois que cela peut être assimilé. Je sais que pour chaque dollar que vous pariez à la roulette, il y a une perte attendue qui est équivalente à la différence entre votre taux de gain et votre ratio 50/50. Par exemple, si vous n'avez pas de 0/Vert sur la roue, vous jouez à égalité sur le long terme. Cependant, avec une chance de seulement 48,65 %, vous aurez une perte constante de quelque chose comme 1,35 $ pour chaque 100 $ misés.

La seule différence entre cela et le spread est ..... Avec les spreads, vous devez les payer à chaque fois que vous négociez, que ce soit une perte ou un gain.

L'étape suivante consiste à effectuer quelques simulations. La première utilise des transactions aléatoires qui recherchent un stoploss de 20 pips et un takeprofit de 20 pips (bien sûr, sans inclure le spread de 1 pip, la perte totale est de 21 et j'espère créer les probabilités que je recherche). Évidemment, plus il y a de transactions/échantillons dans ce test, mieux c'est. Hummm, je me demande si quelqu'un pense que cela ne va pas donner des résultats similaires à ceux de la roulette ?

 
ubzen: Hummm, je me demande si quelqu'un pense que ça ne va pas donner des résultats similaires à ceux de la roulette ?
Oui moi, car le trading a beaucoup de choses cachées qui sont contre le pari. Par exemple, le placement d'une transaction est une cible mouvante et elle peut ne pas être prise, alors que la case sur une table de roulette ne bouge pas. Il y a beaucoup de choses qui peuvent faire échouer le trading et qui ne peuvent pas être simulées, mais chacune d'entre elles est contre un profit.
 

Ok, les gars, nous avons quelques données.

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);
}   }   }   }

Bien sûr, il y a des pertes et des profits de 19,9x. Cependant, le pourcentage de transactions rentables parle de lui-même.

 

Il s'avère que c'est encore pire que la roulette, mais c'est dû aux erreurs standard, ou à tout ce dont les statistiques ont besoin. Quelqu'un d'autre peut l'exécuter et obtenir des valeurs légèrement supérieures ou inférieures, cependant, je crois que l'espérance mathématique est la même que celle de la roulette. Si cela ne fait pas peur à un trader qui ne le savait pas, rien d'autre ne le fera.

Quoi qu'il en soit, continuons. L'étape logique suivante, lorsque je l'ai appris plus tôt, était de faire une simulation mql4 de nombres aléatoires pour voir s'ils atterrissent n'importe où entre 0-36 et si c'est un nombre pair, ajouter 1$ à mon total courant (en commençant par 100 000 $) ou soustraire 1$ si c'est impair ou 0. Mais ce sera une perte de temps parce que tout le monde et sa maman connaissent les chances de la roulette. Et si ce n'est pas le cas, on peut les consulter en ligne. Donc, je vais juste sauter cette étape.

Mais de toute façon, nous sommes des traders, n'est-ce pas, lol. Nous ne croyons pas que les marchés sont aléatoires et nous croyons que nous pouvons prédire le marché avec une certaine probabilité de succès. Donc, au moins pour moi, la prochaine étape serait de mettre en place une méthode de prévision contre les entrées aléatoires. Mais ma question suivante est la suivante : comment pouvons-nous comparer un système de trading à cette méthode, étant donné que nous n'aurons jamais un nombre aussi important d'échantillons, compte tenu de tous les filtres que nous avons tendance à utiliser dans le trading ?

 

Ok, j'attends toujours des suggestions à ma question ci-dessus. Pour l'instant, je vais proposer deux systèmes. L'un d'eux est le Système 14 de http://forex-strategies-revealed.com/simple/simple-trading-with-daily-range. Et l'autre que j'appellerai Oscar's Grind sur http://www.blackjackforumonline.com/content/Betting_Systems_Oscars_Blackjack_System.htm.

Quelques mots sur le Système 14 : C'est le sujet le plus réactif que j'ai pu trouver dans la section avancée du site. Il semble assez simple à coder et beaucoup d'affiches le considèrent comme un gagnant.

Quelques mots sur OscarGrind : Les joueurs d'Avantage n'aiment pas entendre le mot progression. Cependant, venant d'un auteur pour lequel j'ai beaucoup de respect (même s'il ne dit pas que c'est une chose sûre), je suis prêt à essayer dans ce contexte.

Je vais donc coder et poster mon interprétation des deux systèmes. Un écueil pour le Système-14 ici est probablement le fait que je vais le forcer à utiliser un SL-TP de 20 points. Un écueil pour OscarGrind est de savoir comment dimensionner les ordres pour ne rechercher qu'une unité après une victoire. Mais gardez les doigts croisés les gars, un système rentable pourrait être confirmé bientôt.

 

Ok, voici le Système_14. Presque rentable, donc pas mal comparé à l'aléatoire, mais encore beaucoup de place pour l'amélioration. Quoi qu'il en soit, voici les codes que je viens d'écrire, donc il se peut qu'ils ne soient pas exempts d'erreurs.

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);
}   }   }   }
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 

Eh bien, le Oscars Grind sur le Forex est un échec total. Je suppose qu'il n'y a pas de goly-grail découvert ici. Cependant, il y a quelques points à souligner. Si vous négociez un système aléatoire, avec des spreads de 1 à 3, et que vous recherchez des prises de bénéfices entre <60 pips, vous feriez mieux de jouer à la roulette du casino. Si vous utilisez des progressions (martingale ou autre), c'est juste une question de temps avant que vous ne vous ruiniez, surtout si vous avez de mauvaises prévisions. Une prévision plus forte pourrait être la meilleure méthode pour mettre les chances de votre côté.

Encore une fois, codage de testeur. Peut contenir des erreurs et ne pas les utiliser sur des comptes réels.

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);}
}   }   }
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

 

Puisque vous avez déjà le prototype, pouvez-vous tester rapidement quelque chose ?

Si vous ajustez très légèrement la taille du lot en fonction de votre ratio actuel de gain/perte en supposant un résultat négatif, cela devrait au moins augmenter légèrement le résultat.

Exemple :

Prenez votre système aléatoire et supposez un ratio de gain de 47%.

Maintenant vous obtenez le modificateur par : 47/ActualWinningRage

Et la taille du lot serait de (47/ActualWinningRage)*lotsize.

 

Je viens de me réveiller et j'ai décidé d'essayer cette approche.

C'est une astuce grossière. Je pense que dans une certaine mesure, il poursuit ce qu'il sait déjà :). Le système de roulette a subi moins de pertes. Je pense donc que c'est une façon d'améliorer un système. Je vais aussi considérer cela comme une forme de progression négative. Le code de gestion de l'argent est ci-dessous, mais il n'est pas exempt de bogues non plus.

//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
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);}
        //~~~~~~~~~~~~~~~~~~~~~
    }
}
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

J'ai inclus les F Kelly et Optimal parce que j'avais déjà les statistiques pour les calculer. Il n'est jamais recommandé de les utiliser sur des échantillons de petite taille (<100). De plus, ils sont exprimés en fractions de banque par rapport au risque, donc vous devrez prendre votre (ma préférence) marge de compte * le k ou le f * votre_risk_appetite (0.5 habituellement). Ensuite, vous devez vous assurer que les Lots*Pip_Values*Stop_Loss<=Target, j'ai un exemple de cela dans l'un des codes ci-dessus.

En continuant, voici les résultats de la suggestion de Zzuegg. Je me demande, si cela peut transformer notre break-Even System-14 en un gagnant ?

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