Два пакета для расчета технических индикаторов акций | Python Theme Month

алгоритм задняя часть

Команда установки выглядит следующим образом:

pip install stockstats
conda install -c conda-forge ta-lib

Вы можете проверить значение каждого индикатора на веб-сайте mbalib. Например:wiki.mbalib.com/wiki/Тройное экспоненциальное сглаживание…

сокращение описывать
K Значение K в KDJ
D Значение D в KDJ
J Значение J в KDJ
MACD Схождение и разница скользящих средних
MOM Линия импульса
BIAS скорость отклонения
CMO Осциллятор Chande Momentum
TRIX Тройное экспоненциальное сглаженное среднее
OBV всплеск энергии
ROC индикатор скорости изменения
AMA Индикатор разницы скользящих средних параллельных линий
VR Скорость изменения объема
PSY Индикатор ментальной линии
Force Index Индикатор индекса силы
DPO линия, ограничивающая диапазон
VHF Индикатор пересечения фильтров
RVI Относительный индекс жизнеспособности

выполнить

Сначала импортируйте несколько пакетов, помимо talib, numpy и pandas, есть stockstats, pandas_talib

import pandas as pd
import numpy as np
import talib
import stockstats
import pandas_talib
'''
这里虽然没有定义df这个变量,但这很明显就是dateframe格式的某只股票基础数据
包括开盘价、收盘价、最高价、最低价和成交量
建议用tushare来获取数据(当然仅限日数据)
'''
stockStat = stockstats.StockDataFrame.retype(df)
close = df.close
highPrice = df.high
lowPrice = df.low
volume = df.volume

Затем выпустите некоторые индикаторы, которые были реализованы в других библиотеках.

df.rename(columns={'close': 'Close', 'volume': 'Volume'}, inplace=True)

sig_k , sig_d  = talib.STOCH(np.array(highPrice), np.array(lowPrice),
np.array(close), fastk_period=9,slowk_period=3,
slowk_matype=0, slowd_period=3, slowd_matype=0)
sig_j = sig_k * 3 - sig_d  * 2
sig = pd.concat([sig_k, sig_d, sig_j], axis=1, keys=['K', 'D', 'J'])
sig['MACD'], MACDsignal, MACDhist = talib.MACD(np.array(close), fastperiod=6,
slowperiod=12, signalperiod=9)
sig['MOM'] = talib.MOM(np.array(close), timeperiod=5)
sig['CMO'] = talib.CMO(close, timeperiod=10)
sig['TRIX'] = talib.TRIX(close, timeperiod=14)
sig['OBV'] = talib.OBV(close, volume)
sig['ROC'] = talib.ROC(close, timeperiod=10)
sig['VR'] = stockStat['vr']
sig['Force_Index'] = pandas_talib.FORCE(df, 12)['Force_12']

BIAS

def BIAS(close, timeperiod=20):
    if isinstance(close,np.ndarray):
        pass
    else:
        close = np.array(close)
        MA = talib.MA(close,timeperiod=timeperiod)
        return (close-MA)/MA

AMA

def AMA(stockStat):
    return talib.MA(stockStat['dma'],  timeperiod=10)

PSY


def PSY(priceData, period):
    difference = priceData[1:] - priceData[:-1]
    difference = np.append(0, difference)
    difference_dir = np.where(difference > 0, 1, 0)
    psy = np.zeros((len(priceData),))
    psy[:period] *= np.nan
    for i in range(period, len(priceData)):
    psy[i] = (difference_dir[i-period+1:i+1].sum()) / period
    return psy*100

DPO

def DPO(close):  
    p = talib.MA(close, timeperiod=11)  
    p.shift()  
    return close-p

VHF

def VHF(close):
    LCP = talib.MIN(close, timeperiod=28)
    HCP = talib.MAX(close, timeperiod=28)
    NUM = HCP - LCP
    pre = close.copy()
    pre = pre.shift()
    DEN = abs(close-close.shift())
    DEN = talib.MA(DEN, timeperiod=28)*28
    return NUM.div(DEN)
def RVI(df):
    close = df.close
    open = df.open
    high = df.high
    low = df.low
    X = close-open+2*(close.shift()-open.shift())+
    2*(close.shift(periods=2)-open.shift(periods=2))*(close.shift(periods=3)-
    open.shift(periods=3))/6
    Y = high-low+2*(high.shift()-low.shift())+
    2*(high.shift(periods=2)-low.shift(periods=2))*(high.shift(periods=3)-
    low.shift(periods=3))/6
    Z = talib.MA(X, timeperiod=10)*10
    D = talib.MA(Y, timeperiod=10)*10
    return Z/D

Справочный блог

кожа skin.org/project/stones…

anaconda.org/con big-forge…

woohoo.geek-share.com/detail/2749…