以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (http://222.73.7.161/bbs/index.asp) -- 公式模型编写问题提交 (http://222.73.7.161/bbs/list.asp?boardid=4) ---- 图表交易调用后台策略出问题 (http://222.73.7.161/bbs/dispbbs.asp?boardid=4&id=159932) |
-- 作者:skypixel -- 发布时间:2017/11/28 12:03:37 -- 图表交易调用后台策略出问题 之前参考了论坛里面“有关在交易策略中图表和后台策略编写相互混用的说明”的帖子,写了一个策略,实测有问题,请大拿帮忙看下。
按照帖子的方法,首先用后台来获取实时持仓,并设为序列模式,这个在子函数MYHOUTAIFUN中 MYHOLDING:TBUYHOLDING(1);
然后主函数的交易代码如下: KD1:=CROSS(CLOSE,开多点位);//开多平空条件 MYHOLDING:= #MYHOUTAIFUN.MYHOLDING#; //实际持仓 IF KD1 then BEGIN
IF KK1 then BEGIN
按照“有关在交易策略中图表和后台策略编写相互混用的说明”中说的,在倒数第二根k线用实际持仓做平仓开仓条件,之前的历史信号用variable KK_HOLDING1和KD_HOLDING1来判断。
我实盘交易的结果是:我本来有多头持仓,出现空头信号KK1 时,没有发平仓指令,但是却发了开空仓的指令。请问是什么原因呢?
|
-- 作者:FireScript -- 发布时间:2017/11/28 13:29:01 -- 1.看下交易日志。交易日志里面有详细记录的,看当时怎么触发的。我估计当时你的虚拟持仓当时应该是0持仓的,所以估计是发不出平仓指令。 2.“MYHOLDING:= #MYHOUTAIFUN.MYHOLDING#;” 指标引用现在很少用这种方式了,一般用STKINDI函数。你可以把MYHOLDING这个值输出在图表上看下对不对。 |
-- 作者:skypixel -- 发布时间:2017/11/28 14:45:32 -- 1. 交易日志里面有发开仓指令,但是没有平仓指令。这里有个问题,是不是平仓必须要虚拟持仓不为0才行呢?如果是这样的话,用后台的实际持仓其实没法控制平仓的。而我又不能设置虚拟持仓(好像必须要有虚拟开仓的动作才有虚拟持仓),那岂不是没有办法用实际持仓来控制平仓了? 2.MYHOLDING肯定是对的,因为开仓的交易指令执行了。 |
-- 作者:FireScript -- 发布时间:2017/11/28 14:55:10 -- 虚拟持仓要有持仓才能发平仓信号的。你只能获取当前最新实际持仓情况,但是你还要控制图表上平仓信号需要当前虚拟持仓不能为0才行。 |
-- 作者:skypixel -- 发布时间:2017/11/28 15:04:00 -- “但是你还要控制图表上平仓信号需要当前虚拟持仓不能为0才行”,这个怎样才能做到?我用当前持仓就是为了避免图表不能实际反映实际持仓的情况。有什么好办法吗? |
-- 作者:FireScript -- 发布时间:2017/11/28 15:27:55 -- 以下是引用skypixel在2017/11/28 15:04:00的发言:
“但是你还要控制图表上平仓信号需要当前虚拟持仓不能为0才行”,这个怎样才能做到?我用当前持仓就是为了避免图表不能实际反映实际持仓的情况。有什么好办法吗? 这个是没办法做的,总不能随便写个下单语句来保证虚拟持仓不为0吧。我看了下代码,触发的应该是开多2吧?barpos = datacount-1 这个条件的触发的时候,MYHOLDING的值应该是0 。因为那个持仓量只在最新K上有正确数值的,历史上都是0。你看下日志里记录的是触发了哪一行代码。日志里有记录下单是那个语句触发的。
|
-- 作者:skypixel -- 发布时间:2017/11/28 17:37:32 -- 之前没有记录交易日志。 我有点糊涂了,MYHOLDING:TBUYHOLDING(1)不是我的帐户实际持仓吗? 我的理解是实际持仓确实查到是>0的,但是虚拟持仓HOLDING是0,所以虽然满足了条件平空1和开多1,但是只有开多1执行了,是这样吗? |
-- 作者:wenarm -- 发布时间:2017/11/29 8:58:45 -- 和虚拟持仓无关,我建议你在自己的关键部分加入debugfile调试。用于跟踪当时各项条件状态。 http://www.weistock.com/bbs/dispbbs.asp?boardid=4&Id=49428 调试使用方法、 |
-- 作者:skypixel -- 发布时间:2017/12/7 12:08:06 -- 版主,我估计找到问题了,我的策略运行标的是商品指数,不是月份合约,而是在交易的时候映射到具体的合约的,是不是在这种情况下TBUYHOLDING(1)是查的是指数的持仓,当然是没有的啦,所以为0,也就不会触发平仓。如果是的话,我想请问一下: 1. TBUYHOLDING(1)是不是返回运行的图表对应的品种的持仓?如果我的图表交易品种是指数,比如焦炭指数,是不是返回持仓会为0?如果我的图表交易品种是主力,比如焦炭主力,是不是会返回对应主力月份的持仓呢? 2. 再和版主确认一下,如果图表持仓holding为0,但是我用其他的条件比如上面说的TBUYHOLDING(1)判断后发出了sell或sellshort,图表会执行这个sell和sellshort吗?也就是想知道图表平仓会不会无论如何都受到图表持仓的限制?这个问题一直没搞清楚,麻烦你帮忙确认一下。多谢! |
-- 作者:FireScript -- 发布时间:2017/12/7 14:45:48 -- 1.是的,指数对应的返回值会是0 这个很容易测试到的。 交易的是主力返回的是对应主力月份的持仓。 2.图表的平仓信号一定会受到图表持仓的影响的。 |