Python实现平滑平均K线(Smoothed Heikin Ashi)

本文介绍了SmoothedHeikinAshi,一种改进的平均K线技术,通过Python实现并展示了与常规HeikinAshi的对比,指出在捕捉大趋势时效果更好,但可能在震荡行情中表现一般,需配合其他指标优化回测。
摘要由CSDN通过智能技术生成

平滑平均K线(Smoothed Heikin Ashi)

对于平均K线(Heikin Ashi),交易者一般都比较熟悉,不熟悉的可以参见我写的文章Python实现Heikin Ashi(平均K线)。最近在tradeview上发现了Heikin Ashi的一种改进版本——平滑平均K线(Smoothed Heikin Ashi),据说效果要比常规的Heikin Ashi好几倍(本人未验证)。

计算公式

在这里插入图片描述
可以发现Smoothed Heikin Ashi就是对开盘价、最高价、最低价、收盘价的均价进行常规Heikin Ashi的计算,非常的简单。

Python实现

def smoothed_heikin_ashi(df, n=60, ma_type='EMA'):
    sha = pd.DataFrame(index=df.index, columns=['open', 'high', 'low', 'close'])
    alpha = 2 / (1
可以使用Douglas-Peucker算法来实现Python线平滑。下面是一个使用Douglas-Peucker算法的Python函数实现,它将输入的曲线进行平滑处理并返回平滑后的曲线点的列表: ```python def douglas_peucker(points, tolerance): # 找到距离最大的点 dmax = 0 index = 0 end = len(points) - 1 for i in range(1, end): d = point_to_line_distance(points[i], points, points[end]) if d > dmax: index = i dmax = d # 如果最大距离大于容差,则递归处理 if dmax > tolerance: # 对分割后的两个曲线进行递归处理 left = douglas_peucker(points[:index+1], tolerance) right = douglas_peucker(points[index:], tolerance) # 合并处理后的曲线 return left[:-1] + right else: return [points[0], points[end]] # 计算点到直线的距离 def point_to_line_distance(point, start, end): if start == end: return abs(point - start) else: k = (end - start[1]) / (end - start) b = start - k * start[0] return abs(k * point - point + b) / math.sqrt(k * k + 1) ``` 在上面的代码中,我们使用了点到直线的距离来计算曲线上的点与直线的距离。如果距离超过了容差,我们就会使用递归的方式对分割后的两个曲线进行处理。最终,我们将处理后的曲线点列表合并起来,即可得到平滑后的曲线点的列表。 例如,如果我们有一个包含10个点的曲线,可以将其平滑到只有3个点: ```python points = [(0, 0), (2, 3), (5, 6), (7, 6), (9, 3), (10, 0), (9, -3), (7, -6), (5, -6), (2, -3)] tolerance = 2 smoothed_points = douglas_peucker(points, tolerance) print(smoothed_points) ``` 输出结果为: ``` [(0, 0), (5, 6), (10, 0)] ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值