数学が得意な方に質問です

 

もし価格の動きがランダムウォークに従うとしたら(みんながそう思っていたらこのフォーラムは空っぽになってしまう)、ルーレットと同じ確率を持つためにトレーダーは何ピップを獲得/損失する必要があるでしょうか?この場合、36の数字と1つの0を持つヨーロピアンホイールを想定します。賭け金は、オッズ対イーブンのイーブンマネーベットで、1対1の配当とします。明らかに、0/緑に当たった場合は負けになります。つまり、基本的に0またはグリーンはスプレッドの役割を果たします。そして、そのスプレッドは1ピップであると仮定する。

私の考えでは、1-Pipのテイクプロフィットを探して いる場合、1-Pipのストップロスを持つことにしています。また、価格がどちらかに偏っていないと仮定すると、私はルーレットよりはるかに悪いオッズで遊んでいることになる。10ピップのストップロスと10ピップのテイクプロフィットを比べても、トレードが有利になるとは思えません。先日、なんとか頭の中で答えを導き出したのですが、今日になって忘れてしまいました。)

私はテスト/シミュレートするための仮説を持っているので、誰かが私を助けてください。ありがとうございます。

 

私は統計が苦手なのですが、スプレッドとホイールの0を同列に扱うことはできないと思います。 スプレッドは勝ち負けに関係なく支払われるものです。 ホイールの0は、赤か黒をプレイした場合、勝つ確率が50%未満であることを意味します。

スプレッドの影響で実質勝率が48.65%になるのはどんな取引か、ということでしょう。 もし、あなたのトレードが20ピップでスプレッドが1ピップであれば、あなたが求めているものが得られると思います ... リスク = 21 リワード 20 ... 私は思う、しかし、私を引用しないでください;-)

 

私はそれが等しくすることができると信じているので、あなたが異なる考えとそれが私が答えようとしている主要な質問の一つであることは素晴らしいです。私は知っているすべてのドルには、ルーレットで賭けるの期待損失は、あなたの勝率と50/50の比率の違いに相当している。たとえば、0と緑のホイールがない場合は、長期的に均等なゲームをプレイすることになります。しかし、勝率が48.65%しかない場合、100ドル賭けるごとに1.35ドルの損失が発生することになります。

スプレッドとの唯一の違いは......スプレッドでは、損失か勝利かに関係なく、取引するたびにスプレッドに支払わなければならないことだ。

次のステップは、いくつかのシミュレーションを行うことだ。最初は20pipsのストップロスと20pipsのテイクプロフィットを探すランダムトレードを 使います(もちろん1pipsのスプレッドは含まないので、合計損失は21となり、うまくいけば私が探している確率になります)。もちろん、このテストでは、より多くのトレードやサンプルがあればあるほど良いのですが。うーん、私は誰もがそれがルーレットと比較して同様の結果を与えるつもりはないと思うのだろうか?

 
ubzen: フムフム、ルーレットと比べて同じような結果が出ないと思う人はいないかな?
そうだね、トレーディングには賭けに反することがたくさん隠されているからね。例えば、ルーレットの箱が動かないように、トレードをすることは動く 目標であり、それが取られないかもしれない。トレーディングにはシミュレーションできないことがたくさんありますが、そのどれもが利益に反することなのです。
 

よし、みんなデータができたぞ。

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

19.9倍の利益と損失があることは確かです。しかし、利益率の高さがそれを物語っています。

 

ルーレットよりさらに悪いことが判明したが、それは標準誤差やクッションの統計が必要なためである。他の人がやって、少し高い値や低い値が出るかもしれませんが、数学的な期待 値はルーレットと同じだと思います。もしこれが、このことを知らないトレーダーを怖がらせないのであれば、他に何もないでしょう。

ともかく、話を進めよう。さっきの話の次の段階は、mql4で乱数のシミュレーションをして、0から36の間のどこかに落ちたら、偶数なら1ドル、奇数か0なら1ドル、合計に足すというものだったのですが、それは時間の無駄です。もし知らなくても、オンラインで調べればいいだけです。だから、そのステップは省略する。

いずれにせよ、私たちはトレーダーですからね。相場がランダムだとは思っていないし、一定の確率で相場を予測することができると信じている。ですから、少なくとも私にとっての次のステップは、ランダムなエントリーに対して予測方法を積み重ねることです。しかし、次の質問ですが、トレーディングシステムをこれと比較するのはどうでしょうか。トレーディングで使用するあらゆるフィルターを考慮すると、これほど多くのサンプル数を確保することはできません。

 

さて、私の上記の質問に対する提案をまだ待っているところです。今回は、2つのシステムを提案します。一つは、http://forex-strategies-revealed.com/simple/simple-trading-with-daily-range のシステム14と呼ぶことにします。もうひとつは、http://www.blackjackforumonline.com/content/Betting_Systems_Oscars_Blackjack_System.htm の Oscar's Grind です。

システム14について少し説明すると、このサイトのアドバンスセクションの中で最も反響のあったトピックでした。コードも簡単そうだし、多くの投稿者が優勝候補と評価しています。

OscarGrindについて少し。アドバンテージプレイヤーは、プログレッションという言葉を聞くのも嫌がります。しかし、私が尊敬している作者からなら(彼はそれが確実だとは言っていませんが)、この文脈の中でそれをやってみてもいいと思います。

それでは、両システムについて、私なりの解釈でコーディングし、投稿します。System-14の落とし穴は、20PipのSL-TPを無理矢理使うことでしょう。OscarGrindの落とし穴は、Winの後、1ユニットだけを探すSize-Ordersの方法です。でも、もうすぐ儲かるシステムが確定するかもしれないので、皆さん祈っていてください。

 

さて、これがSystem_14です。ほぼブレイクイーブンなので、ランダムと比べると悪くはないのですが、まだまだ改善の余地はたくさんあります。とにかく、私が書いたばかりのコードなので、エラーフリーではないかもしれません。

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

さてFXのオスカーグラインドは大失敗です。ここで発見されたゴリゴリはないんだろうなぁ。しかし、指摘すべきことがあります。もしあなたがランダムシステムをトレードしていて、スプレッドが1-3で、テイクプロフィットが<60Pipsの間で探しているなら、カジノのルーレットに当たった方が良いでしょうね。もしあなたがプログレッション(マーチンゲールまたはその他)を使っているなら、特に悪い予測を持っているなら、あなたが破滅するのは時間の問題です。より強力な予測は、あなたに有利なオッズを得るための最良の方法かもしれません。

繰り返しますが、テスターによるコーディングです。また、ライブ口座では使用しないでください。

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

 

すでにプロトタイプを持っているので、すぐに何かをテストすることができますか?

負の結果を仮定して、あなたの現在の勝敗率に応じて非常にわずかにロットサイズを調整する場合は、少なくとも結果がわずかに増加するはずです。

例。

あなたのランダムなシステムを取り、47%の勝率を仮定します。

今、あなたはによって修飾を取得します。47/ActualWinningRage

そして、ロットサイズは、(47/ActualWinningRage)*ロットサイズになります。

 

今、目が覚めて、この方法を試してみることにしました。

確かに粗雑なトリックです。私は、ある程度、それがすでに知っていることを追いかけていると思います。)ルーレット・システムの損失は少なくなった。だから、これはシステムを改良する一つの方法だと思う。また、これはネガティブプログレッションの一形態と考えることにします。マネーマネジメントのコードは以下の通り。

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

ケリーとオプティマルFを入れたのは、すでに計算するStatsがあったからです。サンプル数が100未満でこれらを使うのは決してお勧めしません。また、これらはリスクに対する銀行の割合で表示されるので、あなたは(私の好みで)口座マージン* kまたはf* your_risk_appetite(通常0.5)を取る必要があります。それから、Lots*Pip_Values*Stop_Loss<=Targetを確認する必要があります。

Zzueggの提案の結果です。これで、損益分岐点システム14を勝者に変えることができるかな?

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
理由: