如何将TradingView Pine Script的TTF指标转换为Python实现?
解决Trend Trigger Factor(TTF)指标Pine Script转Python的计算错误问题
核心逻辑对比
先明确原Pine Script中关键代码的含义:
buyPower = hh - nz(ll[length]) sellPower = nz(hh[length]) - ll
这里的hh是当前周期的最高价,ll是当前周期的最低价;[length]表示往前偏移length个周期,nz()函数是将NaN值替换为0。所以两行的实际逻辑是:
buyPower= 当前最高价 -length周期前的最低价(空值补0)sellPower=length周期前的最高价(空值补0) - 当前最低价
错误原因分析
你得到后期TTF全为0,大概率是以下问题:
- 错误使用滚动窗口(如
rolling().min()/rolling().max())计算ll和hh,而非直接取对应周期的原始高低价 - 偏移周期数设置错误(比如用
shift(1)代替shift(length)) - 未正确处理空值,或分母为0时未做特殊处理
正确Python实现代码
假设你使用Pandas处理行情数据,DataFrame包含high(最高价)和low(最低价)列:
import pandas as pd import numpy as np def calculate_ttf(df, length=10): # 获取length周期前的高低价,空值用0填充(对应Pine的nz函数) prev_low = df['low'].shift(length).fillna(0) prev_high = df['high'].shift(length).fillna(0) # 计算buyPower和sellPower buy_power = df['high'] - prev_low sell_power = prev_high - df['low'] # 计算TTF,处理分母为0的情况 denominator = buy_power + sell_power ttf = np.where(denominator == 0, 0, (buy_power - sell_power) / denominator * 100) df['ttf'] = ttf return df
使用示例
# 假设df是你的行情数据DataFrame df = calculate_ttf(df, length=10)
这样计算出来的TTF值就会和TradingView中的结果一致,不会出现后期全为0的问题。
内容的提问来源于stack exchange,提问作者YoYoYo
相关产品推荐
相关产品推荐

