akshare量化股票市场情绪指标ARBR
# https://zhuanlan.zhihu.com/p/61488013/ # 先引入后面可能用到的包(package) import pandas as pd import numpy as np import matplotlib.pyplot as plt import akshare as ak import talib as ta '''人气指标(AR)和意愿指标(BR) AR指标是通过比较某个周期内开盘价与最高、最低价,来反映市场买卖人气。 计算公式为:N日AR=(N日内(H-O)之和)/(N日内(O-L)之和)*100。 BR指标是通过比较一段周期内收盘价在该周期价格波动中的地位,来反映市场买卖意愿程度。 计算公式为:N日BR=(N日内(H-YC)之和)/N日内(YC-L)之和)*100。 其中,O 为当日开盘价,H 为当日最高价,L 为当日最低价,YC 为前一交易日的收盘价,N 为设定的时间参数,一般原始参数日设定为 26 日,计算周期可以根据自己的经验或回测结果进行修正。 双方的分界线是 100,100 以上是多方优势,100 以下是空方优势。 买入信号: BR通常运行在AR上方,一旦BR跌破AR并在AR之下运行时,表明市场开始筑底,视为买进信号; BR<40,AR<60: 空方力量较强,但随时可能反转上涨,考虑买进。 卖出信号: BR>400,AR>180,多方力量极强,但随时可能反转下跌,考虑卖出; BR快速上升,AR并未上升而是小幅下降或横盘,视为卖出信号。 背离信号: AR、BR指标的曲线走势与股价K线图上的走势正好相反。 顶背离: 当股价K线图上的股票走势一峰比一峰高,股价一直向上涨,而AR、BR指标图上的走势却一峰比一峰低,说明出现顶背离,股价短期内将高位反转,是比较强烈的卖出信号。 底背离: 当股价K线图上的股票走势一底比一底低,股价一直向下跌,而AR、BR指标图上的走势却一底比一底高,说明出现底背离,股价短期内将低位反转,是比较强烈的买入信号。 ''' # 正常显示画图时出现的中文和负号 from pylab import mpl mpl.rcParams['font.sans-serif'] = ['SimHei'] mpl.rcParams['axes.unicode_minus'] = False # 引入TA-Lib库 import talib as ta from datetime import datetime, timedelta index2 = {'上证综指': '000001', '深证成指': '399001', '沪深300': '000300', '创业板指': '399006', '上证50': '000016', '中证500': '000905', '中小板指': '399005', '上证180': '000010'} index={'上证综指': '000001'} n = 250 tineperiod=26 for code in index.values(): t = datetime.now() t0 = t - timedelta(n) start = t0.strftime('%Y%m%d') end = t.strftime('%Y%m%d') index_zh_a_hist_df = ak.index_zh_a_hist(symbol=code, period="daily", start_date=start, end_date=end) # print(index_zh_a_hist_df) index_zh_a_hist_df.index = pd.to_datetime(index_zh_a_hist_df['日期']) df = index_zh_a_hist_df.sort_index() df['HO'] = df['最高'] - df['开盘'] df['OL'] = df['开盘'] - df['最低'] df['HCY'] = df['最高'] - df['收盘'].shift(1) df['CYL'] = df['收盘'].shift(1) - df['最低'] # 计算AR、BR指标 df['AR'] = ta.SUM(df.HO, timeperiod=tineperiod) / ta.SUM(df.OL, timeperiod=tineperiod) * 100 df['BR'] = ta.SUM(df.HCY, timeperiod=tineperiod) / ta.SUM(df.CYL, timeperiod=tineperiod) * 100 # print(df['AR'].values[tineperiod-1:]) # print(df['BR'].values[tineperiod-1:]) for i in df['AR'].values[tineperiod-1:]: for j in df['BR'].values[tineperiod-1:]: if i<=100 and j<=100: print('空方优势') if 60>i and i>j and j<40: print('随时可能反转上涨,考虑买进') elif i>=100 and j>=100: print('多方优势') if 180 < i and i < j and j > 400: print('可能反转下跌,考虑卖出') result= df[['收盘', 'AR', 'BR']].dropna() result['收盘'].plot(color='g', figsize=(14, 5)) plt.xlabel('') plt.title(code + '价格走势', fontsize=15) df[['AR', 'BR']].plot(figsize=(14, 5)) plt.xlabel('') plt.show()
风雨兼程,前程可待!