我的程序必须在具体合约实施, 例如SF2009,CF2009, 但是我又想直接调用该合约的连续合约的日线的指标,也就是问能否自动指定改合约的连续合约? 例如这个程序放在SF2009 5分钟上能自动调用SF的连续合约, 放到CF2009 5分钟上又会自动调用CF的连续合约, 不需要在不同品种中修改程序, 要怎样写?
s:=STRREMOVE(STKLABEL,STRLEN(STKLABEL)-2,2);
lxstr:=s+'00';//连续品种代码
这样有了品种代码。你后面就可以调用连续的数据了。在跨周期调用里面指定品种代码是lxstr 就行了。
使用你给的程序, 放在AP10 的一分钟身上, 得出s是:100001.000, lsstr:1000002.000, 并不会返回AP00 呀? 是不是你程序有错?
字符串不能直接在图表变量值输出。必须通过绘图函数或者EXPLAIN函数输出显示。
上面的代码没没有对双年份合约和原油进行处理。需要调整下。以保证逻辑的健壮性。
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 );
[此贴子已经被作者于2020/7/16 8:29:48编辑过]
前面的方式在部分品种上会失效 以4楼的方式为准。
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
//区分处理原油和其他品种的连续代码
STR00:=IF(STRCMP(STR,'SC')=0,STRCAT(STR , '0000'),STRCAT( STR, '00'));
STKINDI(str00,'macd.def',0,6,-1),noaxis;
这里不用带引号。本身就是字符串变量了。
使用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);
代码没问题。怀疑你在连续上看错了或者周期不对。建议你自己再核实下
[此贴子已经被作者于2020/7/27 23:45:11编辑过]
就是核实过才会 过来问的。
例如:在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.