二十二、区块量化 其它常用分析指标
talib 不是万能的、有些其它指标 如:BBI、PSY、BIAS等这些指标是没有的
def BBI(df, n1=3, n2=6, n3=12, n4=24):
"""
多空指数
"""
bbi = (MA(df["close"], n1) + MA(df["close"], n2) + MA(df["close"], n3) + MA(df["close"], n4)) / 4
new_df = pd.DataFrame(data=list(bbi), columns=["bbi"])
return new_df
"""
多空指数
"""
bbi = (MA(df["close"], n1) + MA(df["close"], n2) + MA(df["close"], n3) + MA(df["close"], n4)) / 4
new_df = pd.DataFrame(data=list(bbi), columns=["bbi"])
return new_df
def PSY(df, n=12, m=6):
"""
心理线
"""
new_df = pd.DataFrame()
new_df["psy"] = COUNT(df["close"] > df["close"].shift(1), n) / n * 100
new_df["psyma"] = MA(new_df["psy"], m)
return new_df
"""
心理线
"""
new_df = pd.DataFrame()
new_df["psy"] = COUNT(df["close"] > df["close"].shift(1), n) / n * 100
new_df["psyma"] = MA(new_df["psy"], m)
return new_df
def BIAS(df, n=6):
"""
乖离率
"""
ma1 = MA(df["close"], n)
new_df = pd.DataFrame(data=list((df["close"] - ma1) / ma1 * 100), columns=["bias"])
return new_df
"""
乖离率
"""
ma1 = MA(df["close"], n)
new_df = pd.DataFrame(data=list((df["close"] - ma1) / ma1 * 100), columns=["bias"])
return new_df
def MA(close, n=5):
"""
简单移动平均线
"""
ma_data = close.rolling(n).mean()
return ma_data
"""
简单移动平均线
"""
ma_data = close.rolling(n).mean()
return ma_data
def COUNT(cond, n):
"""
统计n周期中满足cond条件的个数
"""
if n == 0: # 从第一个有效值开始统计
count_data = pd.Series(np.where(cond, 1, 0).cumsum())
else: # 统计每个n周期
count_data = pd.Series(pd.Series(np.where(cond, 1, 0)).rolling(n).sum())
return count_data
"""
统计n周期中满足cond条件的个数
"""
if n == 0: # 从第一个有效值开始统计
count_data = pd.Series(np.where(cond, 1, 0).cumsum())
else: # 统计每个n周期
count_data = pd.Series(pd.Series(np.where(cond, 1, 0)).rolling(n).sum())
return count_data
调用方法:
bbi = BBI(df, 6, 12, 24, 48)
if df['close'].values[-2] < bbi.values[-2] and df['close'].values[-1] >= bbi.values[-1]:
order.up_cross(symbol, 'bbi 策略做多')
if df['close'].values[-2] > bbi.values[-2] and df['close'].values[-1] <= bbi.values[-1]:
order.down_cross(symbol, 'bbi 策略做空')
psy = PSY(df, 10, 10)
if (psy['psy'].iloc[-2] < 30) and (psy['psy'].iloc[-1] >= 30):
order.up_cross(symbol, 'psy 策略做多')
if (psy['psy'].iloc[-2] > 70) and (psy['psy'].iloc[-1] <= 70):
order.down_cross(symbol, 'psy 策略做空')
bias = BIAS(df, 12)
if (bias['bias'].iloc[-2] > -10) and (bias['bias'].iloc[-1] <= -10):
order.up_cross(symbol, 'bias 策略做多')
if (bias['bias'].iloc[-2] < 10) and (bias['bias'].iloc[-1] >= 10):
order.down_cross(symbol, 'bias 策略做空')
if df['close'].values[-2] < bbi.values[-2] and df['close'].values[-1] >= bbi.values[-1]:
order.up_cross(symbol, 'bbi 策略做多')
if df['close'].values[-2] > bbi.values[-2] and df['close'].values[-1] <= bbi.values[-1]:
order.down_cross(symbol, 'bbi 策略做空')
psy = PSY(df, 10, 10)
if (psy['psy'].iloc[-2] < 30) and (psy['psy'].iloc[-1] >= 30):
order.up_cross(symbol, 'psy 策略做多')
if (psy['psy'].iloc[-2] > 70) and (psy['psy'].iloc[-1] <= 70):
order.down_cross(symbol, 'psy 策略做空')
bias = BIAS(df, 12)
if (bias['bias'].iloc[-2] > -10) and (bias['bias'].iloc[-1] <= -10):
order.up_cross(symbol, 'bias 策略做多')
if (bias['bias'].iloc[-2] < 10) and (bias['bias'].iloc[-1] >= 10):
order.down_cross(symbol, 'bias 策略做空')
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 我与微信审核的“相爱相杀”看个人小程序副业
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· spring官宣接入deepseek,真的太香了~