金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
楼主: hanzi-999

为什么调用STKINDIEX获取子指标的值总是无效值?

[复制链接]

44

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-2-25 11:26 | 显示全部楼层
本帖最后由 技术008 于 2025-2-25 11:27 编辑

你看下是不是后面得输出都有值,只是一开始都是无效值
另外你跨品种其他品种得对应数据是否都是齐全


金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

49

主题

268

帖子

268

积分

等级: 免费版

注册:
2023-9-29
曾用名:
 楼主| 发表于 2025-2-25 13:33 | 显示全部楼层
技术006 发表于 2025-2-25 11:22
STKINDIEX的DATANUM,指的是被调用周期使用DATANUM的数据量。或者说STKINDIEX等同于把指定的指标单独运 ...

您能测试下,看到底是什么原因导致无法返回有效数据吗? 代码我一楼都贴出来了
回复

使用道具 举报

49

主题

268

帖子

268

积分

等级: 免费版

注册:
2023-9-29
曾用名:
 楼主| 发表于 2025-2-25 13:43 | 显示全部楼层
技术008 发表于 2025-2-25 11:26
你看下是不是后面得输出都有值,只是一开始都是无效值
另外你跨品种其他品种得对应数据是否都是齐全

我检查过日志,后面一直都是无效值. 然后5分钟数据我都是补过的.  最直接的方法就是你们做下测试,看日志结果,看看到底是什么原因导致STKINDEX调用指标无法返回有效数据. 谢谢!
回复

使用道具 举报

44

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-2-25 14:08 | 显示全部楼层
加我qq远程看把
2857926939
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

49

主题

268

帖子

268

积分

等级: 免费版

注册:
2023-9-29
曾用名:
 楼主| 发表于 2025-2-25 14:15 | 显示全部楼层
可惜我没有QQ啊. 能加你微信吗?   
还有,我那代码你应该可以运行'精细化历史评测'吧?
回复

使用道具 举报

44

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-2-25 14:18 | 显示全部楼层
//不要使用exit这个函数,用下面这种方式,满足条件以后执行下列程序试下呢

IF BARPOS > M*BS THEN
begin
        //这里运行你得程序
end
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

49

主题

268

帖子

268

积分

等级: 免费版

注册:
2023-9-29
曾用名:
 楼主| 发表于 2025-2-25 14:42 | 显示全部楼层
得到的数值仍旧是无效.
代码如下:

RUNMODE : 0; //指定逐K模式
VARIABLE : contract_array[5] = ('RB00',  //螺纹1 //黑色+建材-----------
'HC00',   //热卷2
'I00',    //铁矿3
'J00',    //焦炭4
'JM00'    //焦煤5
);
VARIABLE: DX = 0; //内部数组  
MBS := 800;
/////////////////////////////////////////////////////////
//                     调试输出相关
/////////////////////////////////////////////////////////  
DBG_PATH := 'D:\';  //调试输出文件路径
DBG_LOG_FILE := DBG_PATH + '\TestMain_debug.txt';  //调试输出文件名 普通调试相关
reldate := DATE+19000000;  
current_date_str := NUMTOSTR(reldate,0);   
current_time_str := NUMTOSTR(HOUR,0) & ':' & NUMTOSTR(MINUTE,0) & ':' & NUMTOSTR(SECOND,0);  
k_stamp := '[' & current_date_str & ' ' & current_time_str & '] ';
/////////////////////////////////////////////////////////
//               end of 调试输出相关
/////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////
//方法 I 直接调用
////  #MARGIN_AMP指标内容如下:
////  A:=(C/REF(C,1)-1)*100;
////  B:=-(REF(C,1)/C-1)*100;
////  BZJ:=TACCOUNT(41); //#多头保证金率
////  T:=REF(C,1)<C;
////  TK:=IF(T,A,B);
////  BTK:=TK/BZJ;
////  DB:=BTK;
////  DBZ:SUM(DB,0);
////  CCD := DBZ
/////////////////////////////////////////////////////////
recent_bars_n := MBS;

IF ISLASTBAR AND BARPOS >= MBS THEN
BEGIN
    //方法 II
        //当前品种的指标值
        CCD := STKINDIEX('','MARGIN_AMP.DBZ',0,18,0,recent_bars_n);  
        IF VALID(CCD)=0 THEN  DEBUGFILE(DBG_LOG_FILE, k_stamp&STKLABEL& ' CCD:' & NUMTOSTR(CCD,0) & '无效',0);
        ELSE DEBUGFILE(DBG_LOG_FILE, k_stamp&STKLABEL& ' CCD:' & NUMTOSTR(CCD,0) & '有效',0);
       
        FOR i = 1 TO 5 DO //各合约
        BEGIN
            custom_amp := STKINDIEX(contract_array, 'MARGIN_AMP.DBZ', 0, 18, 0, recent_bars_n);
            IF VALID(custom_amp)=0 THEN
            BEGIN
                DEBUGFILE(DBG_LOG_FILE, k_stamp& contract_array & ' custom_amp:%.2f 无效',custom_amp);
                    CONTINUE;
            END
            DEBUGFILE(DBG_LOG_FILE, k_stamp& contract_array & ' custom_amp:%.2f 有效',custom_amp);
            //DEBUGFILE(DBG_LOG_FILE, 'i:' & NUMTOSTR(i,0) & ' ' & contract_array,  0);
        END

END
         


补充内容 (2025-2-25 14:43):
清空日志,重新打印到了7110行

本帖子中包含更多资源

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

x
回复

使用道具 举报

44

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-2-25 14:43 | 显示全部楼层
CCD := STKINDIEX('','MARGIN_AMP.DBZ',0,18,0,10000);
把数据量调大

另外改成直接  CCD := STKINDI('','MARGIN_AMP.DBZ',0,18,0); 直接调用不要控制数据量看下


ex得数据量是从最新往前一共多少而不是在当时可以获取多少,这个非常不好理解,建议看就直接stkindi自动就行了
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

49

主题

268

帖子

268

积分

等级: 免费版

注册:
2023-9-29
曾用名:
 楼主| 发表于 2025-2-25 15:19 | 显示全部楼层
技术008 发表于 2025-2-25 14:43
CCD := STKINDIEX('','MARGIN_AMP.DBZ',0,18,0,10000);
把数据量调大

试过了,使用STKINDIEX方式,datanum参数调成10000仍旧是获取不到有效数据
回复

使用道具 举报

44

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2025-2-25 15:21 | 显示全部楼层
那用stkindi呢,另外打开各个品种的10分钟k线图,确保有数据
如果还有问题加我qq远程看
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-16 11:53 , Processed in 0.166483 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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