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


金字塔客服中心 - 专业程序化交易软件提供商金字塔软件公式模型编写问题提交 → 图表交易调用后台策略出问题

   

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


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

主题:图表交易调用后台策略出问题

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


加好友 发短信
等级:新手上路 帖子:60 积分:0 威望:0 精华:0 注册:2015/3/5 22:02:15
图表交易调用后台策略出问题  发帖心情 Post By:2017/11/28 12:03:37    Post IP:101.78.143.19[只看该作者]

之前参考了论坛里面“有关在交易策略中图表和后台策略编写相互混用的说明”的帖子,写了一个策略,实测有问题,请大拿帮忙看下。

 

按照帖子的方法,首先用后台来获取实时持仓,并设为序列模式,这个在子函数MYHOUTAIFUN中

MYHOLDING:TBUYHOLDING(1);

 

 

然后主函数的交易代码如下:

KD1:=CROSS(CLOSE,开多点位);//开多平空条件
KK1:=CROSS(开空点位,CLOSE);//开空平多条件

MYHOLDING:= #MYHOUTAIFUN.MYHOLDING#; //实际持仓

IF KD1 then BEGIN
 //多空双向交易
  if barpos = datacount-1 then BEGIN //这里是假设用户用的走完K线交易模式,保证是倒数第2根K线有信号
   IF MYHOLDING<0 THEN BEGIN  //如果有空仓,先平后开
    平空1:SELLSHORT(1,交易手数1,THISCLOSE);  //平空信号
    KK_HOLDING1:=0;
    开多1:BUY(1,交易手数1,THISCLOSE);   //开多信号
    KD_HOLDING1:=1;
   END
   IF MYHOLDING=0 THEN BEGIN  //如果没有空仓,直接开
    开多2:BUY(1,交易手数1,THISCLOSE);   //开多信号
    KD_HOLDING1:=1;
   END   
  end 
  else BEGIN
   IF KK_HOLDING1=1 THEN BEGIN
    平空:SELLSHORT(1,交易手数1,THISCLOSE);  //平空信号
    KK_HOLDING1:=0;
   END  
   IF KD_HOLDING1=0 THEN BEGIN
    开多:BUY(1,交易手数1,THISCLOSE);   //开多信号
    KD_HOLDING1:=1;
   END
  end   
END

 

IF KK1 then BEGIN
 //多空双向交易
  if barpos = datacount-1 then BEGIN //这里是假设用户用的走完K线交易模式,保证是倒数第2根K线有信号
   IF MYHOLDING>0 THEN BEGIN  //如果有多仓,先平后开
    平多1:SELL(1,交易手数1,THISCLOSE);                       //平多信号
    KD_HOLDING1:=0;
    开空1:BUYSHORT(1,交易手数1,THISCLOSE);     //开空信号
    KK_HOLDING1:=1;
   END
   IF MYHOLDING=0 THEN BEGIN  //如果没有多仓,直接开
    开空2:BUYSHORT(1,交易手数1,THISCLOSE);     //开空信号
    KK_HOLDING1:=1;
   END   
  end 
  else BEGIN
   IF KD_HOLDING1=1 THEN BEGIN
    平多:SELL(1,交易手数1,THISCLOSE);                       //平多信号
    KD_HOLDING1:=0;
   END  
   IF KK_HOLDING1=0 THEN BEGIN
    开空:BUYSHORT(1,交易手数1,THISCLOSE);     //开空信号
    KK_HOLDING1:=1;
   END
  end   
END

 

按照“有关在交易策略中图表和后台策略编写相互混用的说明”中说的,在倒数第二根k线用实际持仓做平仓开仓条件,之前的历史信号用variable KK_HOLDING1和KD_HOLDING1来判断。

 

我实盘交易的结果是:我本来有多头持仓,出现空头信号KK1 时,没有发平仓指令,但是却发了开空仓的指令。请问是什么原因呢?

 


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


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2017/11/28 13:29:01    Post IP:180.169.30.6[只看该作者]

1.看下交易日志。交易日志里面有详细记录的,看当时怎么触发的。我估计当时你的虚拟持仓当时应该是0持仓的,所以估计是发不出平仓指令。

2.“MYHOLDING:= #MYHOUTAIFUN.MYHOLDING#;

   指标引用现在很少用这种方式了,一般用STKINDI函数。你可以把MYHOLDING这个值输出在图表上看下对不对。



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


加好友 发短信
等级:新手上路 帖子:60 积分:0 威望:0 精华:0 注册:2015/3/5 22:02:15
  发帖心情 Post By:2017/11/28 14:45:32    Post IP:101.78.143.19[只看该作者]

1. 交易日志里面有发开仓指令,但是没有平仓指令。这里有个问题,是不是平仓必须要虚拟持仓不为0才行呢?如果是这样的话,用后台的实际持仓其实没法控制平仓的。而我又不能设置虚拟持仓(好像必须要有虚拟开仓的动作才有虚拟持仓),那岂不是没有办法用实际持仓来控制平仓了?

2.MYHOLDING肯定是对的,因为开仓的交易指令执行了。


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


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2017/11/28 14:55:10    Post IP:180.169.30.6[只看该作者]

虚拟持仓要有持仓才能发平仓信号的。你只能获取当前最新实际持仓情况,但是你还要控制图表上平仓信号需要当前虚拟持仓不能为0才行。


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


加好友 发短信
等级:新手上路 帖子:60 积分:0 威望:0 精华:0 注册:2015/3/5 22:02:15
  发帖心情 Post By:2017/11/28 15:04:00    Post IP:101.78.143.19[只看该作者]

“但是你还要控制图表上平仓信号需要当前虚拟持仓不能为0才行”,这个怎样才能做到?我用当前持仓就是为了避免图表不能实际反映实际持仓的情况。有什么好办法吗?

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


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2017/11/28 15:27:55    Post IP:180.169.30.6[只看该作者]

以下是引用skypixel在2017/11/28 15:04:00的发言:
“但是你还要控制图表上平仓信号需要当前虚拟持仓不能为0才行”,这个怎样才能做到?我用当前持仓就是为了避免图表不能实际反映实际持仓的情况。有什么好办法吗?

这个是没办法做的,总不能随便写个下单语句来保证虚拟持仓不为0吧。我看了下代码,触发的应该是开多2吧?barpos = datacount-1 这个条件的触发的时候,MYHOLDING的值应该是0 。因为那个持仓量只在最新K上有正确数值的,历史上都是0。你看下日志里记录的是触发了哪一行代码。日志里有记录下单是那个语句触发的。

 



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


加好友 发短信
等级:新手上路 帖子:60 积分:0 威望:0 精华:0 注册:2015/3/5 22:02:15
  发帖心情 Post By:2017/11/28 17:37:32    Post IP:101.78.143.19[只看该作者]

之前没有记录交易日志。

我有点糊涂了,MYHOLDING:TBUYHOLDING(1)不是我的帐户实际持仓吗?

我的理解是实际持仓确实查到是>0的,但是虚拟持仓HOLDING是0,所以虽然满足了条件平空1和开多1,但是只有开多1执行了,是这样吗?


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


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

和虚拟持仓无关,我建议你在自己的关键部分加入debugfile调试。用于跟踪当时各项条件状态。

http://www.weistock.com/bbs/dispbbs.asp?boardid=4&Id=49428

调试使用方法、



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


加好友 发短信
等级:新手上路 帖子:60 积分:0 威望:0 精华:0 注册:2015/3/5 22:02:15
  发帖心情 Post By:2017/12/7 12:08:06    Post IP:101.78.143.19[只看该作者]

版主,我估计找到问题了,我的策略运行标的是商品指数,不是月份合约,而是在交易的时候映射到具体的合约的,是不是在这种情况下TBUYHOLDING(1)是查的是指数的持仓,当然是没有的啦,所以为0,也就不会触发平仓。如果是的话,我想请问一下:

1. TBUYHOLDING(1)是不是返回运行的图表对应的品种的持仓?如果我的图表交易品种是指数,比如焦炭指数,是不是返回持仓会为0?如果我的图表交易品种是主力,比如焦炭主力,是不是会返回对应主力月份的持仓呢?

2. 再和版主确认一下,如果图表持仓holding为0,但是我用其他的条件比如上面说的TBUYHOLDING(1)判断后发出了sell或sellshort,图表会执行这个sell和sellshort吗?也就是想知道图表平仓会不会无论如何都受到图表持仓的限制?这个问题一直没搞清楚,麻烦你帮忙确认一下。多谢!


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


加好友 发短信
等级:超级版主 帖子:14496 积分:0 威望:0 精华:0 注册:2017/7/4 13:40:18
  发帖心情 Post By:2017/12/7 14:45:48    Post IP:180.169.30.6[只看该作者]

1.是的,指数对应的返回值会是0 这个很容易测试到的。 交易的是主力返回的是对应主力月份的持仓。

2.图表的平仓信号一定会受到图表持仓的影响的。



命数如织,当如磐石。
 回到顶部
总数 12 1 2 下一页