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


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

   

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


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

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

帅哥哟,离线,有人找我吗?
FireScript
  21楼 | 信息 | 搜索 | 邮箱 | 主页 | 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

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



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


加好友 发短信
等级:小飞侠 帖子:1781 积分:0 威望:0 精华:0 注册:2013/6/11 20:05:24
  发帖心情 Post By:2018/8/14 11:45:20    Post IP:222.64.250.88[只看该作者]

 stock1:="rb1810";
stock2:="rb1901";


//价差
JC:="rb10$close"-"rb01$close";
A1:jc;
//a2:STKINDI("rb10$dynainfo(19)";
a3:"rb01$dynainfo(18)";
a4:stock1;
//a1:STKINDI('rb1810$close';


//条件判断
MA5:MA(jc,5);
MA10:MA(jc,10);


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

CONDBUY:=JC>192;
CONDSELL:=JC<190;
tbuyhd1:tbuyholdingex('',stock1,1);
tsellhd1:tsellholdingex('',stock1,2);

tbuyhd2:tbuyholdingex('',stock2,1);
tsellhd2:tsellholdingex('',stock2,2);

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

if CONDSELL and  tbuyhd2>0 and tsellhd2>0 then BEGIN
tsellshort(1,0,Mkt,0,0,'',stock1),ORDERQUEUE;
 tsell (1,0,Mkt,0,0,'',stock2),ORDERQUEUE;
 tbuy(1,1,Mkt,0,0,'',stock2),ORDERQUEUE;
  tbuyshort (1,1,Mkt,0,0,'',stock1),ORDERQUEUE;
 end
 

if   CONDBUY and THOLDING=0 then BEGIN

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

if CONDSELL and THOLDING=0 then BEGIN

tbuy(1,1,Mkt,0,0,'',stock2),ORDERQUEUE;
 tbuyshort (1,1,Mkt,0,0,'',stock1),ORDERQUEUE;
 end
---------
我是用螺做试验
结果还是没有开平

 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  23楼 | 信息 | 搜索 | 邮箱 | 主页 | 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



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


加好友 发短信
等级:小飞侠 帖子:1781 积分:0 威望:0 精华:0 注册:2013/6/11 20:05:24
  发帖心情 Post By:2018/8/15 14:11:08    Post IP:222.64.250.88[只看该作者]

 stock1:='rb10';
stock2:='rb01';


//价差
JC:=("rb10$close"-"rb01$close")+1;

CONDBUY:=JC>192;
CONDSELL:=JC<188;
tbuyhd1:tbuyholdingex('',stock1,2);
tsellhd1:tsellholdingex('',stock1,2);

tbuyhd2:tbuyholdingex('',stock2,2);
tsellhd2:tsellholdingex('',stock2,2);

if CONDBUY  and tbuyhd2>0 and tsellhd1>0   then
BEGIN
 tsell (1,0,Mkt,0,0,'',stock1),ORDERQUEUE;
tsellshort(1,0,Mkt,0,0,'',stock2),ORDERQUEUE;

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


if CONDSELL and tbuyhd1>0 and tsellhd2>0 then
BEGIN
tsellshort(1,0,Mkt,0,0,'',stock1),ORDERQUEUE;
 tsell (1,0,Mkt,0,0,'',stock2),ORDERQUEUE;
 tbuy(1,1,Mkt,0,0,'',stock2),ORDERQUEUE;
  tbuyshort (1,1,Mkt,0,0,'',stock1),ORDERQUEUE;
 end

if   CONDBUY and (TBUYHD1=0 or TSELLHD2=0) and (TBUYHD2=0 or TSELLHD1=0) then
 BEGIN

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

if CONDSELL and (TBUYHD1=0 or TSELLHD2=0) and (TBUYHD2=0 or TSELLHD1=0) then
 BEGIN

tbuy(1,1,Mkt,0,0,'',stock2),ORDERQUEUE;
 tbuyshort (1,1,Mkt,0,0,'',stock1),ORDERQUEUE;
 end
-------------
发现还是不行,发现开始开了四手,然后接下来是只有后面两个可以相到有反映


 回到顶部
帅哥哟,离线,有人找我吗?
haizxj
  25楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小飞侠 帖子:1781 积分:0 威望:0 精华:0 注册:2013/6/11 20:05:24
  发帖心情 Post By:2018/8/15 14:19:27    Post IP:222.64.250.88[只看该作者]


图片点击可在新窗口打开查看此主题相关图片如下:qq图片20180815141012.png
图片点击可在新窗口打开查看

 回到顶部
帅哥哟,离线,有人找我吗?
FireScript
  26楼 | 信息 | 搜索 | 邮箱 | 主页 | 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[只看该作者]

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


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


加好友 发短信
等级:小飞侠 帖子:1781 积分:0 威望:0 精华:0 注册:2013/6/11 20:05:24
  发帖心情 Post By:2018/8/15 23:00:13    Post IP:222.64.250.88[只看该作者]

 如果是用值来是可以,但是用金死叉好像不行

 回到顶部
帅哥哟,离线,有人找我吗?
wenarm
  28楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2018/8/16 8:25:24    Post IP:180.169.30.6[只看该作者]

以下是引用haizxj在2018/8/15 23:00:13的发言:
 如果是用值来是可以,但是用金死叉好像不行

1.这种要看你的说的金死叉是不是成立了,

如果你你套利公式中的价差是动态行情函数参与计算的,那肯定是横不成立。因为它没有历史值,自然无法得到是否金叉的状态。



编程无捷径,技巧靠积累。
 回到顶部
帅哥哟,离线,有人找我吗?
haizxj
  29楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:小飞侠 帖子:1781 积分:0 威望:0 精华:0 注册:2013/6/11 20:05:24
  发帖心情 Post By:2018/8/16 17:12:36    Post IP:222.64.250.88[只看该作者]

 怎么样解决这个动态函数存进数组或者什么办法?
用K线走完

 回到顶部
帅哥哟,离线,有人找我吗?
wenarm
  30楼 | 信息 | 搜索 | 邮箱 | 主页 | UC


加好友 发短信
等级:管理员 帖子:26632 积分:0 威望:0 精华:7 注册:2015/4/9 14:59:07
  发帖心情 Post By:2018/8/16 21:53:02    Post IP:180.164.221.237[只看该作者]

你面临的问题,首先是机制不清楚,概念不了解,生搬硬套对于策略编写没有任何好处。


你现在存在的问题如下:
1.上述代码中你用到的是dynainfo(18) dynainfo(19),你确定你要用的是委卖量委卖量作为套利公式标准?你必须先确定好你要的套利公式是什么...
2.如果你要使用动态行情函数,其前提是你的策略思路中,是不是需要历史k线予以支持计算,否者你就必须使用序列变量,要不然就不会存在状态判断。
3.程序化执行模式,只决定检测抓取信号的时机,和你策略执行过程没有任何关系。
4.动态行情函数无法保存使用。

对于套利交易,你可以使用两种方式。
方法1:
使用金字塔自带的套利功能,新建套利合约行情。
然后,在后台中监控新建立的套利合约,如TA0002,但是后台代码中必须在开平语句中指定交易品种。如:TBUY(1,1,MKT ,0,0,账户,套利品种1);
这种方法,省略了在代码中计算套利行情的过程,监控套利合约的作用不光是为了使用该套利行情驱动策略运行,也是需要使用该行情参与基础逻辑条件计算。

方法2:
就是使用前面技术人员提供的代码。即套利条件通过代码实现,此时的代码中也必须指定交易品种。TBUY(1,1,MKT ,0,0,账户,套利品种1)。这种情况下,后台监控品种可以是任意一个品种,只是需要使用该品种驱动策略运行,一般选择套利品种之一或者交易时段相同并且比较活跃的品种作为驱动品种。不要同时监控两个或者两个以上的品种,否者会造成重复开仓。







编程无捷径,技巧靠积累。
 回到顶部
总数 35 上一页 1 2 3 4 下一页