我正在尝试创建一个基于股票/股票投资组合的系统,如果满足条件,该系统将在开市时进入,并可能在闭市当天退出。我有这个基本的工作。我无法解决的问题是,我希望我的股票系统在任何时候都只能在公司中拥有1个空缺职位。
如果同一天同时有退出和进入,似乎amibroker回测允许同一家公司在同一天开卖,从而允许同一家公司公开购买。这是一个示例:
第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部分,则会得到正确的行为。它在第二天进入。现在我想知道如何使用该出口,而又不还原到同一公司的同一条出口。
答案 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
}
}
}