金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 7700|回复: 13

6.23涉及到 exit goto等语句编译后出现异常

[复制链接]

12

主题

35

帖子

35

积分

Rank: 1

等级: 新手上路

注册:
2021-9-10
曾用名:
发表于 2022-5-5 21:27 | 显示全部楼层 |阅读模式
//sar是个很有用的处理止损功能的函数,由于算法特殊,普通的软件的公式系统是无法进行描述的,
//这里我们将向大家展示金字塔PEL语言强大的算法描述功能,可以简单实现SAR算法功能。
//此外,用户可以通过该公式算法,加入自己的代码,进行特定的实盘操作。

INPUT:CYC(10,1,100,2);
RUNMODE:0; //使用逐周期运行模式

//保证variable声明的变量都尽量在公式的最前面,防止带有IF语句的分支执行影响变量的初始化
variable:Step = 2 / 100; //步长
variable:fMax = 20 / 100; //最大值

variable:sarx=0;
variable:Trend1=0;
variable:EP=0;
variable:AF=0;

//计算高点低点的值放到IF前面,防止前面语句直接退出导致最前CYC个周期的数据无法统计到
highprice:=ref(hhv(high,cyc),1);
lowPrice:=ref(llv(low,cyc),1);

原始SAR:SAR(10,2,20);

if barpos <= Cyc then
exit;//不到CYC的统计周期,直接退出等待下个周期再做判断
if barpos = cyc+1 then
begin
af:=Step;
ep:=-1;
if (high[barpos]-high[barpos-1])+(low[barpos]-low[barpos-1]) > 0 then
begin
  //看跌
  Trend1:= -1;
  sarx:=highprice;
end
else
begin
  //看涨
  Trend1:= 1;
  sarx:=lowPrice;
end
GOTO ENDANDSHOW;//跳转到末尾直接显示
End
//判断出这些日子数据的上涨,或者下跌
if Trend1 > 0 then
begin
//是否为跳转标志
if ep > 0 then
begin
  sarx:=lowPrice;
  EP:=-1;
  GOTO ENDANDSHOW;//跳转到末尾直接显示
end

//如果今日最高价大于前N的最高价,加速因子需要增加
if high > highprice then
begin
  af := af+step;
  if af > fmax then
    af := fmax;
end

fsar := sarx + af * (highprice - sarx);
//是否跳转
if fsar > low then
begin
  trend1:=-1;
  ep:=1;
  af:=step;
end
sarx:=fsar;
end
else
begin
if ep > 0 then
begin
  sarx:=highprice;
  ep:=-1;
  GOTO ENDANDSHOW; //跳转到末尾直接显示
end

//看跌
if low < lowPrice then
begin
  af := af + step;
  if af > fmax then
    af := fmax;
end

fsar := sarx + af * (lowprice-sarx);

//是否跳转
if fSar < High then
begin
  Trend1 := 1;
  EP := 1;
  AF := Step;
end
sarx := fSar;
end
//显示变量
ENDANDSHOW@; //此为语句标号,GOGO语句可以用这个标号直接跳转到这里
ShowSar:sarx;


hc10:hhv(close,10);
lc10:llv(close,10);





上述公式老版本运行正常,老版本导出放入6.23后不编译能运作,编译后直接报错。
回复

使用道具 举报

12

主题

35

帖子

35

积分

Rank: 1

等级: 新手上路

注册:
2021-9-10
曾用名:
 楼主| 发表于 2022-5-5 23:36 来自手机 | 显示全部楼层
本周期  跨周期引用  全出错
回复

使用道具 举报

44

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2022-5-5 23:37 | 显示全部楼层

//sar是个很有用的处理止损功能的函数,由于算法特殊,普通的软件的公式系统是无法进行描述的,
//这里我们将向大家展示金字塔PEL语言强大的算法描述功能,可以简单实现SAR算法功能。
//此外,用户可以通过该公式算法,加入自己的代码,进行特定的实盘操作。
hc10:=hhv(close,10);
lc10:=llv(close,10);
INPUT:CYC(10,1,100,2);
RUNMODE:0; //使用逐周期运行模式

//保证variable声明的变量都尽量在公式的最前面,防止带有IF语句的分支执行影响变量的初始化
variable:Step = 2 / 100; //步长
variable:fMax = 20 / 100; //最大值

variable:sarx=0;
variable:Trend1=0;
variable:EP=0;
variable:AF=0;

//计算高点低点的值放到IF前面,防止前面语句直接退出导致最前CYC个周期的数据无法统计到
highprice:=ref(hhv(high,cyc),1);
lowPrice:=ref(llv(low,cyc),1);

原始SAR:SAR(10,2,20);

if barpos <= Cyc then
exit;//不到CYC的统计周期,直接退出等待下个周期再做判断
if barpos = cyc+1 then
begin
af:=Step;
ep:=-1;
if (high[barpos]-high[barpos-1])+(low[barpos]-low[barpos-1]) > 0 then
begin
  //看跌
  Trend1:= -1;
  sarx:=highprice;
end
else
begin
  //看涨
  Trend1:= 1;
  sarx:=lowPrice;
end
GOTO ENDANDSHOW;//跳转到末尾直接显示
End
//判断出这些日子数据的上涨,或者下跌
if Trend1 > 0 then
begin
//是否为跳转标志
if ep > 0 then
begin
  sarx:=lowPrice;
  EP:=-1;
  GOTO ENDANDSHOW;//跳转到末尾直接显示
end

//如果今日最高价大于前N的最高价,加速因子需要增加
if high > highprice then
begin
  af := af+step;
  if af > fmax then
    af := fmax;
end

fsar := sarx + af * (highprice - sarx);
//是否跳转
if fsar > low then
begin
  trend1:=-1;
  ep:=1;
  af:=step;
end
sarx:=fsar;
end
else
begin
if ep > 0 then
begin
  sarx:=highprice;
  ep:=-1;
  GOTO ENDANDSHOW; //跳转到末尾直接显示
end

//看跌
if low < lowPrice then
begin
  af := af + step;
  if af > fmax then
    af := fmax;
end

fsar := sarx + af * (lowprice-sarx);

//是否跳转
if fSar < High then
begin
  Trend1 := 1;
  EP := 1;
  AF := Step;
end
sarx := fSar;
end
//显示变量
ENDANDSHOW@; //此为语句标号,GOGO语句可以用这个标号直接跳转到这里
ShowSar:sarx;

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

使用道具 举报

44

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
发表于 2022-5-5 23:38 | 显示全部楼层
编译时候有提示的,改进方法就是看这个链接
截图202205052338016385.png
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

12

主题

35

帖子

35

积分

Rank: 1

等级: 新手上路

注册:
2021-9-10
曾用名:
 楼主| 发表于 2022-5-5 23:49 来自手机 | 显示全部楼层
这个是简化版的逻辑,如果后边是几百行的代码,很多其他赋值和逻辑,怎么改?旧版本正常新版本出现异常,难道不是问题吗
回复

使用道具 举报

0

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
gxx978
发表于 2022-5-6 09:09 | 显示全部楼层
这个只是风险提示,并不是编译不通过,新版上会增加一些风险提示,只是说某些特定的情况下,如果把exit在统计类函数之前就退出程序计算,会使得计算结果出现异常,从程序优化角度来看,是建议把exit放在之后统计类函数之后再运行,如果你不想要这个提醒,那在代码最前面加上WARNING_DISABLE:2;
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

12

主题

35

帖子

35

积分

Rank: 1

等级: 新手上路

注册:
2021-9-10
曾用名:
 楼主| 发表于 2022-5-6 09:27 | 显示全部楼层
5.X版本运作正常,到6.23这里就不行了
截图202205060926521350.png
截图202205060926596575.png
回复

使用道具 举报

0

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
gxx978
发表于 2022-5-6 09:36 | 显示全部楼层
这是新版修正的问题,这是因为在旧版本上的用法发现在某种情况下会造成策略运行异常,新版上做了限制,并提示了风险,建议把统计类的函数放在exit前面,来规避可能性的风险。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

12

主题

35

帖子

35

积分

Rank: 1

等级: 新手上路

注册:
2021-9-10
曾用名:
 楼主| 发表于 2022-5-6 09:41 | 显示全部楼层
我看是新版带来的问题才对吧?从2.X到5.X都可以运作的代码,到这却成了问题。
回复

使用道具 举报

0

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
gxx978
发表于 2022-5-6 09:51 | 显示全部楼层
针对返回结果是解释错误的问题,这个我们会反馈给开发的。
金字塔提供一对一VIP专业技术指导服务,技术团队实时响应您的日常使用问题与策略编写。联系电话:021-20339086
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-30 00:58 , Processed in 0.179477 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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