大家空谈的挺多,来点实际的。发一个资金管理的ts模板

Discussion in 'Risk and Uncertainty' started by rogerhylt, Aug 27, 2010.

  1. 这个来自国外的一个网站http://www.tsresearch.com/public/money_management/money_management1/

    这几篇讨论资金管理的文章不错,不错的是有tradestation 资金管理的模板,里面有常见的kelly larry公式 ,很容易就把你的策略代码带进去 看看效果:)


    {The Simplest System #3 with Money Management.

    Copyright (c) 2002 DT



    ********************************** ******************}

    Input: Price((H+L)*.5),

    PtUp(4.), PtDn(4.), {Max correction to change trend}

    MM_Model(2), {1 = % Risk Model; 2 = % Volatility Model;

    3 = Drawdown Model; 4 = Kelly Model; 5 = Williams' Model;

    6 = Fixed Ratio Model; 7= Market Money Model}

    MM(1), {% Risk parameter}

    MM_add(0), {% Risk for playing market money; 0 to disactivate}

    MaxVolat(100), {% Risk for playing market money; 100 to disactivate}

    MaxDD(20), {% Drawdown}

    InitCapital(100000); {Initial capital to trade}

    Vars: LL(99999), HH(0), Trend (0), Volat(TrueRange);

    Vars: MP(0), Risk(Range), Num (1), add_num(0), red_num(0), FRDelta(0), DD (0),

    Equity(InitCapital), TotalEquity(InitCapital), EqTop(InitCapital),

    AssuredProfit(0), HPositionProfit(0), Kelly(0);

    MP = MarketPosition;

    Volat = .5 * TrueRange + .5*Volat[1];

    if MP <= 0 then begin

    if Price < LL then LL = Price;

    if Price cross above LL*(1 + PtUp*.01) then begin

    Trend = 1;

    HH = Price;

    end;

    end;

    if MP >= 0 then begin

    if Price > HH then HH = Price;

    if Price cross below HH*(1 - PtDn*.01) then begin

    Trend = - 1;

    LL = Price;

    end;

    end;

    If trend = 1 then Risk = PtDn * .01 * close {+ Slippage};

    If trend = -1 then Risk = PtUp * .01 * close {+ Slippage};

    HPositionProfit = maxlist( OpenPositionProfit, HPositionProfit);

    AssuredProfit = HPositionProfit - Risk;

    Equity = InitCapital + NetProfit;

    TotalEquity = Equity + OpenPositionProfit;

    EqTop = MaxList(EqTop, TotalEquity);

    if MM_Model = 1 then { % Risk Model }

    Num = floor (MM * Equity *.01/Risk);

    if MM_Model = 2 then { % Volatility Model }

    Num = floor (MM * Equity *.01/ Volat / BigPointValue );

    if MM_Model = 3 then begin { Drawdown Model }

    Num = floor(MM * (Equity - (1 - MaxDD*.01) * EqTop) * .01 / Volat / BigPointValue);

    end;

    if MM_Model = 4 then begin { Kelly Model }

    If TotalTrades > 20 and GrossProfit > 0 then

    Kelly = NumWinTrades/TotalTrades * (1 - GrossLoss/GrossProfit)

    else

    Kelly = 0.1;

    if Kelly > .9 then Kelly = .9;

    Num = floor(MM * Kelly * Equity * .01 / Risk);

    {Print(Kelly);}

    end;

    if MM_Model = 5 then begin { Larry Williams' Model }

    value11 = MaxList(- LargestLosTrade / MaxList(CurrentContracts, 1) , Risk);

    Num = floor(MM * Equity *.01 / value11);

    end;

    if MM_Model = 6 then begin { Fixed Ratio Model }

    DD = MaxList(DD, (EqTop - TotalEquity)/MaxList(CurrentContracts, 1)) ; {Max Drawdown}

    if TotalTrades > 20 and DD > 0 then FRDelta = MM * DD *.01

    else

    FRDelta = MM * volat * BigPointValue * .01; {Delta}

    value12 = MaxList (Equity - .5*close*(close + FRDelta)/FRDelta, 0.25);

    Num = floor(SquareRoot (2*value12/FRDelta + .25) + .5);

    end;

    if MM_Model = 7 then { Playing the market money }

    num = floor((MM * (InitCapital + MinList(NetProfit, 0)) + MM_add * MaxList(NetProfit, 0)) * .01 / Volat / BigPointValue);

    { Entries}

    if trend = 1 and trend[1] <> 1 then buy("Trend.LE") num contracts at market;

    if trend = -1 and trend[1] <> - 1 then sell("Trend.SE") num contracts at market;

    add_num = floor( MM_add * AssuredProfit * .01/ Volat / BigPointValue); { Assured Profit Pyramiding }

    if add_num > 0 and OpenPositionProfit > Volat * BigPointValue then begin

    if Trend = 1 and MP = 1 then buy("Add.LE") add_num contracts at market;

    if Trend = -1 and MP = -1 then sell("Add.SE") add_num contracts at market;

    end;

    red_num = floor ((CurrentContracts * Volat * BigPointValue - MaxVolat * TotalEquity * .01)/ close);

    if red_num > 0 then begin

    if Trend = 1 and MP = 1 then exitlong("Red.LX") red_num contracts at market;

    if Trend = -1 and MP = -1 then exitshort("Red.SX") red_num contracts at market;

    end;

    if Num < 1 then Num = 1;
     
  2. 干货贴
    感谢
     
  3. 感谢,正等着呢。谢谢。
     
  4. mark,有用,谢谢了