金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 3238|回复: 6

改编了一个指标,提示循环的部分有未来,麻烦老师看看怎么改

[复制链接]

15

主题

37

帖子

37

积分

Rank: 2

等级: 标准版

注册:
2021-12-10
曾用名:
发表于 2022-3-7 15:06 | 显示全部楼层 |阅读模式
我这段指标的代码,最后一段的循环这里,程序提示有未来,有二次计算的东西,麻烦老师看看,怎么改,谢谢


input:length(14,1,50);
VARIABLE:PlusDM:=0,MinusDM: = 0,DMSum:= 0,coef:= 0,EMA_dmh:=0;;;
SF:=1/length;
UpperMove := High - High[1];//高点变化
LowerMove := Low[1] - Low;//低点变化



If UpperMove > LowerMove and UpperMove > 0 Then begin

        PlusDM := UpperMove;
end;
If LowerMove > UpperMove and LowerMove > 0 Then begin
        MinusDM := LowerMove;
end;

EMA_dmh: =SF*(PlusDM - MinusDM) + (1 - SF)* EMA_dmh[1];



//这个循环有问题,程序提示有未来引用;

For ccount = 1 to Length do Begin

DMSum = dmsum + (1 - Cos(360*ccount / (Length + 1)))*EMA_dmh[ccount-1];
coef = coef + (1 - Cos(360*ccount / (Length + 1)));
end;
If coef <> 0 Then DMH: DMSum / coef;

回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2022-3-7 15:13 | 显示全部楼层
EMA_dmh[ccount-1]

你这里 就是会涉及未来调用。
当前K位置是3  但是你这个 ccount-1 的值会遍历到大于3的情况,这时候就是未来。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

15

主题

37

帖子

37

积分

Rank: 2

等级: 标准版

注册:
2021-12-10
曾用名:
 楼主| 发表于 2022-3-7 15:22 | 显示全部楼层
技术009 发表于 2022-3-7 15:13
EMA_dmh[ccount-1]

你这里 就是会涉及未来调用。

如果改EMA_dmh[ccount]还是不给过啊?麻烦问下这个咋改
回复

使用道具 举报

15

主题

37

帖子

37

积分

Rank: 2

等级: 标准版

注册:
2021-12-10
曾用名:
 楼主| 发表于 2022-3-7 15:24 | 显示全部楼层
其实我也知道他好像就是搞了个均线,但是我就想看下,这样的均线之后啥效果; (1 - Cos(360*ccount / (Length + 1)))这句,我想不出来不用循环怎么来表达


补充内容 (2022-3-7 15:25):
这个系数,没法整,但是用了循环就老是通不过未来函数的检验啊
回复

使用道具 举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2022-3-7 15:29 | 显示全部楼层
你改成这样当然也不行啦。前面14个K,只要循环到ccount 大于当前K位置BARPOS  都会是未来的。

你这个只能判断K位置小于Length 之前 不执行。或者循环次数小于等于当前K的BARPOS时候按照K数量作为循环次数。

方式1:
if BARPOS<14 then exit;
For ccount = 1 to Length do Begin

DMSum = dmsum + (1 - Cos(360*ccount / (Length + 1)))*EMA_dmh[ccount-1];
coef = coef + (1 - Cos(360*ccount / (Length + 1)));
end


方式2:
cs:if(BARPOS<Length ,BARPOS,Length )
For ccount = 1 to cs  do Begin

DMSum = dmsum + (1 - Cos(360*ccount / (Length + 1)))*EMA_dmh[ccount-1];
coef = coef + (1 - Cos(360*ccount / (Length + 1)));
end


但是这2种修改对思路的影响就是无法避免的了。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

15

主题

37

帖子

37

积分

Rank: 2

等级: 标准版

注册:
2021-12-10
曾用名:
 楼主| 发表于 2022-3-7 15:35 | 显示全部楼层
但是这么改了好像不显示,要下班了,谢谢,我回头再琢磨琢磨
回复

使用道具 举报

15

主题

37

帖子

37

积分

Rank: 2

等级: 标准版

注册:
2021-12-10
曾用名:
 楼主| 发表于 2022-3-7 15:42 | 显示全部楼层
技术009 发表于 2022-3-7 15:29
你改成这样当然也不行啦。前面14个K,只要循环到ccount 大于当前K位置BARPOS  都会是未来的。

你这个只 ...

改了之后变成了一条不动的线了,不知道,啥毛病
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-25 10:46 , Processed in 0.101999 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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