全部 智大领峰 TBQuant功能 TBL语言 TB开户 问答专区 高手圈 其他
已解决
我的套利策略,2个图层怎么发单不一致,求助老师
well989 分享到
2022-01-12 22:17

我写的这个套利策略,其他地方都还好,就是这个减仓部分出了问题,百思不得其解,想向各位老师请教

Events
 OnInit()
 {
 layers[0]=SubscribeBar(“pp888.DCE”, "30m",  20211101.0930);
 layers[1]=SubscribeBar(“MA888.CZCE”, "30m",  20211101.0930);
 }
OnBar(ArrayRef<Integer> indexs)
{
 //买多部分
 //开仓1
If(k1==0 and jiacha<bz-db1)
{data0.buy(lots1,data0.open);
data1.SellShort(lots1,data1.open);Commentary("开仓1");
lotsj=lots1;k1=1;Return;
  }
//加仓2
If(k1==1 and jiacha<bz-2*db1)
{data0.buy(2*lots1,data0.open);
data1.SellShort(2*lots1,data1.open);Commentary("加仓2");
lotsj=lots1*2;k1=2;Return;
  }    
//加仓3
If(k1==2 and jiacha<bz-3*db1)
{data0.buy(3*lots1,data0.open);
data1.SellShort(3*lots1,data1.open);Commentary("加仓3");
lotsj=lots1*3;k1=3;Return;
  }  
//分批减仓        
If(k1>0 and  jiacha>lowestjc)
  {
  data0.Sell(lotsj,data0.open);
  data1.BuyToCover(lotsj,data1.open);
  Commentary(" 减仓");
  k1=k1-1;lotsj=lotsj-1;Return;
  }
  
 }

问题如下图

 

把图放大

kyover

注意 变量是分图层的 你这个data1.sell里的lotsj 是data1.lotsj,而你只对data0.lotsj作了赋值,data1.lotsj应该是0,表示全平的意思

2022-01-13 09:22
well989

可是为什么前面加仓的时候又能保持一致呢?

 

2022-01-13 18:01
kyover
@well989

开仓语句和平仓语句的手数 0 表示不同意思

开仓语句手数0 执行的是最少开一手的操作

平仓语句手数0 执行的是全平

这个在函数说明里应该都是有提到的

2022-01-14 10:03
well989
@kyover

这个我知道啊,可是我增加了一个变量也不行啊,2个变量分别用在2个图层的开仓和平仓代码上,也没解决问题

2022-01-14 12:10
kyover
@well989

函数如果带有图层前缀 函数内的参数变量默认也用的是该图层的

比如 data1.buy(lots,price)

这里的lots和price虽然没有带图层前缀,但是其实等效于于data1.lots和data1.price

而你如果之前在其他普通结构里对这个lots和price变量进行赋值的时候 只是简单的用lots = ...来处理 ,那么这里的lots等效于data0.lots

data0.lots 和data1.lots是不同的两个容器

我以为之前已经看明白了

2022-01-14 13:53
well989
@kyover

那要怎么样对两个图层的变量分别进行定义和使用呢?

2022-01-14 18:19
cai446449
@well989

上面代码老师的解答我觉得挺明白的了,变量在不同图层要考虑清楚,也可以尝试在代码中输出一下,在对比代码老师的文字可能会更清楚一些

2022-01-14 21:27
well989
@cai446449

 

已经搞掂了,非常感谢两位老师,@kyover , @cai446449

2022-01-14 23:58
well989

那我改如何处理呢?增加多一个变量?

2022-01-14 08:03
well989

增加多一个变量也不行哦,跪求各位老师帮忙

2022-01-14 09:20
luyuan126

盈利的为什么不加?

2022-03-26 05:36
您未登录,请先 登录注册 后发表评论
顶部