金字塔决策交易系统

 找回密码
 

微信登录

微信扫一扫,快速登录

搜索
查看: 1360|回复: 4

淘来的sar的pyton源码,请问如何在金字塔内使用

[复制链接]

2

主题

9

帖子

9

积分

Rank: 1

等级: 新手上路

注册:
2022-8-6
曾用名:
发表于 2023-4-30 14:56 | 显示全部楼层 |阅读模式
def parabolic_sar(high, low, acceleration=0.02, max_acceleration=0.2):
    """
    计算抛物转向SAR指标
    :param high: 最高价序列
    :param low: 最低价序列
    :param acceleration: 加速因子,默认为0.02
    :param max_acceleration: 最大加速因子,默认为0.2
    :return: 抛物转向SAR指标序列
    """
    sar = [low[0]]
    af = acceleration
    ep = high[0]
    trend = 1  # 1表示上涨趋势,-1表示下跌趋势
    for i in range(1, len(high)):
        if trend == 1:
            if high[i] > ep:
                ep = high[i]
                af = min(af + acceleration, max_acceleration)
            sar.append(sar[-1] + af * (ep - sar[-1]))
            if sar[-1] > low[i]:
                sar[-1] = ep
                trend = -1
                ep = low[i]
                af = acceleration
        else:
            if low[i] < ep:
                ep = low[i]
                af = min(af + acceleration, max_acceleration)
            sar.append(sar[-1] + af * (ep - sar[-1]))
            if sar[-1] < high[i]:
                sar[-1] = ep
                trend = 1
                ep = high[i]
                af = acceleration
    return sar


回复

使用道具 举报

19

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2023-5-4 08:49 | 显示全部楼层
将High 和low 使用 history_bars  函数进行替换处理即可。函数说明参考:

https://www.weistock.com/docs/Py ... 2%E6%95%B0%E6%8D%AE

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

使用道具 举报

2

主题

9

帖子

9

积分

Rank: 1

等级: 新手上路

注册:
2022-8-6
曾用名:
 楼主| 发表于 2023-5-6 07:35 | 显示全部楼层
搞不定,能否给改写一下,最好用PEL语言改写,谢谢!
回复

使用道具 举报

19

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2023-5-6 09:16 | 显示全部楼层
[PEL] 复制代码
input:cyc(10,1,100,2);
runmode:0; //使用逐周期运行模式


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


variable:sarx=0;
variable:trendx=0;
variable:ep=0;
variable:af=0;


//计算高点低点的值放到if前面,防止前面语句直接退出导致最前cyc个周期的数据无法统计到
highprice:=ref(hhv(c,cyc),1);
lowprice:=ref(llv(c,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
  //看跌
  trendx:= -1;
  sarx:=highprice;
end
else
begin
  //看涨
  trendx:= 1;
  sarx:=lowprice;
end
goto endandshow;//跳转到末尾直接显示
end

//判断出这些日子数据的上涨,或者下跌
if trendx > 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
  trendx:=-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
  trendx := 1;
  ep := 1;
  af := step;
end
sarx := fsar;
end

//显示变量
endandshow@; //此为语句标号,gogo语句可以用这个标号直接跳转到这里
showsar:sarx;


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

使用道具 举报

2

主题

9

帖子

9

积分

Rank: 1

等级: 新手上路

注册:
2022-8-6
曾用名:
 楼主| 发表于 2023-5-7 08:35 | 显示全部楼层
谢谢
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-16 17:51 , Processed in 0.225624 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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