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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM