金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 389|回复: 7

1分钟策略优化卡死在95%

[复制链接]

158

主题

363

帖子

363

积分

等级: 免费版

注册:
2022-1-15
曾用名:
发表于 2024-12-17 16:13 | 显示全部楼层 |阅读模式
策略很简单,只用到了std,ma,hhv,llv,ref,cross,every,这些最基本的函数,代码 不超过150行。回测rb00,1min,回测时间2021-1-1~2024-1-1,用了32核 。前面都挺快,但是到了95%,96%就卡死了 。  最后2个cpu一直满负荷,到现在都40分钟过去了

截图202412171554066180.png
回复

使用道具 举报

35

主题

9409

帖子

5万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2024-12-17 16:24 | 显示全部楼层
你取消重新试下。那两个核一直在计算,说明优化没有终止。如果可以稳定出现,可以提供下你的测试代码给我们排查下具体原因。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

158

主题

363

帖子

363

积分

等级: 免费版

注册:
2022-1-15
曾用名:
 楼主| 发表于 2024-12-18 10:07 | 显示全部楼层
查到原因了,是every(,barpos-enterBar)函数造成的.以前从来没注意到这个问题,但是在小周期,大样本测试的时候差距非常明显

VARIABLE:enterBar=0;

M:=26;
N10:=2;
MID :  MA(c,M),LINETHICK2;
MAS:MA(MID,4),LINEDOT;
istd:STD(c,M),NODRAW;
UPPER1: MID + N10*istd;
LOWER1: MID - N10*istd;

dk:=cross(c,LOWER1);

if dk and holding=0 then
begin
        buy(1,2,MARKETR);
        enterbar:=barpos;
END

/////////////////写法一:耗时5分53秒
dp1:=cross(lower1,c);
cond1:=every(mid<mas,barpos-enterBar);
cond2:=every(mid<ref(mid,1),barpos-enterBar);
cond3:=every(mas<ref(mas,1),barpos-enterBar);
cond4:=every(mid<ref(mid,2),barpos-enterBar);
dp2:=(cond1 or cond2 or cond3 or cond4 ) and barpos-enterBar>10;
if holding>0 and (dp1 or dp2) then
begin
        sell(1,2,marketr);
END


/////////////////写法二:耗时1分35秒
dp1:=cross(lower1,c);
cond1:=every(mid<mas,barpos-enterBar+1);
cond2:=every(mid<ref(mid,1),barpos-enterBar+1);
cond3:=every(mas<ref(mas,1),barpos-enterBar+1);
cond4:=every(mid<ref(mid,2),barpos-enterBar+1);
dp2:=(cond1 or cond2 or cond3 or cond4 ) and barpos-enterBar>10;
if holding>0 and (dp1 or dp2) then
begin
        sell(1,2,marketr);
END


/////////////////写法三:耗时5分51秒,说明pel语言不具备短路求值的功能
dp1:=cross(lower1,c);
dp2:=barpos-enterBar>10 and (every(mid<mas,barpos-enterBar) or every(mid<ref(mid,1),barpos-enterBar) or every(mas<ref(mas,1),barpos-enterBar) or every(mid<ref(mid,2),barpos-enterBar));
if holding>0 and (dp1 or dp2) then
begin
        sell(1,2,marketr);
END


/////////////////写法四:耗时1分33秒.说明exist函数不存在这个问题
dp1:=cross(lower1,c);
cond1:=not(exist(mid>mas,barpos-enterBar));
cond2:=not(exist(mid>ref(mid,1),barpos-enterBar));
cond3:=not(exist(mas>ref(mas,1),barpos-enterBar));
cond4:=not(exist(mid>ref(mid,2),barpos-enterBar));
dp2:=(cond1 or cond2 or cond3 or cond4 ) and barpos-enterBar>10;
if holding>0 and (dp1 or dp2) then
begin
        sell(1,2,marketr);
END
回复

使用道具 举报

35

主题

9409

帖子

5万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2024-12-18 10:24 | 显示全部楼层
every(mid<mas,barpos-enterBar);
barpos-enterBar=0时,代表从第一根k开始全部计算。
计算量肯定比barpos-enterBar+1(最小值是1,即只计算最近1根)的计算量大很多。

另外exist函数和every的的差异应该是算法上的区别。前者应该是找到成立即返回。而后者要一直算到最后位置才会返回。



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

使用道具 举报

158

主题

363

帖子

363

积分

等级: 免费版

注册:
2022-1-15
曾用名:
 楼主| 发表于 2024-12-29 09:58 | 显示全部楼层
我发现if(xx=0,1,h=hhv(h,xx))   当xx=0的时候h=hhv(h,xx)同样会计算.你们可以找个大样本测试数据跑一下就知道了. 我在跑优化的时候就发现
input:xx(0,0,5,1);
if(xx=0,1,h=hhv(h,xx)) ;
这句会导致优化卡死,改成xx(1,1,5,1)一下子就解决了.  建议你们优化一下if函数的逻辑,有助于提高常用函数if的运算效率.

截图202412290957201966.png
回复

使用道具 举报

2

主题

617

帖子

658

积分

Rank: 9Rank: 9Rank: 9

等级: 管理员

注册:
2021-5-10
曾用名:
发表于 2024-12-30 08:34 | 显示全部楼层
这和函数本身没有关系,是因为xx=0,在hhv(H,0)中代表取全部数据计算,自然计算量会很大。这个问题和4楼类似。
建议你提供可以复现的测试代码给我们。这样更有利于定位实际问题。
回复

使用道具 举报

158

主题

363

帖子

363

积分

等级: 免费版

注册:
2022-1-15
曾用名:
 楼主| 发表于 2024-12-30 09:16 | 显示全部楼层
我的意思是if(xx=0,1,h=hhv(h,xx))  当xx=0的时候h=hhv(h,xx)根本就没有必要进行运算
回复

使用道具 举报

35

主题

9409

帖子

5万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
wenarm
发表于 2024-12-30 09:30 | 显示全部楼层
Storm 发表于 2024-12-30 09:16
我的意思是if(xx=0,1,h=hhv(h,xx))  当xx=0的时候h=hhv(h,xx)根本就没有必要进行运算

逐k线计算中,hhv作为序列数据量类型的函数,他们必须都在每根k上都要有执行结果不支持将其选择性执行(这是底层计算机制要求) .  上面的代码等价于
HH:hhv(h,xx);
if(xx=0,1,h=hh) ;
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-6 06:03 , Processed in 0.272849 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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