Thanks a lot guys. You guys are genius with Backtrader.
I would like to know that can remove some extra details from csv file when using Writer.
Like pnl ,tickers etc
Thanks a lot guys. You guys are genius with Backtrader.
I would like to know that can remove some extra details from csv file when using Writer.
Like pnl ,tickers etc
Exporting data in csv.
Hey guys can u please help me on how to export the data of trades and all the details printed in the terminal to csv files.
I want to export all my trades in csv files
@run-out @ab_trader @backtrader
Thanks a lot for the reply man it helped.
@run-out there's one another problem- The code is not ending anywhere. It is just running
So sorry for not posting the error.
Here you go.
Traceback (most recent call last):
File "C:/Users/Abhishek/Backtrader/orb.py", line 44, in <module>
cerebro.adddata(data)
TypeError: adddata() missing 1 required positional argument: 'data'
import backtrader as bt
import datetime
import backtrader.feeds as btfeed
class MyStrategy(bt.Strategy):
def __init__(self):
ma_short = bt.ind.SMA(period=10)
ma_long = bt.ind.SMA(period=20)
self.crossover = bt.ind.CrossOver(ma_long, ma_short)
def next(self):
if not self.position:
if self.crossover > 0:
self.buy()
elif self.crossover < 0:
self.close()
if __name__ == '__main__':
cerebro = bt.Cerebro
class DataFeed(btfeed.GenericCSVData):
params = (
('dtformat', '%Y%m%d'),
('tmformat', '%H:%M:%S'),
('datetime', 0),
('time', 1),
('open', 2),
('high', 3),
('low', 4),
('close', 5),
('volume', 6),
('openinterest', 7)
)
data = DataFeed(dataname='BANKNIFTYAUG19.csv', timeframe=bt.TimeFrame.Minutes, compression=15,
fromdate=datetime.datetime(2019, 7, 20),
todate=datetime.datetime(2019, 8, 30))
cerebro.adddata(data)
cerebro.addstrategy(MyStrategy)
cerebro.broker.setcash(100000)
cerebro.run()
**Getting this error again. Started again with Backtrader after few days of break. Please help
@run-out @ab_trader @backtrader **```
import backtrader as bt
import datetime
import backtrader.feeds as btfeed
class MyStrategy(bt.Strategy):
def init(self):
sma_short = bt.ind.SMA(period=10)
sma_long = bt.ind.SMA(period=20)
self.crossover = bt.ind.CrossOver(sma_short, sma_long)
def next(self):
if not self.position:
if self.crossover > 0:
self.buy()
elif self.crossover < 0:
self.close()
if name == 'main':
cerebro = bt.Cerebro
class DataFeed(btfeed.GenericCSVData):
params = (
('dtformat', '%Y%m%d'),
('tmformat', '%H:%M:%S'),
('datetime', 0),
('time', 1),
('open', 2),
('high', 3),
('low', 4),
('close', 5),
('volume', 6),
('openinterest', 7)
)
data = DataFeed(dataname='BANKNIFTYAUG19.csv', timeframe=bt.TimeFrame.Minutes, compression=15,
fromdate=datetime.datetime(2019, 7, 20),
todate=datetime.datetime(2019, 8, 30))
cerebro.adddata(data)
cerebro.addstrategy(MyStrategy)
cerebro.run()
It still doesn't work. Can u connect over teamviewer for some help.
I wanted to make a range breakout strategy. Mkt opens at 9:15 IST. I want the algo to calculate the range of 1st 15min bar and buy or sell if the price is above high or low. I have a 1 min data.
in this code i am getting an IndexError.
Please help
@backtrader @ab_trader @run-out
from __future__ import (absolute_import, division, print_function,
unicode_literals)
import backtrader as bt
import datetime
# from datetime import datetime
import os
import sys
import backtrader.feeds as btfeed
import pandas as pd
class TestStrategy(bt.Strategy):
def log(self, txt, dt=None):
dt = dt or self.data.datetime.datetime(0)
print('%s, %s' % (dt.isoformat(), txt))
def __init__(self):
self.datahigh = self.datas[0].high
self.datalow = self.datas[0].low
self.dataclose = self.datas[0].close
self.order = None
self.buyprice = None
self.buycomm = None
# self.starttime = datetime.replace(hour=9, minute=30, second=0)
# self.t = self.datas[0].datetime.time(0)
def notify_order(self, order):
if order.status in [order.Submitted, order.Accepted]:
# Buy/Sell order submitted/accepted to/by broker - Nothing to do
return
# Check if an order has been completed
# Attention: broker could reject order if not enough cash
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))
self.buyprice = order.executed.price
self.buycomm = order.executed.comm
else: # Sell
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 next(self):
if self.order:
return
if not self.position:
if self.dataclose[0] > self.datahigh[-1]:
self.log('BUY CREATED, %.2f' % self.dataclose[0])
# Keep track of the created order to avoid a 2nd order
self.order = self.buy()
else:
if self.dataclose[0] < self.datalow[-1]:
self.log('SELL CREATED, %.2f' % self.dataclose[0])
# Keep track of the created order to avoid a 2nd order
self.order = self.sell()
def stop(self):
self.log(' Ending Value %.2f' % (self.broker.getvalue()))
if __name__ == '__main__':
cerebro = bt.Cerebro()
class DataFeed(btfeed.GenericCSVData):
params = (
('dtformat', '%Y%m%d'),
('tmformat', '%H:%M:%S'),
('datetime', 0),
('time', 1),
('open', 2),
('high', 3),
('low', 4),
('close', 5),
('volume', 6),
('openinterest', 7)
)
data = DataFeed(dataname='BANKNIFTYFEB18.csv', timeframe=bt.TimeFrame.Minutes, compression=15,
fromdate=datetime.datetime(2017, 2, 1),
todate=datetime.datetime(2017, 2, 28))
cerebro.adddata(data)
cerebro.addstrategy(TestStrategy)
cerebro.run()
ext
@run-out Hey that error has been solved. I want to code my program that is starts taking trade after 9:30(Market opens at 9:30). Timeframe = 1 minute
Condition is if close of any 1 minute bar after 9:30 is above the high range then buy at market price.
If close of any 1 minute bar after 9:30 is below the low range then sell at market price.
from __future__ import (absolute_import, division, print_function,
unicode_literals)
import backtrader as bt
import datetime
from datetime import datetime
import os
import sys
import backtrader.feeds as btfeed
import pandas as pd
class TestStrategy(bt.Strategy):
def log(self, txt, dt=None):
dt = dt or self.data.datetime.datetime(0)
print('%s, %s' % (dt.isoformat(), txt))
def __init__(self):
self.buysignal = self.data.close > self.data.high
self.sellsignal = self.data.close > self.data.low
self.dataclose = self.datas[0].close
self.order = None
self.buyprice = None
self.buycomm = None
self.starttime = datetime.now().replace(hour=9, minute=30, second=0)
self.t = self.datas[0].datetime.time(0)
def notify_order(self, order):
if order.status in [order.Submitted, order.Accepted]:
# Buy/Sell order submitted/accepted to/by broker - Nothing to do
return
# Check if an order has been completed
# Attention: broker could reject order if not enough cash
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))
self.buyprice = order.executed.price
self.buycomm = order.executed.comm
else: # Sell
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 next(self):
if self.order:
return
if not self.position:
if self.t > self.starttime.time():
if self.buysignal:
self.log('BUY CREATED, %.2f' % self.dataclose[0])
# Keep track of the created order to avoid a 2nd order
self.order = self.buy()
else:
if self.sellsignal:
self.log('SELL CREATED, %.2f' % self.dataclose[0])
# Keep track of the created order to avoid a 2nd order
self.order = self.sell()
def stop(self):
self.log(' Ending Value %.2f' % (self.broker.getvalue()))
if __name__ == '__main__':
cerebro = bt.Cerebro()
class DataFeed(btfeed.GenericCSVData):
params = (
('dtformat', '%Y%m%d'),
('tmformat', '%H:%M:%S'),
('datetime', 0),
('time', 1),
('open', 2),
('high', 3),
('low', 4),
('close', 5),
('volume', 6),
('openinterest', 7)
)
data = DataFeed(dataname='BANKNIFTYFEB18.csv', timeframe=bt.TimeFrame.Minutes, compression=1)
cerebro.adddata(data)
cerebro.addstrategy(TestStrategy)
cerebro.run()
# why declare a class for generating data
# my data fromat is diff than the yahoo data. so have to modify
# letme show u the plott file