首页 文章

防止Amibroker在相同的符号中退出同一天

提问于
浏览 1983
0

我正在尝试创建一个基于股票/股票投资组合的系统,如果满足条件,该系统将在开盘时进入,并可能在收盘时的同一天退出 . 我有这个基本工作 . 我无法做到的是,我希望我的股票系统在任何时候都只能在公司中拥有一个开放的位置 .

似乎如果在同一天同时存在退出和进入,则amibroker回测试允许在开放时购买同一公司,如果同一公司在同一天有卖单 . 这是一个例子:

enter image description here

在第1点注意 - 我们将在17日开盘进入第2点,我们当天收到卖出信号,因此我们应该在24日收盘时退出 . 但是在第3点 - 我们在同一天为同一家公司提供了一个条目 .

要明确 - 我想在同一天允许多个条目 - 这是有效的 . 我想弄清楚的唯一一件事就是阻止后测者在退出的同一天进入SAME公司,因为系统规则,我们将有一天在1家公司中拥有2个职位 .

以下是复制此示例的示例代码:

SetOption("AllowSameBarExit", True );  
SetOption("SettlementDelay", 1 );

Buy = C > MA(C,10);
Sell = C < MA(C,10) OR C > O;

// trade on todays open
SetTradeDelays( 0, 0, 0, 0 );
BuyPrice = Open; 
SellPrice = Close;

SetPositionSize( 20, spsPercentOfEquity );

我已阅读并重新阅读有关投资组合时间的页面:here但我仍然无法弄清楚如何在退出的同一天阻止同一公司的条目 . 任何帮助将不胜感激!

UPDATE 在SELL条件下使用OR C> O似乎正在影响这一点 . 如果我删除OR C> O部分,我会得到正确的行为 . 它将在下一天进入 . 现在我想知道如何使用该退出而不回复到相同的酒吧同一公司进入和退出...

1 回答

  • 0

    感谢Amibroker的Tomasz发布以下解决方案:

    SetOption("AllowSameBarExit", True );
    
    BuyPrice = Open;
    SellPrice = Close;
    
    Buy = Ref( Close > MA( Close, 10 ), -1 );
    Sell =  Close > Open OR Close < MA( Close,10);
    
    // removing buys you don't want
    intrade = False;
    for( i = 0; i < BarCount; i++ )
    {
        if( NOT intrade )
        {
            if( Buy[ i ] ) 
            {
                intrade = True;
    
                // same bar sell
                if( Sell[ i ] ) intrade = False;
            }
        }
        else
        {
            if( Sell[ i ] ) 
            {
                intrade = False;
                Buy[ i ] = False; // remove buy if exited this bar
            }
        }
    }
    

    你可以找到:a detailed discussion here

相关问题