金字塔决策交易系统

用户名  找回密码
 

微信登录

微信扫一扫,快速登录

帖子
查看: 2174|回复: 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


回复

举报

21

主题

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语言改写,谢谢!
回复

举报

21

主题

1万

帖子

1万

积分

Rank: 8Rank: 8

等级: 超级版主

注册:
2021-5-18
曾用名:
FireScript
发表于 2023-5-6 09:16 | 显示全部楼层
[PEL] 复制代码
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
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, 2025-8-9 12:19 , Processed in 0.104284 second(s), 22 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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