金字塔决策交易系统

标题: 主力合约 [打印本页]

作者: 100020061    时间: 2024-3-22 08:24
标题: 主力合约
软件更换主力合约是在下午收盘以后更换,还是说每个收盘节点都会按成交量和持仓量去判断 然后都有可能变更主力合约?

作者: 技术009    时间: 2024-3-22 08:41
下午盘后处理,不可能盘中处理。
作者: 100020061    时间: 2024-3-22 09:36
技术009 发表于 2024-3-22 08:41
下午盘后处理,不可能盘中处理。

INPUT:N(4,1,12,1);//需要获取的排序位数,如N=4,默认最终获取前四名的数值结果。
VARIABLE:codeArr[12]:='',volArr[12]:=0,sortArr[N]:=0;//codeArr 品种代码数组;volArr 成交量数组;sortArr 排序结果数组,默认长度是4

STR:=STRTRIMRIGHT( STKLABEL, '0123456789');
//生成每个月的合约代码 并存入到数组中。这个只在第一个K上运行下。字符串相关操作比较消耗资源,没必要每个分笔来都进行一次。
if BARPOS=1 then
begin
for i=1 to 12 do //默认按照该品种有12个月份的合约。
begin
codeArr:= STRCAT(str,STRRIGHT(NUMTOSTR(i/100,2),2));        
end
end

for j=1 to 12 do
begin
code:=codeArr[j];//code就是合约代码        
vox:=CALLSTOCK(code,vtOPENINT,6,0);
volArr[j]:=if(vox>=0,vox,0);//不活跃品种,获取到的成交量可能是负值,这里处理下确保没有负值。
end               

for j=1 to N do
begin
index:=MFAMAX(volArr,12);
sortArr[j]:=index;
volArr[index]:=0;

end
老师 以上代码在运行中会把12个月份的数据全部拿来循环选取,就会出现我昨天说的会把2502的数据选进去,而2502是2月合约,刚交割的保留的记录,那么就会让最后的结果可能出错的。
那么我如果现在在循环的月份只在当前月份往后的5个月之内。(05下个主力基本是09,我就最多在06-10合约进行选取)这个要怎么变代码  帮我写下 我最终的结果是要进行自动选取的,所以这步不能错


作者: 技术008    时间: 2024-3-22 09:41
这个不好实现的,您策略需要对所有月份合约都进行计算,然后计算时候还要智能的去掉交割掉的合约??
作者: 100020061    时间: 2024-3-22 09:42
技术008 发表于 2024-3-22 09:41
这个不好实现的,您策略需要对所有月份合约都进行计算,然后计算时候还要智能的去掉交割掉的合约??

策略对当前月份往后的5个月份进行计算就好了  对当前主力月份进行计算 判断再计算
作者: 技术008    时间: 2024-3-22 09:45
这种要对所有月份做统计的不好实现,一般还是直接用连续合约就行了
作者: 100020061    时间: 2024-3-22 09:49
技术008 发表于 2024-3-22 09:45
这种要对所有月份做统计的不好实现,一般还是直接用连续合约就行了

获取当前月份,和后面几个月份不难,难的是怎么去让他只在这几个固定的月份里面去计算?我要是在主力以外的合约的持仓量大于多少就开始跟踪了
作者: 100020061    时间: 2024-3-22 10:08
技术008 发表于 2024-3-22 09:45
这种要对所有月份做统计的不好实现,一般还是直接用连续合约就行了

这个安装了要重启软件才行吗?安装两次都不行

作者: 100020061    时间: 2024-3-22 10:24
技术009 发表于 2024-3-22 08:41
下午盘后处理,不可能盘中处理。

'1234‘ 这是否等同于‘1’&‘2’&‘3’&‘4’ 这样的写法?
作者: 技术009    时间: 2024-3-22 10:25
按照提示按照有明确提示失败?  一般不需要重启软件,如果安装成功,一般也就重新加载指标即可。
作者: 100020061    时间: 2024-3-22 10:30
技术009 发表于 2024-3-22 10:25
按照提示按照有明确提示失败?  一般不需要重启软件,如果安装成功,一般也就重新加载指标即可。

重新安装三次,都不能正常运行,重启一次就好了·安装完成也有提示 但是没用
作者: 100020061    时间: 2024-3-22 11:50
技术009 发表于 2024-3-22 08:41
下午盘后处理,不可能盘中处理。

主力月份:STRTONUM(STRRIGHT(DYNAINFO(210),2));
CJL2:sortArr[2];//第二的月份
老师 这个有没好的办法做个判断
CJL2 必须在 主力月份 之后 比如当前05 就不能选1,2,3,4这样的过滤
作者: 100020061    时间: 2024-3-22 12:07
技术009 发表于 2024-3-22 08:41
下午盘后处理,不可能盘中处理。

这能写出来吗?
将 1 ,3, 4 ,5,6添加到数组
判断P=的值等于数组里面的任意一个


作者: 技术009    时间: 2024-3-22 13:33
你循环时候把日期调用下和最新日期做下判断不就行了。

current_date:=date;
for j=1 to 12 do
begin
code:=codearr[j];//code就是合约代码        
vox:=callstock(code,vtopenint,6,0);
date_x:=callstock(code,vtdate,6,0);
volarr[j]:=if(vox>=0 and date_x=current_date,vox,0);//不活跃品种,获取到的成交量可能是负值,这里处理下确保没有负值。
end               



还有啊,我就想不明白,原版好好的代码,你怎么就能改到没法用了呢?
(, 下载次数: 506)