金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 7420|回复: 22

跨周期引用的问题

[复制链接]

55

主题

179

帖子

179

积分

等级: 免费版

注册:
2021-11-18
曾用名:
发表于 2022-6-23 11:00 | 显示全部楼层 |阅读模式
我有个PEL公式,使用了跨周期调用,公式如下:
------------------------------------------------------------------------------------
均线长度:0,NODRAW;
均线位置:NULL;
5分钟图长度:STKINDIEX('','自适应均线.CHANGDU(3)',0,2,0,5000),NODRAW;
IF 5分钟图长度<>0 THEN
        BEGIN
                均线长度:=5分钟图长度;
                均线位置:=STKINDIEX('','MYMA.AA(均线长度)',0,2,0,5000);
                AA:MA(CLOSE,均线长度);
        END

------------------------------------------------------------------------------
大概思路是,跨周期去5分钟图计算一个合适的均线参数,然后在本图(任意周期)上把5分钟图上的均线值,画在本级别图上。

我的问题是,我发现计算出来了正确的5分钟图上的均线参数了(算出来是108),然后我继续使用跨周期调用STIKINDIEX来计算5分钟图上的均线位置(就是        “均线位置:=STKINDIEX('','MYMA.AA(均线长度)',0,2,0,5000);”这句话)
这个MYMA.AA的公式就2行
INPUT:N(20,10,500,1);
AA:MA(CLOSE,N);



我发现,通过 “  均线位置:=STKINDIEX('','MYMA.AA(均线长度)',0,2,0,5000);”返回的数总是错的,就算我是在5分钟图调用,也算不出正确数值(大概看起来返回了参数为20的MA值)。我想问问题是什么?
我尝试加了一句                AA:MA(CLOSE,均线长度);,来进行比较。但是说逐K模式下,IF语句里面不能使用MA,是这个原因造成的吗?


补充内容 (2022-6-23 11:07):
我前面说,算不出正确数值(大概看起来是返回了参数20的MA值),我刚再看,应该是返回了参数为10的MA值,刚好是MYMA里面的参数的最小范围那个值。
但是我其实是传入了108这个参数进去的。为什么无法返回正确值?

补充内容 (2022-6-23 11:09):
我修改了MYMA里面INPUT的最小值,改为2,发现返回的就是MA(2)的值了。
问题应该就是为什么这个跨周期引用,不按照我传入的参数算,而只算了个参数范围最小值?
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2022-6-23 11:03 | 显示全部楼层
你传递参数,如果是数值字面量 可以直接那样传参。但是你现在是变量,哪怕这个变量本身就是数值,也没办法直接传递过去。
均线位置:=STKINDIEX('','MYMA.AA(均线长度)',0,2,0,5000);

具体办法你参考函数说明,里面有例子的。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

55

主题

179

帖子

179

积分

等级: 免费版

注册:
2021-11-18
曾用名:
 楼主| 发表于 2022-6-23 11:28 | 显示全部楼层
均线长度:0,NODRAW;
均线位置:NULL;
5分钟图长度:STKINDIEX('','自适应均线.CHANGDU(3)',0,2,0,5000),NODRAW;

IF 5分钟图长度<>0 THEN
        BEGIN
                均线长度:=5分钟图长度;
                参数:=NUMTOSTR(均线长度,0);
                均线位置:=STKINDIEX('','MYMA.AA('&参数&')',0,2,0,5000);

        END
ELSE
        BEGIN
                15分钟图长度:STKINDIEX('','自适应均线.CHANGDU(4)',0,3,0,5000),NODRAW;
                IF 15分钟图长度<>0 THEN
                        BEGIN
                                均线长度:=15分钟图长度;
                                参数:=NUMTOSTR(均线长度,0);
                                均线位置:=STKINDIEX('','MYMA.AA('&参数&')',0,3,0,5000);
                        END
                ELSE
                        BEGIN
                                60分钟图长度:STKINDIEX('','自适应均线.CHANGDU(4)',0,5,0,5000),NODRAW;
                                IF 60分钟图长度<>0 THEN
                                        BEGIN
                                                均线长度:=60分钟图长度;
                                                参数:=NUMTOSTR(均线长度,0);
                                                均线位置:=STKINDIEX('','MYMA.AA('&参数&')',0,5,0,5000);
                                        END
                        END       
        END
回复

使用道具 举报

55

主题

179

帖子

179

积分

等级: 免费版

注册:
2021-11-18
曾用名:
 楼主| 发表于 2022-6-23 11:31 | 显示全部楼层
报了这个错误,应该怎么搞吗?
我全部公式都选择了逐K计算模式,自适应均线公式也是逐K计算,里面是用DLL来算的,DLL运行也是逐K。
截图202206231130101762.png
回复

使用道具 举报

55

主题

179

帖子

179

积分

等级: 免费版

注册:
2021-11-18
曾用名:
 楼主| 发表于 2022-6-23 11:37 | 显示全部楼层
系统是说错误在第9行,就是     均线位置:=STKINDIEX('','MYMA.AA('&参数&')',0,2,0,5000);

可是这里面的MYMA的语法,就两行代码啊
回复

使用道具 举报

55

主题

179

帖子

179

积分

等级: 免费版

注册:
2021-11-18
曾用名:
 楼主| 发表于 2022-6-23 11:46 | 显示全部楼层
我刚刚打印了下,5分钟图长度和均线长度都是108,但是转为字符串的“参数”就显示1000197?

我还发现一个错误,我刚才写   “参数:=NUMTOSTR(均线长度,0);”  时候,中间的逗号用了全角字符,但是编译器没有报错?现在改正过来了,但还是不对。
截图202206231144241246.png
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2022-6-23 12:28 | 显示全部楼层
你那个参数一直是变化的值
截图202206231228002829.png

这样导致 几乎每个K上可能都是一个新的引用,最终结果就是引用过多。

常规情况下如果参数是定值,其实就是一个引用。但是如果不是定值,那么结果就是一个值就是一个引用,这种很容易造成引用过多的报错的。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

55

主题

179

帖子

179

积分

等级: 免费版

注册:
2021-11-18
曾用名:
 楼主| 发表于 2022-6-23 12:58 | 显示全部楼层
的确我的思路,每个1分钟K上,都要算大周期上的最合适均线长度是多少,然后计算这个大周期的合适均线的位置。

我的这句:”5分钟图长度:STKINDIEX('','自适应均线.CHANGDU(3)',0,2,0,5000),NODRAW;“就是计算合适的均线长度参数,其实在这个”自适应均线“公式里面,我也可以算一并算好均线位置的。

可是我再用类似的语句,如”5分钟图长度:STKINDIEX('','自适应均线.WEIZHI(3)',0,2,0,5000),NODRAW;   这句在PEL的实现,也只要加一行 MA(close,均线参数)就可以
这种方式会不会就相当于算两次了(还是说其实都是算一次,这次"自适应均线.WEIZHI"是直接保存下来可以读取)?
所以我就想,既然有均线长度参数了,就跨周期调用MA来计算。有方法实现吗?

其实这里可以使用指定文件名输出再读入的方式。可是是不是这样就无法进行回测了?
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2022-6-23 13:40 | 显示全部楼层
“其实在这个”自适应均线“公式里面,我也可以算一并算好均线位置的。”如果你可以在被调用指标里面计算好这个“均线位置”变量,那最好就在这里算好,然后直接调用这个“均线位置”的计算结果。

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

使用道具 举报

55

主题

179

帖子

179

积分

等级: 免费版

注册:
2021-11-18
曾用名:
 楼主| 发表于 2022-6-23 18:48 | 显示全部楼层
我可以在1分钟图上,使用CALLSTOCKEX(CODE,TYPE,CYC,N,DATANUM),这个来获取例如1小时图上最近200根数据吗?这个函数是否返回一串数据、一个数组,返回值是具体如何使用呢?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-31 15:42 , Processed in 0.130179 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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