标签: backtrader

导入错误无法从“matplotlib.dates”导入名称“警告”

Alpaca backtrader plot 问题:我遇到了这个导入问题并找到了这篇文章,所以我应用了代码,但同样的问题没有解决。有人可以帮忙吗?

我安装的 matplotlib 版本是 3.3.1 backtrader 1.9.76.123 python 3.8.5

整个代码张贴在下面:

from matplotlib.dates 

import (HOURS_PER_DAY, MIN_PER_HOUR, SEC_PER_MIN,MONTHS_PER_YEAR, 
        DAYS_PER_WEEK,SEC_PER_HOUR, SEC_PER_DAY,num2date, rrulewrapper, 
        YearLocator,MicrosecondLocator)

import alpaca_backtrader_api

import backtrader as bt

from datetime import datetime

#import matplotlib
ALPACA_API_KEY = "XXXXX"

ALPACA_SECRET_KEY = "XXXX"

ALPACA_PAPER = True

class SmaCross(bt.SignalStrategy):

def init(self):

sma1, sma2 = bt.ind.SMA(period=10), bt.ind.SMA(period=30)

crossover = bt.ind.CrossOver(sma1, sma2)

self.signal_add(bt.SIGNAL_LONG, crossover)

cerebro = bt.Cerebro()

cerebro.addstrategy(SmaCross)

store = alpaca_backtrader_api.AlpacaStore( key_id=ALPACA_API_KEY,secret_key=ALPACA_SECRET_KEY,paper=ALPACA_PAPER)

if not ALPACA_PAPER:
  
  broker = store.getbroker() # or just alpaca_backtrader_api.AlpacaBroker()
  
  cerebro.setbroker(broker) …
Run Code Online (Sandbox Code Playgroud)

matplotlib backtrader

32
推荐指数
5
解决办法
2万
查看次数

每次在 tqdm 对象(VSCode 终端)上调用更新时,进度条(使用 tqdm)都会在新行中打印

我正在尝试使用 Python 中提供的 tqdm 模块打印优化算法的进度状态,但是,每次我尝试更新它时,它都会在新行中打印进度,有没有办法我只能更新原始的 tqdm bar 在开始时被实例化?我的代码如下,它基于 backtrader 回测库:

\n
def optimizer_callbacks(cb):\n    pbar.update()\n\ndef strategy_optim(**kwargs):\n\n    total = np.prod([len(value) for key,value in kwargs.items()])\n\n    csv_file = FDaxCSVData(---data---)\n    cerebro = bt.Cerebro()\n    cerebro.adddata(csv_file)    \n    cerebro.broker.setcash(500000.0)\n    cerebro.broker.setcommission(commission=2.0)\n\n    strats = cerebro.optstrategy(strategy_name, printlog = False, **kwargs)\n\n    global pbar\n    pbar = tqdm.tqdm(smoothing=0.05, desc='Optimization Runs', total=total)\n    cerebro.optcallback(optimizer_callbacks)\n\n    runnings = cerebro.run(optreturn=False, maxcpus=2)  \n\nif __name__=="__main__":\n    strategy_optim(periods = [100, 200, 300],  abs_margin= [25, 50, 75], trail_stop=[10, 20, 30, 40])\n
Run Code Online (Sandbox Code Playgroud)\n

输出:

\n
Optimization Runs:   0%|                                                    | 0/12 [00:00<?, ?it/s]\nOptimization Runs:   8%|\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x88\xe2\x96\x89                                             | …
Run Code Online (Sandbox Code Playgroud)

python back-testing tqdm backtrader

6
推荐指数
2
解决办法
1万
查看次数

Backtrader 错误:“DataFrame”对象没有属性“setenvironment”

我是反向交易者的新手,我有一个大问题。我想开始我的策略(只是一个简单的 GoldenCross 策略)。这个 GoldenCross.py 脚本如下所示:

import math
import backtrader as bt



class GoldenCross(bt.Strategy):
    params = (("fast", 50), 
                ("slow", 200), 
                ("order percentage", 0.95), 
                ("ticker", "AAPL"))

    def __init__(self):
        self.fast_moving_average = self.bt.indicators.SmoothedMovingAverage(
           self.data.close, 
           period=self.p.fast,
           plotname="50 day moving average")
        self.slow_moving_average = self.bt.indicators.SmoothedMovingAverage(
           self.data.close, 
           period=self.p.slow,
           plotname="200 day moving average")
        self.crossover = self.bt.indicators.crossover(self.fast_moving_average, self.slow_moving_average)

    def next(self):
        pass
Run Code Online (Sandbox Code Playgroud)

现在我想使用 run.py 脚本运行该策略。在此脚本中,代码如下所示:

import os, sys, argparse
import pandas as pd 
import backtrader as bt 
from Strategien.GoldenCross import GoldenCross
import datetime



cerebro = bt.Cerebro()
cerebro.broker.setcash(100000)

symbol = "AAPL"
path …
Run Code Online (Sandbox Code Playgroud)

python feed backtrader

4
推荐指数
1
解决办法
6994
查看次数

获取 Backtrader 问题中的数据

我正在尝试用 Python 在 Backtrader 上编写回溯测试策略,下面是给我错误的代码。我使用的是截至 2021 年 7 月 2 日的最新版本的 backtrader。

import backtrader as bt
import backtrader.feeds as btfeeds
from datetime import datetime

cerebro = bt.Cerebro()
cerebro.broker.setcash(100000)
data = btfeeds.YahooFinanceData(dataname="SPY", fromdate=datetime(2016, 6, 25), 
todate=datetime(2021, 6, 25))
cerebro.adddata(data)
cerebro.run()
Run Code Online (Sandbox Code Playgroud)

我得到的错误是

回溯(最近一次调用最后一次):文件“c:\Users\risha\PycharmProjects\PythonDataScience\BacktraderBacktesting\TestingData.py”,第 9 行,在 cerebro.run() 文件“C:\Users\risha\anaconda3\lib\ site-packages\backtrader\cerebro.py”,第 1127 行,运行 runstrat = self.runstrategies(iterstrat) 文件“C:\Users\risha\anaconda3\lib\site-packages\backtrader\cerebro.py”,第 1210 行,在 runstrategies data._start() 文件“C:\Users\risha\anaconda3\lib\site-packages\backtrader\feed.py”中,第 203 行,在 _start self.start() 文件“C:\Users\risha \anaconda3\lib\site-packages\backtrader\feeds\yahoo.py”,第 355 行,在 start super(YahooFinanceData, self).start() 文件“C:\Users\risha\anaconda3\lib\site-packages\ backtrader\feeds\yahoo.py”,第 94 行,在 start super(YahooFinanceCSVData, self).start() 文件“C:\Users\risha\anaconda3\lib\site-packages\backtrader\feed.py”中,第 674 行,在开始 self.f = …

python backtrader

4
推荐指数
1
解决办法
6003
查看次数

Python Backtrader 错误:FileNotFoundError:[Errno 2] 没有这样的文件或目录:'AAPL'

我正在尝试使用Python 3.8 中的backtrader对使用的模块AAPL从雅虎财经获得的历史股票价格进行回测。backtraderYahooFinanceData

问题:数据似乎是从雅虎财经下载的,但在回测过程中,我们得到一个错误:

FileNotFoundError:[Errno 2]没有这样的文件或目录:'AAPL'

知道我们如何解决这个问题吗?

系统:

  • Mac OS X 10.15.3
  • Python 3.8.0
  • 反向交易者 1.9.74.123

重现错误的 Python 代码

from datetime import datetime
import backtrader as bt

class SmaSignal(bt.Signal):
    param = (('period', 20), )

    def __init__(self):
        self.lines.signal = self.data - bt.ind.SMA(period=self.p.period)

data = bt.feeds.YahooFinanceData(dataname='AAPL',
                                fromdate=datetime(2018, 1, 1),
                                todate=datetime(2018, 12, 31))
cerebro = bt.Cerebro(stdstats=False)
cerebro.adddata(data)
cerebro.broker.setcash(1000.0)
cerebro.add_signal(bt.SIGNAL_LONG, SmaSignal)
cerebro.addobserver(bt.observers.BuySell)
cerebro.addobserver(bt.observers.Value)

print(f'Starting Portfolio Value: {cerebro.broker.getvalue():.2f}')
cerebro.run()
print(f'Final Portfolio Value: {cerebro.broker.getvalue():.2f}')
cerebro.plot(iplot=True, volume=False)
Run Code Online (Sandbox Code Playgroud)

错误堆栈

Traceback …
Run Code Online (Sandbox Code Playgroud)

python python-3.x yahoo-finance back-testing backtrader

2
推荐指数
2
解决办法
7239
查看次数