欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 为什么这个在套利交易下不开仓?

   

欢迎使用金字塔普通技术服务论坛,您可以在相关区域发表技术支持贴。
我司技术服务人员将优先处理 VIP客服论坛 服务贴,普通区问题处理速度慢,请耐心等待。谢谢您对我们的支持与理解。    


  共有6411人关注过本帖树形打印复制链接

主题:为什么这个在套利交易下不开仓?

帅哥哟,离线,有人找我吗?
FireScript
  1楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2018/8/13 11:24:08    Post IP:180.169.30.6[显示全部帖子]

 套利必须在代码中指定到具体套利品种。即时你监控了的是这个套利品种,你也必须在代码里面指定到具体品种才行。
[此贴子已经被作者于2018/8/13 15:04:03编辑过]


命数如织,当如磐石。
 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  2楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2018/8/13 15:43:17    Post IP:180.169.30.6[显示全部帖子]

 之前回复有误,因此重新整理回复下。

软件里面建立的套利品种无法利用程序化去直接监控那个套利品种并交易。比如你品种a 和b构成的套利品种c,你无法直接对c品种程序化。 你只能在代码里面按照套利的操作去分别对a和b下单 ,比如a开多 b开空 相当于一个套利c的开多操作了。所以你原先的代码监控套利品种是无法下单的。

我简单参照你原先思路做一个范例:


//*****************************
账户:'1000';
套利品种1:'rb00';
套利品种2:'ag00';
//*****************************

JC:"rb00$CLOSE"-"ag00$CLOSE";


MA5:MA(JC,5);
MA10:MA(JC,10);

CONDBUY:=CROSS(MA5,MA10);
CONDSELL:=CROSS(MA10,MA5);

tbuyhd1:TBUYHOLDINGEX(账户,套利品种1,2);//品种1多头持仓
tsellhd1:TSellHOLDINGEX(账户,套利品种1,2);//品种1空头持仓

tbuyhd2:TBUYHOLDINGEX(账户,套利品种2,2);
tsellhd2:TsellHOLDINGEX(账户,套利品种2,2);



if CONDBUY  and tsellhd1>0 and tbuyhd1>0 then  //tsellhd1>0  tbuyhd1>0 分别 表示品种1有空头持仓,品种2有多头持仓 
BEGIN
tsellshort(1,0,Mkt,0,0,账户,套利品种2),ORDERQUEUE;
tsell(1,0,Mkt,0,0,账户,套利品种1),ORDERQUEUE;//这2个相当于套利的平空

tbuy(1,1,Mkt,0,0,账户,套利品种2),ORDERQUEUE;
tbuyshort(1,1,Mkt,0,0,账户,套利品种1),ORDERQUEUE; //这2个相当于套利开多
end

后续代码可以仿照这里完善下。


命数如织,当如磐石。
 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  3楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2018/8/14 8:38:59    Post IP:180.169.30.6[显示全部帖子]

以下是引用haizxj在2018/8/13 20:57:19的发言:
在监控系列,是不是选择ta000

而不是具体品种,因为具体品种是两个

监控2个具体品种中的任意一个就可以了。



命数如织,当如磐石。
 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  4楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2018/8/14 8:39:16    Post IP:180.169.30.6[显示全部帖子]

以下是引用haizxj在2018/8/13 21:38:27的发言:
 另外这个好像是图表模式,你們自帶的后臺程序并不是這樣
 是后台的,不是图表的。



命数如织,当如磐石。
 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  5楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2018/8/14 9:29:53    Post IP:180.169.30.6[显示全部帖子]

请注意 引号  "RB00$CLOSE" ,单引号是错误方式。
只是运行完成说明信号没有触发。


[此贴子已经被作者于2018/8/14 9:35:51编辑过]


命数如织,当如磐石。
 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  6楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2018/8/14 9:55:07    Post IP:180.169.30.6[显示全部帖子]

有差异往往只是时效导致的,数据都是一样但是引用过来时候无法保证一定能同步。

a2:"rb10$dynainfo(19)";
a3:"rb01%dynainfo(18)";

你上面这个
1.是 $ 不是 %号
2.dynainfo(18) 这种动态函数无法通过上面方式引用的。如果真要调用这个动态函数,因为需要指定品种因此建议考虑其他引用方式如stkind函数




命数如织,当如磐石。
 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  7楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2018/8/14 11:11:19    Post IP:180.169.30.6[显示全部帖子]

 如果你这个条件不好触发。 你最好调整下下单条件
我本地出于调试目的,修改了下单条件,用均价金叉死叉 不一定能保证触发
CONDBUY:=CROSS(MA5,MA10);
CONDSELL:=CROSS(MA10,MA5);

改成了

CONDBUY:=JC>300;
CONDSELL:=JC<300;

并且为了测试下面这段,我直接手工先下了一组套利单子,这样 保证tbuyhd1>0 and tsellhd1 能触发。
if CONDBUY  and tbuyhd1>0 and tsellhd1>0   then BEGIN

tsellshort(1,0,Mkt,0,0,'',stock2),ORDERQUEUE;
 tsell (1,0,Mkt,0,0,'',stock1),ORDERQUEUE;
tbuy(1,1,Mkt,0,0,'',stock1),ORDERQUEUE;
tbuyshort (1,1,Mkt,0,0,'',stock2),ORDERQUEUE;
end

我重新给你整理个案例吧。



命数如织,当如磐石。
 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  8楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2018/8/14 13:48:41    Post IP:180.169.30.6[显示全部帖子]

完整范例,本地已经测试。其中账号和品种等数据请自行替换下。

//*****************************
账户:'';//自行替换本地的测试账号
套利品种1:='rb00';
套利品种2:='ag00';
//*****************************

JC:"rb00$CLOSE"-"ag00$CLOSE";


MA5:MA(JC,5);
MA10:MA(JC,10);

CONDBUY:JC>702;//价差条件自行重新合理设置下
CONDSELL:jc<500;

tbuyhd1:TBUYHOLDINGEX(账户,套利品种1,2);
tsellhd1:TSellHOLDINGEX(账户,套利品种1,2);

tbuyhd2:TBUYHOLDINGEX(账户,套利品种2,2);
tsellhd2:TsellHOLDINGEX(账户,套利品种2,2);



if CONDBUY  and tsellhd1>0 and tbuyhd2>0 then  //tsellhd1>0  tbuyhd1>0 分别 表示品种1是空头,品种2是多头,相当于一个套利品种的空头 
BEGIN
tsellshort(1,0,Mkt,0,0,账户,套利品种1),ORDERQUEUE; //相当于套利的平空
tsell(1,0,Mkt,0,0,账户,套利品种2),ORDERQUEUE;

tbuy(1,1,Mkt,0,0,账户,套利品种1),ORDERQUEUE;//相当于套利开多
tbuyshort(1,1,Mkt,0,0,账户,套利品种2),ORDERQUEUE;  
end

if CONDSELL and tbuyhd1>0 and tsellhd2>0 then
BEGIN
tsellshort(1,0,Mkt,0,0,账户,套利品种2),ORDERQUEUE;
tsell(1,0,Mkt,0,0,账户,套利品种1),ORDERQUEUE;//相当于套利的平多

tbuyshort(1,1,Mkt,0,0,账户,套利品种1),ORDERQUEUE;
tbuy(1,1,Mkt,0,0,账户,套利品种2),ORDERQUEUE;//相当于套利开空
end


if   CONDBUY and  ((tbuyhd1=0 or tsellhd2=0) and  (tbuyhd2=0 or tsellhd1=0)) then
BEGIN
tbuy(1,1,Mkt,0,0,账户,套利品种1),ORDERQUEUE;//相当于套利开多
tbuyshort(1,1,Mkt,0,0,账户,套利品种2),ORDERQUEUE;
end

if CONDSELL and ((tbuyhd1=0 or tsellhd2=0) and  (tbuyhd2=0 or tsellhd1=0)) then
BEGIN
tbuyshort(1,1,Mkt,0,0,账户,套利品种1);
tbuy(1,1,Mkt,0,0,账户,套利品种2);//相当于套利开空
end



命数如织,当如磐石。
 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  9楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2018/8/15 15:04:47    Post IP:180.169.30.6[显示全部帖子]

本地测试直接用阴阳线测试了。 运行正常。 上面的套利代码对账号上的持仓很敏感,如果你手工干预持仓或者其他操作影响了持仓情况都是会影响到正常运行的,因为代码里面是通过持仓情况判断 套利的多或者空“持仓”情况的。你上面这个持仓按照代码运行的结果的话,是不应该出现的吧。 


命数如织,当如磐石。
 回到顶部