防止Amibroker在退出当天以同一符号进入

时间:2018-07-14 00:23:24

标签: amibroker

我正在尝试创建一个基于股票/股票投资组合的系统,如果满足条件,该系统将在开市时进入,并可能在闭市当天退出。我有这个基本的工作。我无法解决的问题是,我希望我的股票系统在任何时候都只能在公司中拥有1个空缺职位。

如果同一天同时有退出和进入,似乎amibroker回测允许同一家公司在同一天开卖,从而允许同一家公司公开购买。这是一个示例:

enter image description here

第1点的通知-我们将在17日的公开赛中进入 在第二点,我们在当天收到卖出信号,因此我们应该在24日的收盘价处退出。 但是,在第3点-我们在同一天有同一家公司的条目。

要明确-我想允许同一天多次输入-这正在起作用。我唯一想弄清楚的是,要防止回测员在退出的同一天进入同一公司,因为由于系统规则的原因,我们有一天要在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,但我仍然想不出如何在退出当天阻止同一家公司进入。 任何帮助将不胜感激!

更新 看来在SELL条件下使用OR C> O会影响这一点。如果删除OR C> O部分,则会得到正确的行为。它在第二天进入。现在我想知道如何使用该出口,而又不还原到同一公司的同一条出口。

1 个答案:

答案 0 :(得分: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