全部 智大领峰 TBQuant功能 TBL语言 TB开户 问答专区 高手圈 其他
套利交易OpenBarOpen信号闪烁
luoboren 分享到
2023-05-26 09:50

老师好,我做期货跨期套利。我的价差模型是用时序Open价计算得出的,所以我的开仓价也用Open价。我的策略写在OnBarOpen里面,下面是我的策略代码。按理说Openbaropen在每一根bar启动后执行一次,就能获取当根bar的Open价。我的价差模型diff= Data0.Open-1.11*Data1.Open;应该是在当根bar里面始终都不会变,也就是后面都不会闪烁。但是我在图表里看到diff值在当根bar开始出现时时一个值,很快值又变了,然后再一直保持不变,直到下一根bar又是这样。也就是每根bar我的价差diff都变了一次,这就发生了闪烁。请问这是什么原因。

OnInit()

{

SubscribeBar(\"p9888.DCE\",\"1m\",20220101,0);//棕榈主力

SubscribeBar(\"p9777.DCE\",\"1m\",20220101,0);//棕榈次主力

Range[0:DataCount-1]

{

SetOrderPriceOffset(0);

SetSlippage(Enum_Rate_PointPerHand,0);

AddDataFlag(Enum_Data_AutoSwapPosition());

AddDataFlag(Enum_Data_IgnoreSwapSignalCalc());

SetOrderMap2MainSymbol(); //设置委托映射到主力

SetOrderMap2SecondMainSymbol();//设置委托映射到次主力

}

}

//Bar更新事件函数,参数indexs表示变化的数据源图层ID数组

OnBarOpen(ArrayRef<Integer> indexs)

{

If(CurrentBar<Boll) Return;

diff    = Data0.Open-1.11*Data1.Open;

PlotNumeric(\"diff\",diff,0,White);

mb      = AverageFC(diff,Boll);

PlotNumeric(\"mb\",mb,0,Yellow);

dev     = StandardDev(diff,Boll,1);

up      = mb+2*dev;

PlotNumeric(\"up\",up,0,Green);

closeup = mb+1*dev;

PlotNumeric(\"closeup\",closeup,0,Blue);

closedn = mb-1*dev;

PlotNumeric(\"closedn\",closedn,0,Blue);

dn      = mb-2*dev;

PlotNumeric(\"dn\",dn,0,Green);

//做空价差

If(diff>=up And diff<stopup And diff[1]<up[1] And Data0.MarketPosition==0 And Data1.MarketPosition==0)

{

Data0.SellShort(d0_size,Open);

Data1.Buy(d1_size,Open);

}

//平仓做空价差

If(diff<=closeup And diff[1]>closeup[1] And Data0.MarketPosition<0 And Data1.MarketPosition>0)

{

Data0.BuyToCover(d0_size,Open);

Data1.Sell(d1_size,Open);

}

//做多价差

If(diff<=dn And diff>stopdn And diff[1]>dn[1] And Data0.MarketPosition==0 And Data1.MarketPosition==0)

{

Data0.Buy(d0_size,Open);

Data1.SellShort(d1_size,Open);

}

//平仓做多价差

If(diff>=closedn And diff[1]<closedn[1] And Data0.MarketPosition>0 And Data1.MarketPosition<0)

{

Data0.Sell(d0_size,Open);

Data1.BuyToCover(d1_size,Open);

}

}

luoboren

我找到问题原因了,两个图层对应的每一个新bar所接收的第一个tick时间不一致的,有先有后,导致价差diff    = Data0.Open-1.11*Data1.Open;出现闪烁。但是该怎么去控制呢,等两个图层都接完第一个tick之后在去交易?

2023-05-26 15:41
shaoweiok

需要做一下两个图层的同步延时控制,避免两边第一个tick触发不一致的问题,多图层使用open价经常会遇见此种问题。

2023-05-28 14:14
您未登录,请先 登录注册 后发表评论
顶部