以文本方式查看主题 - 金字塔客服中心 - 专业程序化交易软件提供商 (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=181206) |
-- 作者:OscarDeng -- 发布时间:2020/7/15 8:15:19 -- 能否自动指定改合约的连续合约? 我的程序必须在具体合约实施, 例如SF2009,CF2009, 但是我又想直接调用该合约的连续合约的日线的指标,也就是问能否自动指定改合约的连续合约? 例如这个程序放在SF2009 5分钟上能自动调用SF的连续合约, 放到CF2009 5分钟上又会自动调用CF的连续合约, 不需要在不同品种中修改程序, 要怎样写? |
-- 作者:FireScript -- 发布时间:2020/7/15 8:58:31 -- s:=STRREMOVE(STKLABEL,STRLEN(STKLABEL)-2,2); lxstr:=s+\'00\';//连续品种代码 这样有了品种代码。你后面就可以调用连续的数据了。在跨周期调用里面指定品种代码是lxstr 就行了。 |
-- 作者:OscarDeng -- 发布时间:2020/7/15 18:15:49 -- 使用你给的程序, 放在AP10 的一分钟身上, 得出s是:100001.000, lsstr:1000002.000, 并不会返回AP00 呀? 是不是你程序有错? |
-- 作者:wenarm -- 发布时间:2020/7/15 20:46:45 -- 字符串不能直接在图表变量值输出。必须通过绘图函数或者EXPLAIN函数输出显示。 上面的代码没没有对双年份合约和原油进行处理。需要调整下。以保证逻辑的健壮性。
STR:=STRTRIMRIGHT( STKLABEL, \'0123456789\'); //双年份合约,豆一和白糖虽然取消双年份,但是金字塔为保证老用户策略的正常操作,所以保持不变。因此依旧需要区分。 //区分处理原油和其他品种的连续代码 [此贴子已经被作者于2020/7/16 8:29:48编辑过]
|
-- 作者:OscarDeng -- 发布时间:2020/7/16 9:57:57 -- 你的程序跟第一次给的程序完全不一样, 我只需要拿到一个连续合约代码, 输出值是 STR00 吗?我直接调用STR00 就可以了吗? 例如 STKINDI(\'str00\',\'macd.def\',0,6,-1),noaxis; |
-- 作者:FireScript -- 发布时间:2020/7/16 10:00:35 -- 前面的方式在部分品种上会失效 以4楼的方式为准。 STR:=STRTRIMRIGHT( STKLABEL, \'0123456789\'); //双年份合约,豆一和白糖虽然取消双年份,但是金字塔为保证老用户策略的正常操作,所以保持不变。因此依旧需要区分。 STR00:=IF(STRCMP(STR,\'SC\')=0,STRCAT(STR , \'0000\'),STRCAT( STR, \'00\')); STKINDI(str00,\'macd.def\',0,6,-1),noaxis; 这里不用带引号。本身就是字符串变量了。
|
-- 作者:OscarDeng -- 发布时间:2020/7/27 17:45:22 -- 使用4楼的公式能成功调用跨周期的, 但是STKINDI调用后, 我发现调用后得出的数值与被调用的真实数值区别很大, 不知道什么原因? 是我写的程序有问题吗? 能否帮忙检查一下哪里出错了? 下面的语句是程序运行在主力合约例如CJ09在一分钟周期内 调用CJ00的一分钟周期成交量指标。 例如:在09合约2020年7月27日15点00分MV1 和 MV2 是222和89 , 但是连续合约查到的值15:00是 156和91;14:59是134和77. STR:=STRTRIMRIGHT( STKLABEL, \'0123456789\'); //双年份合约,豆一和白糖虽然取消双年份,但是金字塔为保证老用户策略的正常操作,所以保持不变。因此依旧需要区分。 if STRCMP(STR,\'AY\')=0 or STRCMP(STR,\'BUY\')=0 OR STRCMP(STR,\'SRY\') THEN BEGIN STR:=STRREPLACE(STR , \'Y\',\'X\' ); END //EXPLAIN( 1, STR ); //区分处理原油和其他品种的连续代码 STR00:=IF(STRCMP(STR,\'SC\')=0,STRCAT(STR , \'0000\'),STRCAT( STR, \'00\')); EXPLAIN( 1, STR00 ); MV1:STKINDI(STR00,\'VOL1.MA1(3,100)\',0,1,1); MV2:STKINDI(STR00,\'VOL1.MA2(3,100)\',0,1,-1); //被调用的成交量指标 VOLUME:VOL,VOLSTICK; OPENINT,linethick3, coloryellow,NOAXIS; MA1:MA(VOL,M1); MA2:MA(VOL,M2); //MA3:MA(VOL,M3); |
-- 作者:wenarm -- 发布时间:2020/7/27 23:44:50 -- 代码没问题。怀疑你在连续上看错了或者周期不对。建议你自己再核实下 [此贴子已经被作者于2020/7/27 23:45:11编辑过]
|
-- 作者:OscarDeng -- 发布时间:2020/7/28 10:06:01 -- 就是核实过才会 过来问的。 例如:在JC09合约2020年7月27日15点00分MV1 和 MV2 是222和89 , 但是连续合约查到的值15:00是 156和91;14:59是134和77. 例如:在JC09合约2020年7月28日10点01分MV1 和 MV2 是46和81 , 但是连续合约查到的值10:01是 156和91;14:59是59和50.
|
-- 作者:wenarm -- 发布时间:2020/7/28 10:13:32 -- 截图看。我本地结果是正常的
|