首页 > 其他分享 >2:设置初始资金

2:设置初始资金

时间:2024-04-01 12:47:50浏览次数:23  
标签:__ self cerebro datetime bt 设置 data 初始 资金

import backtrader as bt
if __name__ == '__main__':
    cerebro = bt.Cerebro()
    cerebro.broker.set_cash(100000.00)    # 设置初始资金金额
    初始资金 = cerebro.broker.getvalue()
    print(f'初始资金:{初始资金}')
    cerebro.run()
    期末资金 =  cerebro.broker.getvalue()
    print(f'期末资金:{期末资金}')

3:加入交易数据

# -*- coding:utf-8 -*-
import backtrader as bt
#####################
import pandas as pd
import os
import datetime
import matplotlib.pyplot as plt

#####################



class AceStrategy(bt.Strategy):
    pass

if __name__ == '__main__':
    cerebro = bt.Cerebro()
    cerebro = bt.Cerebro(stdstats=False)
    # cerebro.addobserver(bt.observers.Broker)
    # cerebro.addobserver(bt.observers.Trades)
    # cerebro.addobserver(bt.observers.BuySell)
    # cerebro.addobserver(bt.observers.DrawDown)
    # cerebro.addobserver(bt.observers.Value)
    # cerebro.addobserver(bt.observers.TimeReturn)
    cerebro.broker.set_cash(100000.00)  # 设置初始资金金额
    初始资金 = cerebro.broker.getvalue()
    print(f'初始资金:{初始资金}')


    #####################
    数据地址= os.path.join(os.path.join(os.getcwd(),"数据地址"),"002342.csv") #本次是单个,未来可以用循环遍历,列表表达式用if 过滤CSV
    # print(数据地址)
    data =pd.read_csv(数据地址,index_col ="date",parse_dates = True)
    # data.index=pd.to_datetime(data.date)
    # data.drop(columns=["date"],inplace=True)
    # print(data)
    日线 = bt.feeds.PandasData(     dataname=data,
                                    fromdate=datetime.datetime(2020, 1, 1),
                                    todate=datetime.datetime(2020,10, 18)
                                    )


    cerebro.adddata(日线)
    cerebro.addstrategy(AceStrategy)
    #####################
    cerebro.run()
    期末资金 =  cerebro.broker.getvalue()
    print(f'期末资金:{期末资金}')
    #####################
    cerebro.plot(style = "candle")
    #####################

4:创建策略_看顺序

# -*- coding:utf-8 -*-
import backtrader as bt
#####################
import pandas as pd
import os
import datetime


class AceStrategy(bt.Strategy):
    params = (
        ('maperiod',20),
    )

    def log(self):
        pass


    def __init__(self):
        print(f'init___{self.datas[0].datetime.date(0)}')
        # self.dataclose = self.datas[0].close
        self.sma_5 = bt.indicators.SimpleMovingAverage(
            self.data0.close, period=self.params.maperiod)


    def start(self):
        print(f"start!___{self.datas[0].datetime.date(0)}")

    def prenext(self):
        print(f"prenext___{self.datas[0].datetime.date(0)}")

    def nextstart(self):
        print(f'nextstart___{self.datas[0].datetime.date(0)}')

    def notify_order(self):
        pass

    def notify_trade(self):
        pass


    def next(self):
        print(f'next___{self.datas[0].datetime.date(0)}, ma_5:{round(self.sma_5[0],2)}, 前一天MA_5:{round(self.sma_5[-1],2)}')

    def stop(self):
        print(f"stop___{self.datas[0].datetime.date(0)}")


if __name__ == '__main__':
    cerebro = bt.Cerebro()
    cerebro.broker.set_cash(100000.00)  # 设置初始资金金额
    初始资金 = cerebro.broker.getvalue()
    print(f'初始资金:{初始资金}')
    数据地址= os.path.join(os.path.join(os.getcwd(),"数据地址"),"002342.csv") #本次是单个,未来可以用循环遍历,列表表达式用if 过滤CSV
    # print(数据地址)
    data =pd.read_csv(数据地址)
    data.index=pd.to_datetime(data.date)
    data.drop(columns=["date"],inplace=True)
    # print(data)
    日线 = bt.feeds.PandasData(     dataname=data,
                                    fromdate=datetime.datetime(2020, 9, 10),
                                    todate=datetime.datetime(2020, 10, 20)
                                    )
    cerebro.adddata(日线)
    cerebro.addstrategy(AceStrategy)
    cerebro.run()
    期末资金 =  cerebro.broker.getvalue()
    print(f'期末资金:{期末资金}')
    # cerebro.plot()

5:第一个简单策略

# -*- coding:utf-8 -*-
import backtrader as bt
#####################
import pandas as pd
import os
import datetime
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']

class AceStrategy(bt.Strategy):
    params = (
        ('maperiod_3', 3),
        ('maperiod_5',5)
    )

    def __init__(self):
        print(f'init___{self.datas[0].datetime.date(0)}')
        self.dataclose = self.datas[0].close
        self.sma_3 = bt.indicators.SimpleMovingAverage(
            self.datas[0], period=self.params.maperiod_3)
        self.sma_5 = bt.indicators.SimpleMovingAverage(
            self.datas[0], period=self.params.maperiod_5)
        self.order = None
        # self.sma_3.plotinfo.plot = False
        # self.sma_5.plotinfo.plot = False

    def start(self):
        pass

    def prenext(self):
        pass

    def nextstart(self):
        pass

    # def notify_order(self, order):
    #     if order.status in [order.Submitted, order.Accepted]:
    #         return
    #     if order.status in [order.Completed]:
    #         pass
    #         self.bar_executed = len(self)
    #     elif order.status in [order.Canceled, order.Margin, order.Rejected]:
    #         pass
    #     self.order = None # 无挂起

    def next(self):
        # if self.order:
        #     return
        if not self.position:
            if self.sma_3[0]>self.sma_5[0]:
                self.order = self.buy(size=1000)
                print(f"{self.datas[0].datetime.date(0)},买入!价格为{self.dataclose[0]}")
        else:
            if self.sma_3[0]<self.sma_5[0]:
                self.order = self.sell(size=1000)
                print(f"{self.datas[0].datetime.date(0)},卖出!价格为{self.dataclose[0]}")

    def stop(self):
        pass


if __name__ == '__main__':
    cerebro = bt.Cerebro()
    cerebro.broker.set_cash(100000.00)  # 设置初始资金金额
    cerebro = bt.Cerebro(stdstats=False)
    cerebro.addobserver(bt.observers.Broker)
    # cerebro.addobserver(bt.observers.Trades)
    cerebro.addobserver(bt.observers.BuySell)
    # cerebro.addobserver(bt.observers.DrawDown)
    cerebro.addobserver(bt.observers.Value)
    # cerebro.addobserver(bt.observers.TimeReturn)
    初始资金 = cerebro.broker.getvalue()
    print(f'初始资金:{初始资金}')
    数据地址= os.path.join(os.path.join(os.getcwd(),"数据地址"),"002342.csv") #本次是单个,未来可以用循环遍历,列表表达式用if 过滤CSV
    # print(数据地址)
    data =pd.read_csv(数据地址)
    data.index=pd.to_datetime(data.date)
    data.drop(columns=["date"],inplace=True)
    # print(data)
    日线 = bt.feeds.PandasData(     dataname=data,
                                    fromdate=datetime.datetime(2020, 1, 1),
                                    todate=datetime.datetime(2020, 10, 12)
                                    )
    cerebro.adddata(日线)
    cerebro.addstrategy(AceStrategy)
    cerebro.run()
    期末资金 =  cerebro.broker.getvalue()
    print(f'期末资金:{期末资金}')
    cerebro.plot(style = "candle")

 

6:编写指标_平台突破

查看代码
# -*- coding:utf-8 -*-
import backtrader as bt
#####################
import pandas as pd
import os
import datetime
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']

class Platform(bt.Indicator):
    lines = ("上轨","下轨")

    def __init__(self):
        self.addminperiod(6)   #5天的平台

    def next(self):
        self.上轨[0]= max(self.data.high.get(ago = -1,size =5))
        self.下轨[0] = min(self.data.low.get(ago=-1, size=5))

class AceStrategy(bt.Strategy):

    def __init__(self):
        self.上下轨 = Platform(self.data)
        self.买入信号 = bt.indicators.CrossOver(self.datas[0].close,self.上下轨.上轨)
        self.卖出信号 = bt.indicators.CrossDown(self.data.close, self.上下轨.下轨)
        # self.order = None
        self.买入信号.plotinfo.plot = False
        self.卖出信号.plotinfo.plot = False
        self.上下轨.plotinfo.plotmaster = self.data  #类似通达信的 是否在主图显示
        # self.卖出信号.plotinfo.plot = False



    def start(self):
        pass

    def prenext(self):
        pass

    def nextstart(self):
        pass

    def next(self):
        # if self.order:
        #     return
        if not self.position:
            if self.买入信号[0] ==1:
                self.order = self.buy(size=1000)
                print(f"{self.datas[0].datetime.date(0)},买入!价格为{self.data.close[0]}")
        else:
            if self.卖出信号[0] == 1:
                self.order = self.sell(size=1000)
                print(f"{self.datas[0].datetime.date(0)},卖出!价格为{self.data.close[0]}")
        pass

    def stop(self):
        if  self.position:
            self.order = self.sell(size=1000)
            print(f"{self.datas[0].datetime.date(0)},卖出!价格为{self.data.close[0]}")


if __name__ == '__main__':
    cerebro = bt.Cerebro()
    cerebro.broker.set_cash(100000.00)  # 设置初始资金金额
    初始资金 = cerebro.broker.getvalue()
    print(f'初始资金:{初始资金}')
    数据地址= os.path.join(os.path.join(os.getcwd(),"数据地址"),"002342.csv") #本次是单个,未来可以用循环遍历,列表表达式用if 过滤CSV
    # print(数据地址)
    data =pd.read_csv(数据地址)
    data.index=pd.to_datetime(data.date)
    data.drop(columns=["date"],inplace=True)
    print(data)
    日线 = bt.feeds.PandasData(     dataname=data,
                                    fromdate=datetime.datetime(2020, 1, 1),
                                    todate=datetime.datetime(2020, 10, 12)
                                    )
    cerebro.adddata(日线)
    cerebro.addstrategy(AceStrategy)
    cerebro.run()
    期末资金 =  cerebro.broker.getvalue()
    print(f'期末资金:{期末资金}')
    cerebro.plot(style = "candle")

7:双周期

import backtrader as bt
import pandas as pd
import os
import datetime
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHer']

class Platform(bt.Indicator):
    lines = ("上轨","下轨")
    params = (
        ("周期" , 5),
    )

    def __init__(self):
        self.addminperiod(self.params.周期 + 1)


    def next(self):
        self.上轨[0] = max(self.data.high.get(ago=-1, size=self.params.周期))
        self.下轨[0] = min(self.data.low.get(ago=-1, size=self.params.周期))

class AceStrategy(bt.Strategy):
    params = (
        ("周期", 5),
    )

    def __init__(self):
        self.上下轨 = Platform(self.data1 ,周期= self.params.周期)
        self.上下轨 = self.上下轨()
        self.上下轨.plotinfo.plotmaster = self.data0

        self.买入信号 = bt.indicators.CrossOver(self.data0.close,self.上下轨.上轨)
        self.卖出信号 = bt.indicators.CrossDown(self.data0.close,self.上下轨.下轨)
        self.买入信号.plotinfo.plot = False
        self.卖出信号.plotinfo.plot = False



    def start(self):
        pass

    def prenext(self):
        print(f'数据准备时间:{self.data0.datetime.datetime(0)}')

    def nextstart(self):
        pass

    def next(self):
        # # if self.order:
        # #     return
        if not self.position:
            if self.买入信号[0] ==1:
                self.order = self.buy(size=1000)
                print(f"{self.data1.datetime.date(0)},买入!价格为{self.data0.close[0]}")
        else:
            if self.卖出信号[0] == 1:
                self.order = self.sell(size=1000)
                print(f"{self.data1.datetime.date(0)},卖出!价格为{self.data0.close[0]}")
        # pass

    def stop(self):
        if  self.position:
            self.order = self.sell(size=1000)
            print(f"{self.datas[0].datetime.date(0)},卖出!价格为{self.data.close[0]}")


if __name__ == '__main__':
    cerebro = bt.Cerebro()
    cerebro.broker.set_cash(100000.0)
    数据地址= os.path.join(os.path.join(os.getcwd(),"数据地址"),"002342_30M.csv")
    data = pd.read_csv(数据地址,index_col = "date",parse_dates=True)
    print(data)
    三十分钟线 = bt.feeds.PandasData(dataname=data,
                                fromdate = datetime.datetime(2020,3,1),
                                todate = datetime.datetime(2020,10,16),
                                timeframe = bt.TimeFrame.Minutes,
                                compression = 30
                             )
    cerebro.adddata(三十分钟线) #self.data
    cerebro.resampledata(三十分钟线,timeframe = bt.TimeFrame.Days)   #self.data1
    cerebro.addstrategy(AceStrategy)
    cerebro.run()
    期末资金 = cerebro.broker.getvalue()
    print(f'期末资金:{期末资金}')
    cerebro.plot(style = "candle")

 

标签:__,self,cerebro,datetime,bt,设置,data,初始,资金
From: https://www.cnblogs.com/lianshanspeak/p/18108142

相关文章

  • 13.设置支付宝支付后跳转至特定网页并显示特定内容(例如密码1212)-待实现
    要设置支付宝支付后跳转至特定网页并显示特定内容(例如密码1212),你需要进行几个步骤。首先,你需要在支付宝开放平台上创建应用并设置支付接口,然后配置支付成功后的跳转URL。接下来,你需要在你的服务器上创建这个跳转页面,并在其中显示你想要的内容。以下是大致的步骤:1.在支付宝开放......
  • MDK中如何使用STM32CubeMX来配置工程和生成初始化代码?
    在MDK中使用STM32CubeMX配置工程和生成初始化代码是一个高效的开发流程,它可以显著提高开发效率并减少手动配置错误。以下是详细的步骤和示例代码,展示如何使用STM32CubeMX来配置工程,并将其与MDK结合使用。1.安装STM32CubeMX首先,访问STMicroelectronics的官方网站,下载并安......
  • Postfix + Dovecot IMAP 服务器的终极指南,完整支持 SPF、DKIM 和 DMARC,以及多域名设
    邮件服务器配置指南本指南将带您完成Postfix+DovecotIMAP服务器的设置,支持SPF、DKIM和DMARC,还将提供多域名配置的额外指导。在本指南中,domain.com将作为您的根域名,mail.domain.com将作为您邮件服务器的主机名。0x01添加DNS记录在您的域名下添加如下DNS记录:mailI......
  • yolov8逐步分解(2)_DetectionTrainer类初始化过程
     接上篇文章yolov8逐步分解(1)--默认参数&超参配置文件加载继续讲解。 1.默认配置文件加载完成后,创建对象trainer时,需要从默认配置中获取类DetectionTrainer初始化所需的参数args,如下所示deftrain(cfg=DEFAULT_CFG,use_python=False):  """TrainandoptimizeYOLO......
  • 在 Java 中获取或设置 PDF 元数据
    介绍由于其固定和可呈现的性质,PDF文件被用户和企业广泛用于Web应用程序。这些文件中的每一个都包含“元数据”,它本质上转换为有关数据的数据。PDF元数据包含有关文档的补充信息,例如文档的作者、主题、标题、创建日期等。如果PDF文件最初是通过从原始源文档(即DocX、P......
  • linux下设置环境变量导致原有环境变量失效
    搭建集群时,想新增一个环境变量,但设置错了导致原因都失效了vim/etc/profile.d/my_env.shexportPATH=/home/atguigu/bin大部分命令都使用不了了,只能使用halp下的命令[root@hadoop102module]#subash:su:未找到命令[root@hadoop102module]#lsbash:ls:未找到命令......
  • 【蓝桥杯】小明要做一个跑步训练。初始时,小明充满体力,体力值计为10000。如果小明跑步,
    【问题描述】小明要做一个跑步训练。初始时,小明充满体力,体力值计为10000。如果小明跑步,每分钟损耗600的体力。如果小明休息,每分钟增加300的体力。体力的损耗和增加都是均匀变化的。小明打算跑一分钟、休息一分钟、再跑一分钟、再休息一分钟……如此循环。如果某个时刻......
  • rainy75 键盘设置手册
    蓝牙配对显示电量切换模式(win/mac)Fn组合按键......
  • 初始C语言
    自我简绍:本人双非院校大一新生,集成电路设计与集成系统专业。我认为C语言是学习其他语言的基础,可以为以后学其他语言打好基础,很有必要好好学习学习,并且网上有很多项目都是开源的,可以很好的去实际。未来编程目标:首先将C语言系统的仔细学一下,然后再学学数据结构与算法。我想......
  • 三个本地组策略的设置实例
    一:禁止本机用户编辑注册表使用win+r打开运行对话框,输入命令regedit,这样就能打开注册表编辑器在运行对话框输入gpedit.msc,进入本地组策略编辑器在这里我们可以阻止访问策略表编辑工具双击点击启用确定再次在运行对话框输入命令regedit,尝试进入注册表发现已经不能进入了......