Rss & SiteMap

金字塔客服中心 - 专业程序化交易软件提供商 http://www.weistock.com/bbs/

专业程序化软件提供商
共13 条记录, 每页显示 10 条, 页签: [1] [2]
[浏览完整版]

标题:能否自动指定改合约的连续合约?

1楼
OscarDeng 发表于:2020/7/15 8:15:19
我的程序必须在具体合约实施, 例如SF2009,CF2009, 但是我又想直接调用该合约的连续合约的日线的指标,也就是问能否自动指定改合约的连续合约? 例如这个程序放在SF2009 5分钟上能自动调用SF的连续合约, 放到CF2009 5分钟上又会自动调用CF的连续合约, 不需要在不同品种中修改程序, 要怎样写?  
2楼
FireScript 发表于:2020/7/15 8:58:31
 s:=STRREMOVE(STKLABEL,STRLEN(STKLABEL)-2,2);
lxstr:=s+'00';//连续品种代码

这样有了品种代码。你后面就可以调用连续的数据了。在跨周期调用里面指定品种代码是lxstr 就行了。

3楼
OscarDeng 发表于:2020/7/15 18:15:49
使用你给的程序, 放在AP10 的一分钟身上, 得出s是:100001.000, lsstr:1000002.000,  并不会返回AP00 呀? 是不是你程序有错?
4楼
wenarm 发表于:2020/7/15 20:46:45

字符串不能直接在图表变量值输出。必须通过绘图函数或者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编辑过]
5楼
OscarDeng 发表于:2020/7/16 9:57:57
你的程序跟第一次给的程序完全不一样,   我只需要拿到一个连续合约代码, 输出值是 STR00 吗?我直接调用STR00  就可以了吗? 例如  STKINDI('str00','macd.def',0,6,-1),noaxis;
6楼
FireScript 发表于:2020/7/16 10:00:35

前面的方式在部分品种上会失效   以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;
这里不用带引号。本身就是字符串变量了。
7楼
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); 

8楼
wenarm 发表于:2020/7/27 23:44:50

代码没问题。怀疑你在连续上看错了或者周期不对。建议你自己再核实下

[此贴子已经被作者于2020/7/27 23:45:11编辑过]
9楼
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. 
10楼
wenarm 发表于:2020/7/28 10:13:32

截图看。我本地结果是正常的

 

共13 条记录, 每页显示 10 条, 页签: [1] [2]


Powered By Dvbbs Version 8.3.0
Processed in 0.00781 s, 3 queries.