0

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

似乎如果在同一天同时存在退出和进入,amibroker 回测允许同一家公司在公开交易中被购买,如果同一家公司在同一天有卖单。这是一个例子:

在此处输入图像描述

注意第 1 点 - 我们将在 17 日开盘时入场 在第 2 点,我们当天收到卖出信号,因此我们应该在 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 );

我已经阅读并重新阅读了有关投资组合时间的页面:这里但我仍然无法弄清楚如何防止同一家公司在退出的同一天进入。任何帮助将不胜感激!

更新 似乎在 SELL 条件中使用 OR C > O 会影响这一点。如果我删除 OR C > O 部分,我会得到正确的行为。它在第二天进入。现在我想知道如何使用那个退出而不回到同一个酒吧同一个公司的进入和退出......

4

1 回答 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
        }
    }
}  

你可以找到:一个详细的讨论here

于 2018-07-16T21:34:48.120 回答