backtrader学习笔记(二).RSI

 技术交流微信【xicebloodx】,仅限交流,骚扰即拉黑,加微信请注明【技术交流】。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @license : (C) Copyright 2017-2020.
# @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)]))])

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值