基于macd、kdj、ma技术指标分析股票多空方向——应用开发3 计算股票相关技术指标数据

接上一节,我们获取了000001.SZ股票过去一年的历史数据stock_df,接下来我们就计算技术指标

所用包

pandas_ta

import pandas_ta as ta

关于pandas_ta 可以在GitHub - twopirllc/pandas-ta: Technical Analysis Indicators - Pandas TA is an easy to use Python 3 Pandas Extension with 130+ Indicators 这里了解更多

我们可以通过以下代码,了解pandas_ta的说明

import pandas_ta as ta

# Create a DataFrame so 'ta' can be used.
df = pd.DataFrame()

# Help about this, 'ta', extension
help(df.ta)

也可以通过一下代码,了解pandas_ta 目前含有的功能

df.ta.indicators()

Pandas TA - Technical Analysis Indicators - v0.3.14b0
Total Indicators & Utilities: 205
Abbreviations:
    aberration, above, above_value, accbands, ad, adosc, adx, alma, amat, ao, aobv, apo, aroon, atr, bbands, below, below_value, bias, bop, brar, cci, cdl_pattern, cdl_z, cfo, cg, chop, cksp, cmf, cmo, coppock, cross, cross_value, cti, decay, decreasing, dema, dm, donchian, dpo, ebsw, efi, ema, entropy, eom, er, eri, fisher, fwma, ha, hilo, hl2, hlc3, hma, hwc, hwma, ichimoku, increasing, inertia, jma, kama, kc, kdj, kst, kurtosis, kvo, linreg, log_return, long_run, macd, mad, massi, mcgd, median, mfi, midpoint, midprice, mom, natr, nvi, obv, ohlc4, pdist, percent_return, pgo, ppo, psar, psl, pvi, pvo, pvol, pvr, pvt, pwma, qqe, qstick, quantile, rma, roc, rsi, rsx, rvgi, rvi, short_run, sinwma, skew, slope, sma, smi, squeeze, squeeze_pro, ssf, stc, stdev, stoch, stochrsi, supertrend, swma, t3, td_seq, tema, thermo, tos_stdevall, trima, trix, true_range, tsi, tsignals, ttm_trend, ui, uo, variance, vhf, vidya, vortex, vp, vwap, vwma, wcp, willr, wma, xsignals, zlma, zscore

Candle Patterns:
    2crows, 3blackcrows, 3inside, 3linestrike, 3outside, 3starsinsouth, 3whitesoldiers, abandonedbaby, advanceblock, belthold, breakaway, closingmarubozu, concealbabyswall, counterattack, darkcloudcover, doji, dojistar, dragonflydoji, engulfing, eveningdojistar, eveningstar, gapsidesidewhite, gravestonedoji, hammer, hangingman, harami, haramicross, highwave, hikkake, hikkakemod, homingpigeon, identical3crows, inneck, inside, invertedhammer, kicking, kickingbylength, ladderbottom, longleggeddoji, longline, marubozu, matchinglow, mathold, morningdojistar, morningstar, onneck, piercing, rickshawman, risefall3methods, separatinglines, shootingstar, shortline, spinningtop, stalledpattern, sticksandwich, takuri, tasukigap, thrusting, tristar, unique3river, upsidegap2crows, xsidegap3methods

计算MACD、KDJ、5 10 20MA

macd(close, fast=None, slow=None, signal=None, talib=None, offset=None, **kwargs)

这里需要的参数close是股票每日收盘价,即stock_df [ ' close ' ] 的数据,fast、slow、signal默认是12、26、9可以根据实际需要更改数值

#MACD
macd_df = ta.macd(stock_df['close'])

macd_df

 输出数据如下

MACD_12_26_9的数据表示DIF线、MACDs_12_26_9的数据表示DEA线、MACDh_12_26_9的数据表示柱方图 


 kdj(high=None, low=None, close=None, length=None, signal=None, offset=None, **kwargs)

这里需要的参数high、low、close分别是股票每日最高价、最低价、收盘价,即stock_df [ ' high ' ] 、stock_df [ ' low ' ] 、stock_df [ ' close ' ] 的数据,length、signal默认是9、3可以根据实际需要更改数值 

#KDJ
kdj_df = ta.kdj(stock_df['high'],stock_df['low'],stock_df['close'])

kdj_df

输出数据如下

 

 K_9_3的数据表示K线、D_9_3的数据表示D线、J_9_3的数据表示J线


sma(close, length=None, talib=None, offset=None, **kwargs)

 sma(simple moving average)即普通均线,这里需要的参数close是股票每日收盘价,即stock_df [ ' close ' ] 的数据,length是天数,默认是10天,可以根据实际需要更改数值。这里需要显示的分别是5天均线、10天均线、20天均线。

由于返回的值是series,我们需要转换为DataFrame。

#均线 5、10、20天
ma5_df = pd.DataFrame(ta.sma(stock_df['close'],length=5))
ma10_df = pd.DataFrame(ta.sma(stock_df['close'],length=10))
ma20_df = pd.DataFrame(ta.sma(stock_df['close'],length=20))

 把计算所得结果用concat函数连结到total_df表示,用于后续分析使用

#连接所有技术指标结果与收盘价以列形式在一个DataFrame
total_df = pd.concat([macd_df,kdj_df,ma5_df,ma10_df,ma20_df,stock_df['close']],axis=1)

total_df

 输出数据如下

将代码封装在get_technical函数里,实现total_df=get_technical(stock_df)

def get_technical(stock_df):
    #MACD
    macd_df = ta.macd(stock_df['close'])
    #KDJ
    kdj_df = ta.kdj(stock_df['high'],stock_df['low'],stock_df['close'])
    #均线 5、10、20天
    ma5_df = pd.DataFrame(ta.sma(stock_df['close'],length=5))
    ma10_df = pd.DataFrame(ta.sma(stock_df['close'],length=10))
    ma20_df = pd.DataFrame(ta.sma(stock_df['close'],length=20))

    #连接所有技术指标结果与收盘价以列形式在一个DataFrame
    total_df = pd.concat([macd_df,kdj_df,ma5_df,ma10_df,ma20_df,stock_df['close']],axis=1)
    #返回对应技术指标用于后面画图使用
    return macd_df,kdj_df,ma5_df,ma10_df,ma20_df,total_df

完整代码

import tushare as ts
import pandas as pd
import datetime
import pandas_ta as ta

token='你的token'
ts.set_token(token)
pro=ts.pro_api()

#定义获取股票历史数据函数
def get_stock(num):
    stocknum=num
    today = datetime.datetime.today()
    startday=today+datetime.timedelta(days=-365)
    today = today.strftime('%Y%m%d')
    startday =startday.strftime('%Y%m%d')

    stock_df= pro.daily(ts_code=stocknum, start_date=startday,end_date=today)

    stock_df['trade_date'] = pd.to_datetime(stock_df['trade_date'])
    stock_df.set_index('trade_date',inplace=True)
    stock_df=stock_df.rename(columns={'vol':'volume'})
    stock_df=stock_df.iloc[::-1]
    return stock_df

#定义计算技术指标函数
def get_technical(stock_df):
    #MACD
    macd_df = ta.macd(stock_df['close'])
    #KDJ
    kdj_df = ta.kdj(stock_df['high'],stock_df['low'],stock_df['close'])
    #均线 5、10、20天
    ma5_df = pd.DataFrame(ta.sma(stock_df['close'],length=5))
    ma10_df = pd.DataFrame(ta.sma(stock_df['close'],length=10))
    ma20_df = pd.DataFrame(ta.sma(stock_df['close'],length=20))

    #连接所有技术指标结果与收盘价以列形式在一个DataFrame
    total_df = pd.concat([macd_df,kdj_df,ma5_df,ma10_df,ma20_df,stock_df['close']],axis=1)
    return macd_df,kdj_df,ma5_df,ma10_df,ma20_df,total_df


get_stocknum =pd.read_excel('股票代码.xlsx')
stock_df = get_stock(get_stocknum.iloc[0,0])
macd_df,kdj_df,ma5_df,ma10_df,ma20_df,total_df=get_technical(stock_df)

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宇文终君

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值