请问黄忠长老,在WDL里如何对头寸调整编程 因为偶原来是用飞狐交易师进行编程的,用上PASCAL后也不太困难。但偶发现用PASCAL编头寸调整的程序很困难,而WDL提供的几个函数偶又不适应。 长老能帮帮偶么?最好提供头寸调整编程的例子 谢谢拉
http://www.hylt.net/viewtopic.php?t=4888 http://www.wealthlab.de/articles-tutorials-SimuScriptBasic.htm http://www.wld3.com/tutorials/MMPortfolio.swf
WLD内置的头寸调整法则。需要另外加上交易信号或策略。 //1、Max Entries per Day const NUM = 2; var p, Count: integer; Count := 0; for p := PositionCount - 1 downto 0 do if PositionActive( p ) then if PositionEntryBar( p ) = PositionEntryBar( #Current ) then begin Inc( Count ); if Count = 2 then Break; end; if Count = 2 then SetPositionSizeShares( 0 ) else SetPositionSizeFixed( 5000 ); 2、//Max Risk Pct with Round Lots const pctRisk = 0.02; // Max Risk Percent, e.g., 0.02 risks 2% of total equity const EquityLimit = 0.15; // Equity size constraint, e.g., 0.15 constrains final size to 15% of equity const LotSize = 10; // Round lots of 10 shares/contracts var fEquity, CashSize, fStop, fBasis, fRisk, MaxSize: float; var FinalSize: integer; fStop := GetPositionRiskStop( #Current ); fBasis := PositionBasisPrice( #Current ); fRisk := ( fBasis - fStop ) * GetPointValue; { Inhibit trade entry if the basis already exceeds the stop price } if PositionLong( #Current ) then begin if fRisk < 0 then begin SetPositionSizeShares( 0 ); exit; end; end else if fRisk > 0 then begin SetPositionSizeShares( 0 ); exit; end; fEquity := Equity( BarCount - 1); FinalSize:= Trunc(( fEquity * pctRisk ) / Abs( fRisk ) ); CashSize:= FinalSize * fBasis; MaxSize := EquityLimit * fEquity; { If cash is greater than MaxSize, reduce position to cash position } if CashSize > MaxSize then FinalSize := Trunc( MaxSize / fBasis ); { Create Round Lots per LotSize. You may wish to use Round instead of Trunc to round up sizes (adds risk) } FinalSize := Trunc( FinalSize / LotSize ) * LotSize; SetPositionSizeShares( FinalSize ); 3、..... { SimuScript for increasing Percent Risk with growing Equity } var fPctRisk, fEquity, CashSize: float; var fStop, Factor,fBasis: float; var FinalSize: integer; { These settings will increase the Risk by 0.2% for every $10,000 of equity growth } const IncreaseRisk = 10000; const RiskIncrement = 0.002; const MinRiskCash = 75000; const MinRisk = 0.005; // Risk at least 0.5% on each trade const MaxRisk = 0.06; // Don't risk more than 6% on a single trade { Store values in variables for easy reference } fEquity := Equity( BarCount - 1); fStop := GetPositionRiskStop( #Current ); fBasis := PositionBasisPrice( #Current ); if fEquity < MinRiskCash then fPctRisk := MinRisk else begin Factor := (fEquity - MinRiskCash) Div IncreaseRisk; fPctRisk := MinRisk + (RiskIncrement * Factor); if fPctRisk > MaxRisk then fPctRisk := MaxRisk; end; { Calculate the size in shares, and then in cash } FinalSize := Trunc(( fEquity * fPctRisk ) / Abs( fBasis - fStop )); CashSize := FinalSize * fBasis; { If the position size is greater than the account equity, allow the trade to take place if fully in cash } if CashSize > fEquity then FinalSize := Trunc( fEquity / fBasis ); SetPositionSizeShares( FinalSize ); 等在SimuScript目录和WLD论坛有很多。
出处: Max Entries per Day http://www.wealth-lab.com/cgi-bin/WealthLab.DLL/libraryview?item=239 Graded Combo %Wager%Winners%Equity http://www.wealth-lab.com/cgi-bin/WealthLab.DLL/libraryview?item=32 Pct Winners Position Sizing http://www.wealth-lab.com/cgi-bin/WealthLab.DLL/libraryview?item=31 Graded Equity-Based Percentage http://www.wealth-lab.com/cgi-bin/WealthLab.DLL/libraryview?item=21 Elder Money Management http://www.wealth-lab.com/cgi-bin/WealthLab.DLL/libraryview?item=330