weixin_51064212 2022-02-06 22:48 采纳率: 100%
浏览 68
已结题

backtrader 回测了十几次 初始资金和最终资金一直一样

编码如下:


```python
from __future__ import (absolute_import, division, print_function,
                        unicode_literals)
import datetime
import backtrader as bt  # 导入 Backtrader
import backtrader.indicators as btind  # 导入策略分析模块
import backtrader.feeds as btfeeds  # 导入数据模块
import tushare as ts
import pandas as pd

class TestStrategy(bt.Strategy):
    # 可选,设置回测的可变参数:如移动均线的周期
    # params = (
    #     (..., ...),  # 最后一个“,”最好别删!
    # )

    def log(self, txt, dt=None):
        '''可选,构建策略打印日志的函数:可用于打印订单记录或交易记录等'''
        dt = dt or self.datas[0].datetime.date(0)
        print('%s, %s' % (dt.isoformat(), txt))

    def __init__(self):
        '''必选,初始化属性、计算指标等'''
        #移动平均线初始化

        self.dataclose=self.datas[0].close
        self.sma5=btind.MovingAverageSimple(self.dataclose,period=5)
        self.sma10=btind.MovingAverageSimple(self.dataclose,period=10)

        self.order = None

    def notify_order(self, order):
        '''可选,打印订单信息'''
        # 等待订单提交、订单被cerebro接受
        pass 

        # 等待订单完成
        if order.status in [order.Completed]:
            if order.isbuy():
                self.log(
                    'BUY EXECUTED, Price: %.2f, Cost: %.2f, Comm %.2f' %
                    (order.executed.price,
                     order.executed.value,
                     order.executed.comm))

            else:
                self.log(
                    'SELL EXECUTED, Price: %.2f, Cost: %.2f, Comm %.2f' %
                    (order.executed.price,
                     order.executed.value,
                     order.executed.comm))

            # 如果订单保证金不足,将不会完成,而是执行以下拒绝程序
        elif order.status in [order.Canceled, order.Margin, order.Rejected]:
            self.log('Order Canceled/Margin/Rejected')
        self.order =None

    def notify_trade(self, trade):
        '''可选,打印交易信息'''
        if not trade.isclosed:
            return

        self.log('OPERATION PROFIT, GROSS %.2f, NET %.2f' %
             (trade.pnl, trade.pnlcomm))  # pnl:盈利  pnlcomm:手续费


    def next(self):
        '''必选,编写交易策略逻辑'''
        if self.order:
            return
        if not self.position :
            if self.sma5[0] > self.sma10[0]and self.sma5[-1] < self.sma10[-1]:
                self.order = self.buy()
        else:
            if self.sma5[0] < self.sma10[0] and self.sma5[-1] > self.sma10[-1] :
                self.order = self.sell()


if __name__ == '__main__':
    cerebro=bt.Cerebro ()
    cerebro.optstrategy(TestStrategy)

    cerebro .broker .set_cash(100000.0)
    cerebro .broker .setcommission(commission= 0.0005)

    df = ts.get_k_data(code='600519', start='2000-01-01')
    df['date'] = pd.to_datetime(df['date'])
    df.set_index('date', inplace=True)
    df = df.loc[:, :"volume"]
    df['openinterest'] = 0
    df.to_csv('./maotao.csv')
    dataframe = pd.read_csv('./maotao.csv',parse_dates= True ,index_col= 0)
    data=btfeeds .PandasData (dataname=dataframe ,fromdate=datetime.datetime(2010,1,1),todate=datetime.datetime(2022,1,23) )

    cerebro .adddata(data)

    print('Starting Portfolio Value: %.2f' % cerebro.broker.getvalue())
    # 启动回测
    cerebro.run()
    # 打印回测完成后的资金
    print('Final Portfolio Value: %.2f' % cerebro.broker.getvalue())

执行结果如下:

Starting Portfolio Value: 100000.00
2018-12-21, OPERATION PROFIT, GROSS -18.00, NET -18.58
2019-01-04, BUY EXECUTED, Price: 587.28, Cost: 587.28, Comm 0.29
2019-02-25, SELL EXECUTED, Price: 730.75, Cost: 587.28, Comm 0.37
2019-02-25, OPERATION PROFIT, GROSS 143.47, NET 142.81
2019-02-28, BUY EXECUTED, Price: 737.90, Cost: 737.90, Comm 0.37
2019-03-12, SELL EXECUTED, Price: 763.82, Cost: 737.90, Comm 0.38
2019-03-12, OPERATION PROFIT, GROSS 25.92, NET 25.17
2019-03-19, BUY EXECUTED, Price: 803.00, Cost: 803.00, Comm 0.40
2019-03-28, SELL EXECUTED, Price: 793.43, Cost: 803.00, Comm 0.40
2019-03-28, OPERATION PROFIT, GROSS -9.57, NET -10.37
2019-04-01, BUY EXECUTED, Price: 860.00, Cost: 860.00, Comm 0.43
2019-05-07, SELL EXECUTED, Price: 893.28, Cost: 860.00, Comm 0.45
2019-05-07, OPERATION PROFIT, GROSS 33.28, NET 32.40
2019-05-17, BUY EXECUTED, Price: 927.02, Cost: 927.02, Comm 0.46
2019-05-24, SELL EXECUTED, Price: 865.00, Cost: 927.02, Comm 0.43
2019-05-24, OPERATION PROFIT, GROSS -62.02, NET -62.92
2019-05-31, BUY EXECUTED, Price: 900.53, Cost: 900.53, Comm 0.45
2019-06-10, SELL EXECUTED, Price: 857.98, Cost: 900.53, Comm 0.43
2019-06-10, OPERATION PROFIT, GROSS -42.55, NET -43.43
2019-06-14, BUY EXECUTED, Price: 911.00, Cost: 911.00, Comm 0.46
2019-07-10, SELL EXECUTED, Price: 980.93, Cost: 911.00, Comm 0.49
2019-07-10, OPERATION PROFIT, GROSS 69.93, NET 68.98
2019-07-30, BUY EXECUTED, Price: 976.50, Cost: 976.50, Comm 0.49
2019-08-07, SELL EXECUTED, Price: 949.50, Cost: 976.50, Comm 0.47
2019-08-07, OPERATION PROFIT, GROSS -27.00, NET -27.96
2019-08-13, BUY EXECUTED, Price: 1016.16, Cost: 1016.16, Comm 0.51
2019-09-12, SELL EXECUTED, Price: 1066.00, Cost: 1016.16, Comm 0.53
2019-09-12, OPERATION PROFIT, GROSS 49.84, NET 48.80
2019-09-23, BUY EXECUTED, Price: 1157.00, Cost: 1157.00, Comm 0.58
2019-10-10, SELL EXECUTED, Price: 1127.00, Cost: 1157.00, Comm 0.56
2019-10-10, OPERATION PROFIT, GROSS -30.00, NET -31.14
2019-10-16, BUY EXECUTED, Price: 1168.00, Cost: 1168.00, Comm 0.58
2019-10-24, SELL EXECUTED, Price: 1164.95, Cost: 1168.00, Comm 0.58
2019-10-24, OPERATION PROFIT, GROSS -3.05, NET -4.22
2019-10-31, BUY EXECUTED, Price: 1196.00, Cost: 1196.00, Comm 0.60
2019-11-26, SELL EXECUTED, Price: 1186.68, Cost: 1196.00, Comm 0.59
2019-11-26, OPERATION PROFIT, GROSS -9.32, NET -10.51
2019-12-12, BUY EXECUTED, Price: 1156.00, Cost: 1156.00, Comm 0.58
2019-12-25, SELL EXECUTED, Price: 1143.00, Cost: 1156.00, Comm 0.57
2019-12-25, OPERATION PROFIT, GROSS -13.00, NET -14.15
2020-01-02, BUY EXECUTED, Price: 1128.00, Cost: 1128.00, Comm 0.56
2020-01-07, SELL EXECUTED, Price: 1077.50, Cost: 1128.00, Comm 0.54
2020-01-07, OPERATION PROFIT, GROSS -50.50, NET -51.60
2020-01-16, BUY EXECUTED, Price: 1118.87, Cost: 1118.87, Comm 0.56
2020-01-22, SELL EXECUTED, Price: 1070.00, Cost: 1118.87, Comm 0.54
2020-01-22, OPERATION PROFIT, GROSS -48.87, NET -49.96
2020-02-11, BUY EXECUTED, Price: 1063.00, Cost: 1063.00, Comm 0.53
2020-02-28, SELL EXECUTED, Price: 1070.30, Cost: 1063.00, Comm 0.54
2020-02-28, OPERATION PROFIT, GROSS 7.30, NET 6.23
2020-03-05, BUY EXECUTED, Price: 1136.31, Cost: 1136.31, Comm 0.57
2020-03-17, SELL EXECUTED, Price: 1055.00, Cost: 1136.31, Comm 0.53
2020-03-17, OPERATION PROFIT, GROSS -81.31, NET -82.41
2020-03-27, BUY EXECUTED, Price: 1085.00, Cost: 1085.00, Comm 0.54
2020-06-16, SELL EXECUTED, Price: 1398.50, Cost: 1085.00, Comm 0.70
2020-06-16, OPERATION PROFIT, GROSS 313.50, NET 312.26
2020-06-23, BUY EXECUTED, Price: 1435.00, Cost: 1435.00, Comm 0.72
2020-07-21, SELL EXECUTED, Price: 1646.64, Cost: 1435.00, Comm 0.82
2020-07-21, OPERATION PROFIT, GROSS 211.64, NET 210.10
2020-08-03, BUY EXECUTED, Price: 1686.88, Cost: 1686.88, Comm 0.84
2020-08-10, SELL EXECUTED, Price: 1627.97, Cost: 1686.88, Comm 0.81
2020-08-10, OPERATION PROFIT, GROSS -58.91, NET -60.57
2020-08-18, BUY EXECUTED, Price: 1697.38, Cost: 1697.38, Comm 0.85
2020-09-09, SELL EXECUTED, Price: 1699.67, Cost: 1697.38, Comm 0.85
2020-09-09, OPERATION PROFIT, GROSS 2.29, NET 0.59
2020-09-17, BUY EXECUTED, Price: 1700.00, Cost: 1700.00, Comm 0.85
2020-09-22, SELL EXECUTED, Price: 1650.00, Cost: 1700.00, Comm 0.83
2020-09-22, OPERATION PROFIT, GROSS -50.00, NET -51.67
2020-10-12, BUY EXECUTED, Price: 1700.00, Cost: 1700.00, Comm 0.85
2020-10-23, SELL EXECUTED, Price: 1740.78, Cost: 1700.00, Comm 0.87
2020-10-23, OPERATION PROFIT, GROSS 40.78, NET 39.06
2020-11-05, BUY EXECUTED, Price: 1717.00, Cost: 1717.00, Comm 0.86
2020-11-19, SELL EXECUTED, Price: 1684.50, Cost: 1717.00, Comm 0.84
2020-11-19, OPERATION PROFIT, GROSS -32.50, NET -34.20
2020-11-25, BUY EXECUTED, Price: 1761.50, Cost: 1761.50, Comm 0.88
2020-12-02, SELL EXECUTED, Price: 1746.00, Cost: 1761.50, Comm 0.87
2020-12-02, OPERATION PROFIT, GROSS -15.50, NET -17.25
2020-12-08, BUY EXECUTED, Price: 1815.00, Cost: 1815.00, Comm 0.91
2020-12-30, SELL EXECUTED, Price: 1870.00, Cost: 1815.00, Comm 0.94
2020-12-30, OPERATION PROFIT, GROSS 55.00, NET 53.16
2020-12-31, BUY EXECUTED, Price: 1941.00, Cost: 1941.00, Comm 0.97
2021-01-20, SELL EXECUTED, Price: 2008.00, Cost: 1941.00, Comm 1.00
2021-01-20, OPERATION PROFIT, GROSS 67.00, NET 65.03
2021-01-27, BUY EXECUTED, Price: 2141.89, Cost: 2141.89, Comm 1.07
2021-02-25, SELL EXECUTED, Price: 2209.00, Cost: 2141.89, Comm 1.10
2021-02-25, OPERATION PROFIT, GROSS 67.11, NET 64.93
2021-03-18, BUY EXECUTED, Price: 2035.00, Cost: 2035.00, Comm 1.02
2021-03-25, SELL EXECUTED, Price: 1970.01, Cost: 2035.00, Comm 0.99
2021-03-25, OPERATION PROFIT, GROSS -64.99, NET -66.99
2021-04-01, BUY EXECUTED, Price: 2021.00, Cost: 2021.00, Comm 1.01
2021-04-13, SELL EXECUTED, Price: 2020.00, Cost: 2021.00, Comm 1.01
2021-04-13, OPERATION PROFIT, GROSS -1.00, NET -3.02
2021-04-21, BUY EXECUTED, Price: 2076.00, Cost: 2076.00, Comm 1.04
2021-04-30, SELL EXECUTED, Price: 2026.00, Cost: 2076.00, Comm 1.01
2021-04-30, OPERATION PROFIT, GROSS -50.00, NET -52.05
2021-05-18, BUY EXECUTED, Price: 2065.00, Cost: 2065.00, Comm 1.03
2021-06-10, SELL EXECUTED, Price: 2195.00, Cost: 2065.00, Comm 1.10
2021-06-10, OPERATION PROFIT, GROSS 130.00, NET 127.87
2021-06-11, BUY EXECUTED, Price: 2239.00, Cost: 2239.00, Comm 1.12
2021-06-15, SELL EXECUTED, Price: 2195.10, Cost: 2239.00, Comm 1.10
2021-06-15, OPERATION PROFIT, GROSS -43.90, NET -46.12
2021-07-02, BUY EXECUTED, Price: 2075.00, Cost: 2075.00, Comm 1.04
2021-07-05, SELL EXECUTED, Price: 2000.00, Cost: 2075.00, Comm 1.00
2021-07-05, OPERATION PROFIT, GROSS -75.00, NET -77.04
2021-07-22, BUY EXECUTED, Price: 1960.00, Cost: 1960.00, Comm 0.98
2021-07-23, SELL EXECUTED, Price: 1937.82, Cost: 1960.00, Comm 0.97
2021-07-23, OPERATION PROFIT, GROSS -22.18, NET -24.13
2021-08-16, BUY EXECUTED, Price: 1696.00, Cost: 1696.00, Comm 0.85
2021-08-18, SELL EXECUTED, Price: 1624.66, Cost: 1696.00, Comm 0.81
2021-08-18, OPERATION PROFIT, GROSS -71.34, NET -73.00
2021-08-31, BUY EXECUTED, Price: 1589.80, Cost: 1589.80, Comm 0.79
2021-09-02, SELL EXECUTED, Price: 1632.99, Cost: 1589.80, Comm 0.82
2021-09-02, OPERATION PROFIT, GROSS 43.19, NET 41.58
2021-09-07, BUY EXECUTED, Price: 1661.03, Cost: 1661.03, Comm 0.83
2021-09-16, SELL EXECUTED, Price: 1603.00, Cost: 1661.03, Comm 0.80
2021-09-16, OPERATION PROFIT, GROSS -58.03, NET -59.66
2021-09-27, BUY EXECUTED, Price: 1750.00, Cost: 1750.00, Comm 0.88
2021-10-21, SELL EXECUTED, Price: 1841.10, Cost: 1750.00, Comm 0.92
2021-10-21, OPERATION PROFIT, GROSS 91.10, NET 89.30
2021-10-28, BUY EXECUTED, Price: 1825.20, Cost: 1825.20, Comm 0.91
2021-11-02, SELL EXECUTED, Price: 1796.70, Cost: 1825.20, Comm 0.90
2021-11-02, OPERATION PROFIT, GROSS -28.50, NET -30.31
2021-11-22, BUY EXECUTED, Price: 1849.00, Cost: 1849.00, Comm 0.92
2021-12-22, SELL EXECUTED, Price: 2040.00, Cost: 1849.00, Comm 1.02
2021-12-22, OPERATION PROFIT, GROSS 191.00, NET 189.06
2021-12-28, BUY EXECUTED, Price: 2133.00, Cost: 2133.00, Comm 1.07
2022-01-04, SELL EXECUTED, Price: 2055.00, Cost: 2133.00, Comm 1.03
2022-01-04, OPERATION PROFIT, GROSS -78.00, NET -80.09
Final Portfolio Value: 100000.00



  • 写回答

3条回答 默认 最新

  • 有问必答小助手 2022-02-08 10:01
    关注

    你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


    本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


    因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 2月16日
  • 已采纳回答 2月8日
  • 创建了问题 2月6日

悬赏问题

  • ¥100 支付宝网页转账系统不识别账号
  • ¥15 基于单片机的靶位控制系统
  • ¥15 AT89C51控制8位八段数码管显示时钟。
  • ¥15 真我手机蓝牙传输进度消息被关闭了,怎么打开?(关键词-消息通知)
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题