金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
楼主: 100020061

老师看下能不能整理下

[复制链接]

507

主题

2975

帖子

2985

积分

Rank: 2

等级: 标准版

注册:
2023-2-16
曾用名:
 楼主| 发表于 2023-9-6 13:37 | 显示全部楼层
技术009 发表于 2023-9-6 13:36
你前面代码 的结果。调整了前面提到的那个错误后。

我已经说了, 你日线数据不对情况下 是会出错的 ...

你要在这个品种之间切换下月份窗口就出现问题了 日线数据是对的
回复

使用道具 举报

507

主题

2975

帖子

2985

积分

Rank: 2

等级: 标准版

注册:
2023-2-16
曾用名:
 楼主| 发表于 2023-9-6 13:46 | 显示全部楼层
100020061 发表于 2023-9-6 13:37
你要在这个品种之间切换下月份窗口就出现问题了 日线数据是对的


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号? 微信登录

x
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2023-9-6 13:53 | 显示全部楼层
本帖最后由 技术009 于 2023-9-6 13:55 编辑

本地无法重现你描述的问题。切换品种月份都是正常的。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

507

主题

2975

帖子

2985

积分

Rank: 2

等级: 标准版

注册:
2023-2-16
曾用名:
 楼主| 发表于 2023-9-6 13:57 | 显示全部楼层
技术009 发表于 2023-9-6 13:53
本地无法重现你描述的问题。切换品种月份都是正常的。

//if ISLASTBAR then
//begin

主力成交量:=CALLSTOCK(成交量主力,vtvol,6,0);
次主力成交量:=CALLSTOCK(成交量次主力,vtvol,6,0);
主力持仓量:=CALLSTOCK(持仓量主力,vtOPENINT,6,0);
次主力持仓量:=CALLSTOCK(持仓量次主力,vtOPENINT,6,0);
//连续合约判断
连续合约:=STRREPLACE(STKLABEL,STRRIGHT(STKLABEL,2),'00');
连续合约成交量:=CALLSTOCK(连续合约,VTVOL,6,0);
连续合约持仓量:=CALLSTOCK(连续合约,vtOPENINT,6,0);       
//换月逻辑达到

//END

前面的代码加上后面的代码     用ISLASTBAR 在月份之间切换 你就知道了
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2023-9-6 13:58 | 显示全部楼层
代码贴全,放进去都是未定义,。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

507

主题

2975

帖子

2985

积分

Rank: 2

等级: 标准版

注册:
2023-2-16
曾用名:
 楼主| 发表于 2023-9-6 14:05 | 显示全部楼层
技术009 发表于 2023-9-6 13:58
代码贴全,放进去都是未定义,。

{禁止提醒}WARNING_DISABLE:11;
{逐K模式运行}RUNMODE:0;
//以下代码对非双年份合约有效(SC,AY,SRY,BUY等是双年份合约)
INPUT:N(2,1,12,1);//需要获取的排序位数,如N=4,默认最终获取前四名的数值结果。
VARIABLE:codeArr[12]:='',volArr[12]:=0,sortArr[N]:=0,cvolArr[12]:=0,csortArr[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

if ISLASTBAR then //将成交量填充到数组里面去. 这里可以自行调整,可以是成交量也可以是其他的什么值,自行选择处理即可。
begin
for j=1 to 12 do
begin
code:=codeArr[j];//code就是合约代码        
vox:=CALLSTOCK(code,vtVOL,6,0);
volArr[j]:=if(vox>=0,vox,0);//不活跃品种,获取到的成交量可能是负值,这里处理下确保没有负值。
end               
end

if ISLASTBAR then //利用线性函数取最大成交量的索引(就是月份数值),每次取值完成后 可以把这个最大值重置为0,这样可以依次获取成交量最大的前几名了。
begin
for j=1 to N do
begin
index:=MFAMAX(volArr,12);
sortArr[j]:=index;
volArr[index]:=0;
end
end
//持仓量
if ISLASTBAR then //将成交量填充到数组里面去. 这里可以自行调整,可以是成交量也可以是其他的什么值,自行选择处理即可。
begin
for jj=1 to 12 do
begin
ccode:=codeArr[jj];//code就是合约代码        
cvox:=CALLSTOCK(ccode,vtOPENINT,6,0);
cvolArr[jj]:=if(cvox>=0,cvox,0);//不活跃品种,获取到的成交量可能是负值,这里处理下确保没有负值。
end               
end

if ISLASTBAR then //利用线性函数取最大成交量的索引(就是月份数值),每次取值完成后 可以把这个最大值重置为0,这样可以依次获取成交量最大的前几名了。
begin
for jj=1 to N do
begin
cindex:=MFAMAX(cvolArr,12);
csortArr[jj]:=cindex;
cvolArr[cindex]:=0;
end
end

if ISLASTBAR then
begin
成交量主力月:sortArr[1];//第一的月份
成交量次主力月:sortArr[2];//第二的月份
成交量主力:=codeArr[成交量主力月];
成交量次主力:=codeArr[成交量次主力月];
END

if ISLASTBAR then
begin
持仓量主力月:csortArr[1];//第一的月份
持仓量次主力月:csortArr[2];//第二的月份
持仓量主力:=codeArr[持仓量主力月];
持仓量次主力:=codeArr[持仓量次主力月];
END

//if ISLASTBAR then
//begin

主力成交量:=CALLSTOCK(成交量主力,vtvol,6,0);
次主力成交量:=CALLSTOCK(成交量次主力,vtvol,6,0);
主力持仓量:=CALLSTOCK(持仓量主力,vtOPENINT,6,0);
次主力持仓量:=CALLSTOCK(持仓量次主力,vtOPENINT,6,0);
//连续合约判断
连续合约:=STRREPLACE(STKLABEL,STRRIGHT(STKLABEL,2),'00');
连续合约成交量:=CALLSTOCK(连续合约,VTVOL,6,0);
连续合约持仓量:=CALLSTOCK(连续合约,vtOPENINT,6,0);       
//换月逻辑达到

//END
















































回复

使用道具 举报

507

主题

2975

帖子

2985

积分

Rank: 2

等级: 标准版

注册:
2023-2-16
曾用名:
 楼主| 发表于 2023-9-6 14:07 | 显示全部楼层
技术009 发表于 2023-9-6 13:58
代码贴全,放进去都是未定义,。

一定要在运行以后用鼠标切换月份才会出现问题  不切换月份都是正常的 哪怕你切换一下再回到刚才正常的月份来 都是错的了
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2023-9-6 14:12 | 显示全部楼层
本帖最后由 技术009 于 2023-9-6 14:14 编辑

复现不了。。另外你贴的代码里 之前说错误的地方还是错的。。。
另外这个代码是不能在已经过期的月份上运行,比如工业硅的8月合约。因为日线调用是按照时间对齐的。  
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

507

主题

2975

帖子

2985

积分

Rank: 2

等级: 标准版

注册:
2023-2-16
曾用名:
 楼主| 发表于 2023-9-6 14:24 | 显示全部楼层
技术009 发表于 2023-9-6 14:12
复现不了。。另外你贴的代码里 之前说错误的地方还是错的。。。
另外这个代码是不能在已经过期的月份上运 ...

合约是在任意合约都一样的 拍了个视频你看下  代码一样的,就是来回切换月份。
回复

使用道具 举报

507

主题

2975

帖子

2985

积分

Rank: 2

等级: 标准版

注册:
2023-2-16
曾用名:
 楼主| 发表于 2023-9-6 17:52 | 显示全部楼层
技术009 发表于 2023-9-6 14:12
复现不了。。另外你贴的代码里 之前说错误的地方还是错的。。。
另外这个代码是不能在已经过期的月份上运 ...

这种怎么去判断年份和月份之间的关系 这种也会导致出错,23,24共同月份在里面会出错。要加上当前日期往后的月份去处理

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号? 微信登录

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 微信登录

本版积分规则

手机版|小黑屋|上海金之塔信息技术有限公司 ( 沪ICP备13035422号 )

GMT+8, 2025-7-30 19:46 , Processed in 0.105055 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表