@ab_trader Thanks , i got and fixed it. I am using intraday data, but when i plot buy and sell signals are not coming in chart(red and green symbol). can you help me?!
here BUY and SELL symbol indication and profit loss are also missing..
@ab_trader Thanks , i got and fixed it. I am using intraday data, but when i plot buy and sell signals are not coming in chart(red and green symbol). can you help me?!
here BUY and SELL symbol indication and profit loss are also missing..
@Paska-Houso , in this code
def __init__(self):
self.signal = 0
def notify_order(self, order):
if order.status in [order.Submitted, order.Accepted]:
return
if order.status in [order.Completed]:
if order.isbuy():
self.signal += 1
self.log(
'BUY EXECUTED, Price: %.5f, Cost: %.5f, Position : %d' %
(order.executed.price,
order.executed.value, self.signal))
self.buyprice = order.executed.price
else: # Sell
self.signal -= 1
self.log('SELL EXECUTED, Price: %.5f, Cost: %.5f,Position : %d' %
(order.executed.price,
order.executed.value, self.signal))
self.bar_executed = len(self)
elif order.status in [order.Canceled, order.Margin, order.Rejected]:
self.log('Order Canceled/Margin/Rejected')
self.order = None
here initially
self.signal = 0
when this function called inside for loop
if order.isbuy():
signal is changing like -1 or 1, but order is happened before this signal changes..
I have a strategy i want apply my signal here, According to that it should buy or sell if i want to do this where to change and what to change? pls help.
Hi,
I am new to Backtrader , im slowly getting everything now. I want to change default backtrader buy sell signal strategy into my own strategy. Can you help me to fix this?. I want to know following things.
here is my code.
from __future__ import (absolute_import, division, print_function,
unicode_literals)
import os.path
import argparse
import datetime
import collections
import backtrader as bt
import backtrader.feeds as btfeeds
import backtrader.plot as plt
import backtrader.indicators as btinds
MAINSIGNALS = collections.OrderedDict(
(('longonly', bt.SIGNAL_LONG),
('shortonly', bt.SIGNAL_SHORT),
))
class Plotter(plt.Plot):
def __init__(self):
super().__init__(volup='#60cc73') # custom color for volume up bars
def show(self):
mng = self.mpyplot.get_current_fig_manager()
mng.window.state('zoomed')
self.mpyplot.show()
class St(bt.Strategy):
def log(self, txt, dt=None):
''' Logging function fot this strategy'''
dt = dt or self.data.datetime.date(0)
print('%s, %s' % (dt.isoformat(), txt))
def __init__(self):
self.signal = 0
def notify_order(self, order):
if order.status in [order.Submitted, order.Accepted]:
return
if order.status in [order.Completed]:
if order.isbuy():
self.signal += 1
self.log(
'BUY EXECUTED, Price: %.5f, Cost: %.5f, Position : %d' %
(order.executed.price,
order.executed.value, self.signal))
self.buyprice = order.executed.price
else: # Sell
self.signal -= 1
self.log('SELL EXECUTED, Price: %.5f, Cost: %.5f,Position : %d' %
(order.executed.price,
order.executed.value, self.signal))
self.bar_executed = len(self)
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 %.5f, NET %.5f' %
(trade.pnl, trade.pnlcomm))
def next(self):
txt = ','.join(
['%04d' % len(self.data),
self.data.datetime.date(0).isoformat(),
'Open : %.5f' % self.data.open[0],
'High : %.5f' % self.data.high[0],
'Low : %.5f' % self.data.low[0],
'Close : %.5f' % self.data.close[0],
'Position : %d' % self.signal])
print(txt)
if self.signal == 0:
if self.data.open[0] > self.data.close[0]:
o1 = self.buy(exectype=bt.Order.Market,
transmit=False)
print('{}: Oref {} / Buy at {}'.format(
self.datetime.date(), o1.ref, self.data.open[1]))
o2 = self.sell(exectype=bt.Order.Stop,
price=0.99 * self.data.open[1],
parent=o1,
transmit=False)
print('{}: Oref {} / Sell Stop at {}'.format(
self.datetime.date(), o2.ref, 0.99 * self.data.open[1]))
o3 = self.sell(exectype=bt.Order.Limit,
price=1.01 * self.data.open[1],
parent=o1,
transmit=True)
print('{}: Oref {} / Sell Limit at {}'.format(
self.datetime.date(), o3.ref, 1.01 * self.data.open[1]))
self.orefs = [o1.ref, o2.ref, o3.ref]
elif self.data.open[0] < self.data.close[0]:
o1 = self.sell(exectype=bt.Order.Market,
transmit=False)
print('{}: Oref {} / Sell at {}'.format(
self.datetime.date(), o1.ref, self.data.open[1]))
o2 = self.buy(exectype=bt.Order.Stop,
price=1.01 * self.data.open[1],
parent=o1,
transmit=False)
print('{}: Oref {} / Buy Stop at {}'.format(
self.datetime.date(), o2.ref, 1.01 * self.data.open[1]))
o3 = self.buy(exectype=bt.Order.Limit,
price=0.99 * self.data.open[1],
parent=o1,
transmit=True)
print('{}: Oref {} / Buy Limit at {}'.format(
self.datetime.date(), o3.ref, 0.99 * self.data.open[1]))
self.orefs = [o1.ref, o2.ref, o3.ref]
elif self.signal == 1:
if self.data.open[0] > self.data.close[0]:
return
elif self.data.open[0] < self.data.close[0]:
o1 = self.sell(exectype=bt.Order.Market,
transmit=False, size=2)
print('{}: Oref {} / Sell at {}'.format(
self.datetime.date(), o1.ref, self.data.open[1]))
o2 = self.buy(exectype=bt.Order.Stop,
price=1.01 * self.data.open[1],
parent=o1,
transmit=False)
print('{}: Oref {} / Buy Stop at {}'.format(
self.datetime.date(), o2.ref, 1.01 * self.data.open[1]))
o3 = self.buy(exectype=bt.Order.Limit,
price=0.99 * self.data.open[1],
parent=o1,
transmit=True)
print('{}: Oref {} / Buy Limit at {}'.format(
self.datetime.date(), o3.ref, 0.99 * self.data.open[1]))
self.orefs = [o1.ref, o2.ref, o3.ref]
elif self.signal == -1:
if self.data.open[0] < self.data.close[0]:
return
elif self.data.open[0] > self.data.close[0]:
o1 = self.sell(exectype=bt.Order.Market, size=2,
transmit=False)
print('{}: Oref {} / Sell at {}'.format(
self.datetime.date(), o1.ref, self.data.open[1]))
o2 = self.buy(exectype=bt.Order.Stop,
price=1.01 * self.data.open[1],
parent=o1,
transmit=False)
print('{}: Oref {} / Buy Stop at {}'.format(
self.datetime.date(), o2.ref, 1.01 * self.data.open[1]))
o3 = self.buy(exectype=bt.Order.Limit,
price=0.99 * self.data.open[1],
parent=o1,
transmit=True)
print('{}: Oref {} / Buy Limit at {}'.format(
self.datetime.date(), o3.ref, 0.99 * self.data.open[1]))
self.orefs = [o1.ref, o2.ref, o3.ref]
class Plotter(plt.Plot):
def __init__(self):
super().__init__(volup='#60cc73') # custom color for volume up bars
def show(self):
mng = self.mpyplot.get_current_fig_manager()
mng.window.state('zoomed')
self.mpyplot.show()
def runstrat():
args = parse_args()
cerebro = bt.Cerebro()
# modpath = 'd:\\I - TradersGPS\\'
# datapath = os.path.join(modpath, 'GBPUSD_D1_UTC+2_00.csv')
data = btfeeds.GenericCSVData( dataname='E:\\SARATH\\Project\\IQfeed\\data-1510663056754.csv',
fromdate=datetime.datetime(2017, 6, 1),
todate=datetime.datetime(2017, 11, 3),
timeframe=bt.TimeFrame.Minutes,
compression=1,
nullvalue=0.0,
dtformat=('%Y-%m-%d %H:%M:%S'),
datetime=0,
time=-1,
open=2,
high=3,
low=4,
close=1,
volume=5,
openinterest=6 )
cerebro.adddata(data)
cerebro.addstrategy(St)
cerebro.broker.setcash(100000.0)
print('Starting Portfolio Value: %.5f' % cerebro.broker.getvalue())
cerebro.run(stdstats=False)
print('Final Portfolio Value: %.5f' % cerebro.broker.getvalue())
plotter = Plotter()
cerebro.plot(plotter=plotter,subplot=False)
def parse_args():
parser = argparse.ArgumentParser(
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
description='Sample for pivot point and cross plotting')
parser.add_argument('--data0',
default='d:\\I - TradersGPS\\GBPUSD_D1_UTC+2_00.csv',
required=False, help='Data0 to read in')
parser.add_argument('--data1',
default='d:\\I - TradersGPS\\GBPUSD_H1_UTC+2_00.csv',
required=False, help='Data1 to read in')
parser.add_argument('--fromdate', required=False, default='2001-01-01',
help='Date[time] in YYYY-MM-DD[THH:MM:SS] format')
parser.add_argument('--todate', required=False, default='2007-01-01',
help='Date[time] in YYYY-MM-DD[THH:MM:SS] format')
parser.add_argument('--plot', required=False, action='store_true',
help=('Plot the result'))
return parser.parse_args()
if __name__ == '__main__':
runstrat()
This code itself i have got one of the users from this community. Can anyone help me?
Thanks in advance