![](/img/trans.png)
[英]Backtrader: order created, I would like that the order is execute instantly (and not the day after), how to do that?
[英]How to created pandasData for backtrader with ccxt
我正在尝试使用 backtrader 对策略进行回测。 我看到的大多数示例仅使用 csv 文件。 我想知道是否可以从交易所获取数据并将其转换为 pandas dataframe 然后使用反向交易者? 当我运行它时,我得到一个错误AttributeError: 'numpy.int64' object has no attribute 'lower'
这是指pandafeed.py
import ccxt,os
from dotenv import load_dotenv
import backtrader
class Trader:
def __init__(self) -> None:
load_dotenv()
self.connect()
""" Creates Binance client """
def connect(self):
self.exchange = ccxt.binance({
'apiKey': os.getenv('BINANCE_API_KEY'),
'secret': os.getenv('BINANCE_API_SECRET')
})
klines = Trader().exchange.fetch_ohlcv(symbol=trading_pair,timeframe=interval)
dataFrame = pd.DataFrame(klines)
dataFrame[0] = [datetime.fromtimestamp(t/1000) for t in dataFrame[0]]
data = backtrader.feeds.PandasData(dataname=dataFrame)
cerebro = backtrader.Cerebro()
cerebro.broker.set_cash(10000)
cerebro.adddata(data)
cerebro.run()
如果我使用列名并将代码更改为以下
colums = ['datetime', 'open','high', 'low', 'close', 'volume']
dataFrame = pd.DataFrame(klines, columns=colums)
dataFrame["datetime"] = [datetime.fromtimestamp(t/1000) for t in dataFrame["datetime"]]
data = backtrader.feeds.PandasData(dataname=dataFrame)
我收到这个错误
AttributeError: 'int' object 没有属性 'to_pydatetime'
我的问题是:如何将列表变成可以用来运行反向交易者的东西? 谢谢你。
PS由klines
返回的示例数据结构将类似于
[ [1621152000000, 49375.28, 49795.89, 48656.0, 49014.99, 10956.006583], [1621166400000, 49014.99, 49249.06, 47566.01, 47727.26, 14166.961995], [1621180800000, 47727.26, 48097.59, 44444.44, 45549.26, 36819.653456], [1621195200000, 45553.24, 46480.0, 43825.39, 46431.5, 28724.055984], [1621209600000, 46426.83, 46686.0, 42777.0, 42915.46, 28171.858447], [1621224000000, 42915.46, 45400.0, 42196.97, 45149.18, 40557.45817], [1621238400000, 45143.28, 45800.0, 44291.84, 45731.39, 23851.50751], [ 1621252800000, 45733.55, 45791.04, 43156.0, 43362.75, 23137.989315], [1621267200000, 43357.0, 44400.0, 42001.0, 44197.73, 30883.162039], [1621281600000, 44197.73, 44939.2, 42500.0, 43538.04, 20055.197255], [1621296000000, 43538.02, 45281.34, 43150.79, 44779.83,19252.919453],[1621310400000,44774.78,45799.29,44738.26,45172.7,17218.430549],[1621324800000
我认为反向交易者正在尝试读取没有标题的标题。 尝试告诉 PandasData 没有标题。 查看文档
data = backtrader.feeds.PandasData(dataname=dataFrame, header=None)
我遇到了同样的问题,在调试后我发现它 append 因为反向交易者希望您的 dataframe 被日期时间索引(为了简单起见)。 然后要解决它,只需添加到您的代码中:
...
dataFrame = dataFrame.set_index('datetime')
...
在我的情况下,我还必须更改“日期时间”字段的类型,我这样做了:
...
dataFrame["datetime"] = dataFrame["datetime"].values.astype(dtype='datetime64[ms]')
dataFrame = dataFrame.set_index('datetime')
...
我希望这会对你有所帮助,即使你在 2 个月前问过这个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.