请问黄忠长老,在WDL里如何对头寸调整编程

Discussion in 'Risk and Uncertainty' started by ztob123, Sep 6, 2004.

  1. 请问黄忠长老,在WDL里如何对头寸调整编程
    因为偶原来是用飞狐交易师进行编程的,用上PASCAL后也不太困难。但偶发现用PASCAL编头寸调整的程序很困难,而WDL提供的几个函数偶又不适应。
    长老能帮帮偶么?最好提供头寸调整编程的例子
    谢谢拉
     
  2. 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论坛有很多。
     
  3. 最简单的例子是:
    //买进100股。然后保存在SimuScript目录。
    SetPositionSizeShares(100);
     
  4. ZWS

    ZWS

    请问

    买进命令和卖出命令是否必须在同一个循环里面?
     
  5. 拉上来。