金字塔决策交易系统
标题: 螺纹期货主力合约要在商品指数au30有持仓的前提下才能同方向开仓。 [打印本页]
作者: deng 时间: 2021-6-25 00:50
标题: 螺纹期货主力合约要在商品指数au30有持仓的前提下才能同方向开仓。
各位老师好,框架交易模式下想完成以下逻辑:螺纹期货主力合约要在商品指数au30有持仓的前提下才能同方向开仓。尝试用extgbdataset指令,但是始终不能返回au30的持仓状态。请问是为什么?谢谢!
作者: 技术012 时间: 2021-6-25 09:00
不需要用全局变量去记,直接用引用函数去获取下 au30 上的虚拟持仓即可,螺纹的开平仓条件里加上引用后的结果,可以看下STKINDI这个函数
可以看下STKINDI函数的案例:http://www.weistock.com/bbs/disp ... p;page=1&star=1
作者: deng 时间: 2021-6-25 09:14
单单使用stkindi引用函数是不够的,因为au30也有止损和止盈的问题,所以必须让它单独运行在一个图表程序化框架下,我最终要取得的是au30经过止盈止损以后的持仓方向,谢谢!
作者: 技术012 时间: 2021-6-25 09:21
extgbdataset 返回的持仓数量不对还是根本未去记录呢? 发下关于全局变量控制的几行代码看下
作者: deng 时间: 2021-6-25 09:39
设参数,
WARNING_DISABLE:4;
EXTGBDATASET(STKNAME(),HOLDING);
取参数的
WARNING_DISABLE:4;
SSZ1:=EXTGBDATA('AU30');
作者: 技术012 时间: 2021-6-25 09:59
菜单栏工具 》 数据管理 》 全局变量里,这个变量设置了吗? 然后AU30策略的虚拟持仓变化时,有没有给这个全局变量赋值呢?
EXTGBDATASET 是放在策略下的开平仓后面的吗? 你发下完整设置和取值代码
作者: deng 时间: 2021-6-25 10:09
在全局变量数值管理里面,可以看见已经导出的au30数值变化,现在的问题是取值的时候取不到au30的状态,始终都是0,谢谢!
作者: deng 时间: 2021-6-25 10:14
Au30的取值是放在程序的最末端,
WARNING_DISABLE:4;
EXTGBDATASET(STKNAME(),HOLDING);
仓:holding,NODRAW,COLORYELLOW;
盈:INTPART( BCYLZF),NODRAW,COLORRED;
量:Vm,NODRAW,COLORGREEN;
权:INTPART(ASSET),NOAXIS,COLORGRAY,linethick2;
//输出当前资产,但不影响坐标最高最低值
作者: deng 时间: 2021-6-25 10:16
提起au30是放在程序的最前端,
KCSJ:=STKINDIEX('','CROWNNP1.KCNP',1,17,-1,120);
M:=STKINDIEX('','CROWNNP1.M',1,5,-1,60);
KN:=1;
JN:=1;
SN:=120;
VN:=STKINDIEX('','CROWNNP1.VN',1,5,-1,60);
PN:=STKINDIEX('','CROWNNP1.PN',1,5,-1,60);
HJSJ:=1;
KCYZ:=0;
KDYZ:=0;
KKYZ:=0;
WARNING_DISABLE:4;
SSZ1:=EXTGBDATA('AU30');
SSZ2:=EXTGBDATA('AU31');
IF (SSZ1)<>0 THEN BEGIN
KCYZ:=1;
END
IF (SSZ1)>0 THEN BEGIN
KDYZ:=1;
END
IF (SSZ1)<0 THEN BEGIN
KKYZ:=1;
END
作者: 技术012 时间: 2021-6-25 10:16
这些写不行的,你看下这个帖子中的第二个案例 ,需要根据条件去赋值:http://www.weistock.com/WeisoftHelp/zbgs003.htm
作者: deng 时间: 2021-6-25 10:27
抱歉,我看不出问题在哪里,
作者: deng 时间: 2021-6-25 10:30
设定au30肯定是没问题的,就是取值有问题,你能不能帮我看看取值部分到底应该怎么改,谢谢,
作者: deng 时间: 2021-6-25 10:37
不好意思,我还是看不懂问题出在什么地方,我觉得au30的设置肯定是没问题的,就是取值不知道怎么回事,你能不能帮我修改一下,谢谢,
作者: 技术012 时间: 2021-6-25 10:44
不知道为什么你说单用 stkindi 函数是不行的?直接引用AU30策略上的 HOLDING值 就行了呀,不管是否触发了止盈止损的动作,HOLDING最终是会随之变化的。
全局变量是要根据条件去赋值,比方说开多了,把AU30赋值为1,平仓了重新把AU30赋值为0 。
作者: deng 时间: 2021-6-25 11:34
不好意思,我还是找不到问题所在,我觉得au30的取值应该是没问题的,重点就是他的提取为什么总是不行?你能不能写一段提取的程序,谢谢,
作者: deng 时间: 2021-6-25 11:34
不好意思,我还是找不到问题所在,我觉得au30的取值应该是没问题的,重点就是他的提取为什么总是不行?你能不能写一段提取的程序,谢谢,
作者: 技术012 时间: 2021-6-25 13:04
你看10楼的链接里,有个详细的例子,每次都需要去赋值一次
作者: deng 时间: 2021-6-25 16:19
SSZ1A:=STKINDIEX('AU30','EZ.HOLDING',1,1,-1,120);
为什么明明 EZ持仓是1,但是ssz1a掉出来的还是0,
作者: 技术008 时间: 2021-6-25 16:23
你是通过什么来判断ez的持仓是1的,你这里限制的是120根k线计算出的holding
不同的k数量计算出来的holding是不一样的
比如你打开k线图,你看一个月和看一周和看一年,最后的holding都是不一样的
作者: deng 时间: 2021-6-25 16:35
SSZ1A:=STKINDIEX('AU34','EZ.HOLDING',1,12,0,30);
SSZ1:=HHV(SSZ1A,BARMAX1);
比如说上面的参数,我在图表程序化里用30秒,30根K线来模拟,持仓就是1,
方便加一个微信,我用微信截图给您看,
作者: 技术012 时间: 2021-6-25 16:55
引用里指定引用了30根K线,那你图表上也要锁定30根K线才会和引用的结果一致,要不然策略加载不同数量的K线,会导致最终结果的差异。
用下图的锁定数量再去试试
(, 下载次数: 349)