backtrader学习笔记(二).RSI

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @license : (C) Copyright 2017-2020.
# @contact : [email protected]
# @Time    : 2020/5/23 13:32
# @File    : backtrade2.py
# @Software: PyCharm
# @desc    :

from __future__ import (absolute_import, division, print_function, unicode_literals)
import pandas as pd
import backtrader as bt
from datetime import datetime
import tushare as ts


class MyStrategy(bt.Strategy):
    params = (('short', 30),
              ('long', 70),)

    def __init__(self):
        self.rsi = bt.indicators.RSI_SMA(
            self.data.close, period=21)

    def next(self):
        if not self.position:
            if self.rsi < self.params.short:
                self.buy()
        else:
            if self.rsi > self.params.long:
                self.sell()


# 以股票002537为例
df = ts.get_k_data('300303', start='2018-01-01')
df.index = pd.to_datetime(df.date)
# df['openinterest'] = 0
df = df[['open', 'high', 'low', 'close', 'volume']]
data = bt.feeds.PandasData(dataname=df,
                           fromdate=datetime(2019, 5, 1),
                           todate=datetime(2020, 6, 15))
# 初始化cerebro回测系统设置
cerebro = bt.Cerebro()
# 加载数据
cerebro.adddata(data)
# 将交易策略加载到回测系统中
cerebro.addstrategy(MyStrategy)
# 设置初始资本为100,000
cerebro.broker.setcash(100000.0)
# 每次固定交易数量
cerebro.addsizer(bt.sizers.FixedSize, stake=1000)
# 手续费
cerebro.broker.setcommission(commission=0.0025)

print('初始资金: %.2f' % cerebro.broker.getvalue())
cerebro.addanalyzer(bt.analyzers.SharpeRatio, _name='SharpeRatio')
cerebro.addanalyzer(bt.analyzers.DrawDown, _name='DW')
results = cerebro.run()
strat = results[0]
print('最终资金: %.2f' % cerebro.broker.getvalue())
print('夏普比率:', strat.analyzers.SharpeRatio.get_analysis())
print('回撤指标:', strat.analyzers.DW.get_analysis())
cerebro.plot()

结果:

初始资金: 100000.00
最终资金: 100537.25
夏普比率: OrderedDict([('sharperatio', -2.7226617031177307)])
回撤指标: AutoOrderedDict([('len', 23), ('drawdown', 0.4554579456371337), ('moneydown', 460.0), ('max', AutoOrderedDict([('len', 23), ('drawdown', 0.97032344940085), ('moneydown', 980.0)]))])

 

你可能感兴趣的:(量化投资,tushare,backtrader)