如何用Ta-Lib实现Python量化交易策略分析
如何用Ta-Lib实现Python量化交易策略分析
量化交易咋整?不少人看到这个词就头大。别急,今儿我带你用Ta-Lib这个神器玩转量化交易策略分析。Ta-Lib是个技术分析库,里面塞满了各种指标计算方法,用Python搞量化分析简直不要太爽。
Ta-Lib是个啥玩意儿
Ta-Lib,全名Technical Analysis Library,就是个技术分析工具箱。里面有啥?移动平均线、RSI、MACD、布林带...反正就是各种炫酷的技术指标都有。它是开源的,支持多种语言,Python当然也不在话下。
要用Ta-Lib,先得装好:
pip install TA-Lib
装好了,咱就可以开始浪了。
整点数据来玩玩
光有工具不行啊,得有数据吧。咱用tushare库搞点股票数据来耍耍:
import tushare as ts
import pandas as pd
# 别忘了替换成你自己的token
ts.set_token('你的tushare token')
pro = ts.pro_api()
# 获取某只股票的日K数据
df = pro.daily(ts_code='000001.SZ', start_date='20220101', end_date='20230101')
df = df.sort_values('trade_date')
这段代码就是用tushare搞了一年的平安银行日K数据。记得把token换成你自己的啊,别傻傻用我的。
上手Ta-Lib
好了,有了数据,咱们开始用Ta-Lib整活:
import talib
# 计算5日和20日移动平均线
df['MA5'] = talib.SMA(df['close'], timeperiod=5)
df['MA20'] = talib.SMA(df['close'], timeperiod=20)
# 计算MACD
df['MACD'], df['MACDSignal'], df['MACDHist'] = talib.MACD(df['close'])
# 计算RSI
df['RSI'] = talib.RSI(df['close'], timeperiod=14)
瞧瞧,三行代码就搞定了移动平均线、MACD和RSI。是不是觉得自己也能当个量化高手了?
整个策略试试
光有指标不行啊,得整个策略。咱们来个简单的:当5日线上穿20日线时买入,下穿时卖出。
def strategy(df):
df['Signal'] = 0
df.loc[df['MA5'] > df['MA20'], 'Signal'] = 1 # 买入信号
df.loc[df['MA5'] < df['MA20'], 'Signal'] = -1 # 卖出信号
return df
df = strategy(df)
这就是个最基础的均线策略。
当然,真实交易可不敢这么简单,不然分分钟被市场教做人。
来个回测
策略有了,得看看效果如何吧:
import numpy as np
df['Returns'] = df['close'].pct_change()
df['Strategy_Returns'] = df['Signal'].shift(1) * df['Returns']
df['Cumulative_Returns'] = (1 + df['Strategy_Returns']).cumprod()
print(f"策略收益率: {df['Cumulative_Returns'].iloc[-1] - 1:.2%}")
print(f"买入持有收益率: {df['close'].iloc[-1] / df['close'].iloc[0] - 1:.2%}")
这段代码计算了策略收益率和买入持有收益率。要是策略收益率比买入持有高,那咱们这个策略就还不错。
温馨提示:回测结果和实盘可能有天壤之别。别看回测牛逼哄哄,实盘可能就是另一个故事了。
所以,别急着真金白银上!
整点花活
Ta-Lib还能整点啥花活?来,看这:
# 计算布林带
df['upper'], df['middle'], df['lower'] = talib.BBANDS(df['close'])
# 识别K线形态
df['CDL_HAMMER'] = talib.CDLHAMMER(df['open'], df['high'], df['low'], df['close'])
布林带、K线形态识别,Ta-Lib都不在话下。你说炫不炫酷?
用Ta-Lib搞量化交易策略分析就是这么简单。当然,这只是冰山一角。真要玩转量化交易,还得下一番功夫。不过有了Ta-Lib这个利器,你已经领先一大步了。好了,今天就聊到这,下次再见!