수학을 잘하는 사람을 위한 질문

 

가격 변동이 랜덤 워크를 따른다면(그리고 모든 사람이 그렇다고 생각한다면 이 포럼은 비어 있을 것입니다), 룰렛과 동일한 확률을 가지기 위해 트레이더는 얼마나 많은 핍을 포착/잃어야 할까요? 이 경우에는 36개의 숫자와 하나의 0이 있는 유럽식 휠을 가정합니다. 이 베팅은 1:1 지불금인 Odds vs Even의 Even Money 베팅입니다. 분명히 당신이 0/그린에 착륙하면 당신은 집니다. 따라서 기본적으로 0 또는 녹색이 스프레드 역할을 합니다. 그리고 우리는 스프레드를 1-Pip으로 가정합니다.

지금까지 내 생각은 내가 1-Pip을 찾고 있다면 Profit을 취하고 1-Pip 손절매가 있다는 것입니다. 다시 가격이 갈 쪽에 편향이 없다고 가정하면, 나는 룰렛보다 훨씬 더 나쁜 확률로 게임을 할 것입니다. 나는 10핍 손절매 대 10핍 이익 실현을 찾는 것이 거래를 더 나은 옵션으로 만든다고 생각하지 않습니다. 나는 그럭저럭 요전날 내 머리 속에서 답을 알아낼 수 있었지만 오늘은 잊어버렸습니다. + 어쨌든 내 수학에 확신이 없었습니다. :).

테스트/시뮬레이션할 가설이 있으므로 누군가 저를 도와주세요. 감사해요.

 

나는 통계가 좋지 않다. . . 하지만 스프레드와 휠의 0을 동일시할 수는 없다고 생각합니다. 승패에 관계없이 스프레드가 지급됩니다. 휠의 0은 빨간색이나 검은색으로 플레이할 경우 이길 확률이 50% 미만임을 의미합니다. . 18:19 또는 48.65%

나는 당신이 찾고있는 것이 어떤 종류의 거래가 스프레드의 영향으로 인해 48.65 %의 유효 승률을 줄 것인가라고 생각합니다. 나는 당신의 거래가 20핍이고 스프레드가 1핍이라면 당신이 추구하는 바를 줄 것이라고 생각합니다. . . 위험 = 21 보상 20 . . . 제 생각에는 인용하지 마세요 ;-)

 

당신이 다르게 생각하고 있다는 것이 기쁘고 그것이 동등할 수 있다고 믿기 때문에 내가 대답하려고 하는 주요 질문 중 하나입니다. 룰렛에 베팅하는 1달러마다 승률과 50/50 비율의 차이에 해당하는 예상 손실이 있다는 것을 알고 있습니다. 예를 들어 휠에 0/그린이 없으면 장기적으로 균등한 게임을 하게 됩니다. 그러나 48.65%의 확률로 베팅한 $100당 $1.35와 같은 일정한 손실을 보게 됩니다.

이것과 스프레드의 유일한 차이점은 .... 스프레드를 사용하면 투표율이 손실 또는 승리 여부에 관계없이 거래할 때마다 지불해야 합니다.

이제 다음 단계는 시뮬레이션을 실행하는 것입니다. 첫 번째는 20핍 손절매와 20핍 이익실현을 찾는 무작위 거래 를 사용하는 것입니다. 분명히 이 테스트 내에서 더 많은 거래/샘플이 더 좋습니다. 흠, 룰렛과 비교했을 때 비슷한 결과가 나오지 않을 것이라고 생각하는 사람이 있을까?

 
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배의 이익과 손실이 있음을 확신합니다. 그러나 수익성 있는 거래 %는 그 자체로 말합니다.

 

그것은 룰렛보다 훨씬 더 나쁜 것으로 밝혀졌지만 표준 오류 또는 쿠션 통계가 필요한 이유 때문입니다. 다른 사람이 실행하여 약간 높거나 낮은 값을 얻을 수 있지만 수학적 기대치 는 룰렛과 동일하다고 생각합니다. 이봐, 이것이 이것을 알지 못하는 상인의 shinisk를 놀라게하지 않는다면 다른 것은 없을 것입니다.

어쨌든 계속 진행합니다. 내가 이전에 가르쳤을 때 다음 논리적 단계는 난수가 0-36 사이에 있는지 확인하기 위해 mql4 시뮬레이션을 수행하고 짝수이면 누적 합계에 1$를 추가하거나($100,000에서 시작) 1을 빼는 것입니다. $는 홀수이거나 0이면 시간 낭비일 것입니다. 모두와 그들의 엄마가 룰렛의 확률을 알고 있기 때문입니다. 그렇지 않은 경우 온라인에서 검색할 수 있습니다. 따라서 해당 단계를 건너뛰겠습니다.

그러나 어쨌든, 우리는 상인 맞아요, lol. 우리는 시장이 무작위라고 믿지 않으며 특정 성공 확률로 시장을 예측할 수 있다고 믿습니다. 따라서 적어도 나에게 바로 다음 단계는 예측 방법과 임의 항목을 누적하는 것입니다. 그러나 다음 질문은 거래에 사용하는 경향이 있는 모든 필터를 고려할 때 해당 수의 샘플 근처에 아무 곳도 없을 것이라는 점을 고려할 때 거래 시스템을 이것과 어떻게 비교할 수 있습니까?

 

좋아, 나는 여전히 위의 질문에 대한 제안을 기다리고 있습니다. 주로 2개의 시스템을 제안할 예정입니다. 그 중 하나는 http://forex-strategies-revealed.com/simple/simple-trading-with-daily-range에서 System 14라고 부를 것입니다. 그리고 다른 하나는 http://www.blackjackforumonline.com/content/Betting_Systems_Oscars_Blackjack_System.htm에서 Oscar's Grind라고 부를 것입니다.

System 14에 대한 몇 마디: 내가 찾을 수 있는 사이트의 고급 섹션 내에서 가장 반응이 좋은 주제였습니다. 코딩하기가 매우 간단해 보이며 많은 포스터가 이를 승자로 인정합니다.

OscarGrind에 대한 몇 마디: Advantage 플레이어는 진행이라는 단어를 듣는 것조차 좋아하지 않습니다. 그러나 내가 존경하는 작가(그는 그것이 확실하다고 말하지는 않음)에게서 왔으며 이 맥락에서 기꺼이 시도해 볼 것입니다.

두 시스템에 대한 해석을 코딩하고 게시하겠습니다. 여기서 System-14의 함정은 아마도 20-Pip SL-TP를 사용하도록 강제할 것이라는 사실일 것입니다. OscarGrind의 함정은 승리 후 하나의 단위만 찾기 위해 크기 주문을 하는 방법입니다. 그러나 당신의 손가락을 교차 유지, 수익성있는 시스템은 곧 확인 될 수 있습니다.

 

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

Forex의 Oscars Grind는 완전히 실패했습니다. 여기에서 발견된 성배는 없는 것 같아요. 다만, 지적할 것이 있다. 랜덤 시스템을 거래하고 스프레드가 1-3이고 <60핍 사이에서 이익을 얻으려면 카지노 룰렛을 치는 것이 좋습니다. 진행 상황(martingale 또는 기타)을 사용하는 경우, 특히 예측이 잘못된 경우에는 망할 때까지 시간 문제일 뿐입니다. 더 강력한 예측이 승률을 유리하게 만드는 가장 좋은 방법일 수 있습니다.

다시, 테스터 코딩. 오류가 포함될 수 있으며 Live 계정에서 이러한 오류를 사용하지 마십시오.

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

그리고 lotsize는 (47/ActualWinningRage)*lotsize가 됩니다.

 

방금 일어나서 이 접근 방식을 시도하기로 결정했습니다.

참으로 조잡한 속임수다. 나는 그것이 이미 알고 있는 것을 쫓고 있다고 생각합니다. :). 룰렛 시스템은 고통 없이 손실을 입었습니다. 그래서 나는 그것이 시스템을 개선하는 한 가지 방법이라고 생각합니다. 나는 또한 이것을 부정적인 진행의 한 형태로 고려할 것입니다. 자금 관리 코드는 아래에 있으며 버그가 없습니다.

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

나는 이미 Stats를 계산할 수 있었기 때문에 Kelly와 Optimal F를 포함했습니다. 작은 샘플 크기 imo <100에서는 사용하지 않는 것이 좋습니다. 또한 그들은 위험을 감수할 은행의 분수에 속하므로 귀하의 (내 선호) 계정 마진 * k 또는 f * your_risk_appetite(보통 0.5)를 취해야 합니다. 그런 다음 lot*Pip_Values*Stop_Loss<=Target을 확인해야 합니다. 위의 코드 중 하나에 이에 대한 예가 있습니다.

다음은 Zzuegg의 제안에 대한 결과입니다. 그것이 우리의 손익분기점인 System-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
사유: