For code/output blocks: Use ``` (aka backtick or grave accent) in a single line before and after the block. See: http://commonmark.org/help/
why don't take another position?
-
when I run below code, just EXECUTED one position and another don't take.
can you help me to run this code correctly?from datetime import datetime import datetime import backtrader as bt import pandas as pd %matplotlib inline class Strats(bt.Strategy): lines = ('sma', ) params = (('sma', 10), ('fastma', 20)) def __init__(self): self.dataclose = self.datas[0].close self.slowsma = bt.indicators.SMA(self.datas[0], period=self.p.sma) self.fastsma = bt.indicators.SMA(self.datas[0], period=self.p.fastma) self.cross = bt.indicators.CrossOver(self.fastsma, self.slowsma) self.order = None def log(self, txt, dt=None): dt = self.datas[0].datetime.date() print(f'{dt}, {txt}') def notify_order(self, order): if order.status in [order.Submitted, order.Accepted]: self.log(f'Status: {order.getstatusname()}') print(order.isbuy(),'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb') print(order.issell(),'ssssssssssssssssssssssssssssssss') if order.status in [order.Completed]: self.log(f'BUY EXECUTED: Price: {order.executed.price},\ Cost: {order.executed.value}, Comms: {order.executed.comm}') print(order.isbuy(),'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb') print(order.issell(),'ssssssssssssssssssssssssssssssss') self.log(f'Account Balance: {cerebro.broker.getcash()}') elif order.status in [order.Rejected, order.Margin, order.Cancelled]: self.log('order rejected/cancelled by broker or insufficient margin') self.order = None def notify_trade(self, trade): if trade.isopen: return else: self.log(f'OPERATION PROFIT: GROSS {trade.pnl}, NET {trade.pnlcomm},\ Trade PnL: {trade.pnlcomm/self.totalcost}') self.log(f'Updated Account Balance: {cerebro.broker.getcash()}') def next(self): if self.order: self.log(f'Open: {self.data.open[0]}, High: {self.data.high[0]},\ Low: {self.data.low[0]}, Close: {self.dataclose[0]}') return if not self.position: if self.cross > 0: # self.order = self.buy() self.order =self.buy(exectype=bt.Order.StopTrail,trailpercent=0.02) self.log(f'BUY CREATED: {self.dataclose[0]}') elif self.cross < 0: # self.order = self.sell() self.order =self.sell(exectype=bt.Order.StopTrail, trailpercent=0.02) self.log(f'SELL CREATED: {self.dataclose[0]}') cerebro = bt.Cerebro() cerebro.broker.set_cash(100000) print(f'Starting Portfolio Value: {cerebro.broker.getvalue()}') df = pd.read_pickle("data_pairs_kucoin_future_1d.pkl").loc[15,'pair'] df['date'] = df['date'].astype(str) +' '+ df['time'].astype(str) df['date']= pd.to_datetime(df['date'], format='%d/%m/%Y %H:%M:%S' ) df.set_index('date', inplace=True) data = bt.feeds.PandasData(dataname=df) cerebro.adddata(data) cerebro.addstrategy(Strats) cerebro.addsizer(bt.sizers.PercentSizer, percents=99) cerebro.broker.setcommission(commission=0.02) cerebro.run() print(f'Final Portfolio Value: {cerebro.broker.getvalue()}') cerebro.plot()
output:
Starting Portfolio Value: 100000 2021-05-24, BUY CREATED: 11.959 2021-05-25, Status: Submitted True bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb False ssssssssssssssssssssssssssssssss 2021-05-25, order rejected/cancelled by broker or insufficient margin 2021-06-09, SELL CREATED: 10.537 2021-06-10, Status: Submitted False bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb True ssssssssssssssssssssssssssssssss 2021-06-10, Status: Accepted False bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb True ssssssssssssssssssssssssssssssss 2021-06-10, BUY EXECUTED: Price: 10.326260000000001, Cost: -97020.0, Comms: 1940.4 False bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb True ssssssssssssssssssssssssssssssss 2021-06-10, Account Balance: 195079.6 Final Portfolio Value: 179586.48051627597
and picture:
-
I solve this problem
I have a new problem
why I can't take this print some times between BUY CREATED and SELL CREATEDself.log(f'OPERATION PROFIT: GROSS {trade.pnl}, NET: {trade.pnlcomm}') self.log(f'Updated Account Balance: {cerebro.broker.getvalue()}')
my complete code:
from datetime import datetime import datetime import backtrader as bt import pandas as pd %matplotlib inline class Strats(bt.Strategy): lines = ('sma', ) params = (('sma', 10), ('fastma', 20)) def __init__(self): self.dataclose = self.datas[0].close self.slowsma = bt.indicators.SMA(self.datas[0], period=self.p.sma) self.fastsma = bt.indicators.SMA(self.datas[0], period=self.p.fastma) self.cross = bt.indicators.CrossOver(self.fastsma, self.slowsma) self.order = None def log(self, txt, dt=None): dt = self.datas[0].datetime.date() print(f'{dt}, {txt}') def notify_order(self, order): if order.status in [ order.Accepted]: self.log(f'Status: {order.getstatusname()}') print(order.isbuy(),'bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb') print(order.issell(),'ssssssssssssssssssssssssssssssss') if order.status in [order.Completed]:#یعنی اینکه معامله تمام شده self.log(f'Status: {order.getstatusname()}') self.log(f'BUY EXECUTED: Price: {order.executed.price},\ Cost: {order.executed.value}, Comms: {order.executed.comm}') self.log(f'Account Balance: {cerebro.broker.getcash()}') elif order.status in [order.Rejected, order.Margin, order.Cancelled]: self.log('order rejected/cancelled by broker or insufficient margin') self.order = None def notify_trade(self, trade): if trade.isopen: return else: self.log(f'OPERATION PROFIT: GROSS {trade.pnl}, NET: {trade.pnlcomm}') self.log(f'Updated Account Balance: {cerebro.broker.getvalue()}') def next(self): # self.log(f'Open: {self.data.open[0]}, High: {self.data.high[0]},\ # Low: {self.data.low[0]}, Close: {self.dataclose[0]}') if self.order: return if not self.position: if self.cross < 0: # self.order = self.buy(size=None) self.order =self.buy(exectype=bt.Order.StopTrail,trailpercent=0.02) self.log(f'BUY CREATED: {self.dataclose[0]}') else: if self.cross > 0: # self.order = self.sell(size=None) self.order =self.sell(exectype=bt.Order.StopTrail, trailpercent=0.02) self.log(f'SELL CREATED: {self.dataclose[0]}') cerebro = bt.Cerebro() cerebro.broker.set_cash(100000) print(f'Starting Portfolio Value: {cerebro.broker.getvalue()}') df = pd.read_pickle("data_pairs_kucoin_future_1d.pkl").loc[15,'pair'] df['date'] = df['date'].astype(str) +' '+ df['time'].astype(str) df['date']= pd.to_datetime(df['date'], format='%d/%m/%Y %H:%M:%S' ) df.set_index('date', inplace=True) data = bt.feeds.PandasData(dataname=df) cerebro.adddata(data) cerebro.addstrategy(Strats) cerebro.addsizer(bt.sizers.PercentSizer, percents=96) cerebro.broker.setcommission(commission=0.002) cerebro.run() print(f'Final Portfolio Value: {cerebro.broker.getvalue()}') cerebro.plot()
and out put:
Starting Portfolio Value: 100000 2021-06-09, BUY CREATED: 10.537 2021-06-10, Status: Accepted True bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb False ssssssssssssssssssssssssssssssss 2021-06-13, Status: Completed 2021-06-13, BUY EXECUTED: Price: 7.994759999999999, Cost: 72838.28034544936, Comms: 145.67656069089873 2021-06-13, Account Balance: 27016.043093859746 2021-07-16, SELL CREATED: 6.361 2021-07-17, Status: Accepted False bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb True ssssssssssssssssssssssssssssssss 2021-07-18, Status: Completed 2021-07-18, BUY EXECUTED: Price: 7.335300000000001, Cost: 72838.28034544936, Comms: 133.66020689000663 2021-07-18, Account Balance: 93712.48633197304 2021-07-18, OPERATION PROFIT: GROSS -6008.176900446039, NET: -6287.513668026944 2021-07-18, Updated Account Balance: 93712.48633197304 2021-07-27, BUY CREATED: 8.2 2021-07-28, Status: Accepted True bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb False ssssssssssssssssssssssssssssssss 2021-07-28, Status: Completed 2021-07-28, BUY EXECUTED: Price: 8.363999999999999, Cost: 91763.266616268, Comms: 183.526533232536 2021-07-28, Account Balance: 1765.6931824725036 2021-08-30, SELL CREATED: 11.545 2021-08-31, Status: Accepted False bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb True ssssssssssssssssssssssssssssssss 2021-08-31, Status: Completed 2021-08-31, BUY EXECUTED: Price: 11.3141, Cost: 91763.266616268, Comms: 248.25891315713002 2021-08-31, Account Balance: 125646.8908478804 2021-08-31, OPERATION PROFIT: GROSS 32366.189962297027, NET: 31934.40451590736 2021-08-31, Updated Account Balance: 125646.8908478804 2021-09-09, BUY CREATED: 11.004 2021-09-10, Status: Accepted True bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb False ssssssssssssssssssssssssssssssss 2021-09-10, Status: Completed 2021-09-10, BUY EXECUTED: Price: 11.224079999999999, Cost: 123033.43551824447, Comms: 246.06687103648895 2021-09-10, Account Balance: 2367.3884585994338 2021-09-11, SELL CREATED: 10.583 2021-09-12, Status: Accepted False bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb True ssssssssssssssssssssssssssssssss 2021-09-12, Status: Completed 2021-09-12, BUY EXECUTED: Price: 10.37134, Cost: 123033.43551824447, Comms: 227.37214829683853 2021-09-12, Account Balance: 115826.09045872187 2021-09-12, OPERATION PROFIT: GROSS -9347.361369825203, NET: -9820.80038915853 2021-09-12, Updated Account Balance: 115826.09045872187 2021-09-21, BUY CREATED: 9.22 2021-09-22, Status: Accepted True bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb False ssssssssssssssssssssssssssssssss 2021-09-22, Status: Completed 2021-09-22, BUY EXECUTED: Price: 9.4044, Cost: 113416.90777718044, Comms: 226.8338155543609 2021-09-22, Account Balance: 2182.348865987063 2021-09-24, SELL CREATED: 9.695 2021-09-25, Status: Accepted False bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb True ssssssssssssssssssssssssssssssss 2021-09-25, Status: Completed 2021-09-25, BUY EXECUTED: Price: 9.501100000000001, Cost: 113416.90777718044, Comms: 229.16621634166333 2021-09-25, Account Balance: 116536.29082047705 2021-09-25, OPERATION PROFIT: GROSS 1166.200393651203, NET: 710.2003617551788 2021-09-25, Updated Account Balance: 116536.29082047705 2021-10-08, BUY CREATED: 10.744 2021-10-09, Status: Accepted True bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb False ssssssssssssssssssssssssssssssss 2021-10-09, Status: Completed 2021-10-09, BUY EXECUTED: Price: 10.95888, Cost: 114112.33597141113, Comms: 228.22467194282228 2021-10-09, Account Balance: 2195.7301771230996 2021-10-19, SELL CREATED: 10.743 2021-10-20, Status: Accepted False bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb True ssssssssssssssssssssssssssssssss 2021-10-20, Status: Completed 2021-10-20, BUY EXECUTED: Price: 10.52814, Cost: 114112.33597141113, Comms: 219.25427577162128 2021-10-20, Account Balance: 111603.61378716212 2021-10-20, OPERATION PROFIT: GROSS -4485.198085600503, NET: -4932.677033314946 2021-10-20, Updated Account Balance: 111603.61378716212 2021-10-20, BUY CREATED: 11.546 2021-10-21, Status: Accepted True bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb False ssssssssssssssssssssssssssssssss 2021-10-22, Status: Completed 2021-10-22, BUY EXECUTED: Price: 11.14146, Cost: 103385.59768842117, Comms: 206.77119537684234 2021-10-22, Account Balance: 8011.244903364105 2021-11-14, SELL CREATED: 11.05 2021-11-15, Status: Accepted False bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb True ssssssssssssssssssssssssssssssss 2021-11-15, Status: Completed 2021-11-15, BUY EXECUTED: Price: 10.829, Cost: 103385.59768842117, Comms: 200.972338879808 2021-11-15, Account Balance: 108296.4420043883 2021-11-15, OPERATION PROFIT: GROSS -2899.428248517165, NET: -3307.1717827738153 2021-11-15, Updated Account Balance: 108296.4420043883 2021-12-23, BUY CREATED: 7.315 2021-12-24, Status: Accepted True bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb False ssssssssssssssssssssssssssssssss 2021-12-24, Status: Completed 2021-12-24, BUY EXECUTED: Price: 7.4613000000000005, Cost: 106043.87601069701, Comms: 212.087752021394 2021-12-24, Account Balance: 2040.4782416698913 2022-01-09, SELL CREATED: 6.929 2022-01-10, Status: Accepted False bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb True ssssssssssssssssssssssssssssssss 2022-01-10, Status: Completed 2022-01-10, BUY EXECUTED: Price: 6.79042, Cost: 106043.87601069701, Comms: 193.01796109003985 2022-01-10, Account Balance: 98356.44082559978 2022-01-10, OPERATION PROFIT: GROSS -9534.895465677086, NET: -9940.00117878852 2022-01-10, Updated Account Balance: 98356.44082559978 2022-02-09, BUY CREATED: 4.757 2022-02-10, Status: Accepted True bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb False ssssssssssssssssssssssssssssssss 2022-02-11, Status: Completed 2022-02-11, BUY EXECUTED: Price: 4.49718, Cost: 89264.98923901367, Comms: 178.52997847802735 2022-02-11, Account Balance: 8912.92160810809 2022-02-17, SELL CREATED: 3.946 2022-02-18, Status: Accepted False bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb True ssssssssssssssssssssssssssssssss 2022-02-18, Status: Completed 2022-02-18, BUY EXECUTED: Price: 3.86708, Cost: 89264.98923901367, Comms: 153.51613881872862 2022-02-18, Account Balance: 85517.47487865368 2022-02-18, OPERATION PROFIT: GROSS -12506.919829649363, NET: -12838.965946946118 2022-02-18, Updated Account Balance: 85517.47487865368 2022-03-21, BUY CREATED: 3.31 2022-03-22, Status: Accepted True bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb False ssssssssssssssssssssssssssssssss 2022-03-22, Status: Completed 2022-03-22, BUY EXECUTED: Price: 3.3762, Cost: 83738.71140117767, Comms: 167.47742280235536 2022-03-22, Account Balance: 1611.2860546736529 2022-04-11, SELL CREATED: 3.106 2022-04-12, Status: Accepted False bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb True ssssssssssssssssssssssssssssssss 2022-04-14, Status: Completed 2022-04-14, BUY EXECUTED: Price: 3.26634, Cost: 83738.71140117767, Comms: 162.02778425337522 2022-04-14, Account Balance: 82463.15039710788 2022-04-14, OPERATION PROFIT: GROSS -2724.819274490068, NET: -3054.3244815457983 2022-04-14, Updated Account Balance: 82463.15039710788 2022-04-25, BUY CREATED: 3.28 2022-04-26, Status: Accepted True bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb False ssssssssssssssssssssssssssssssss 2022-04-27, Status: Completed 2022-04-27, BUY EXECUTED: Price: 2.9631, Cost: 71516.06661707425, Comms: 143.0321332341485 2022-04-27, Account Balance: 10804.051646799482 2022-04-28, SELL CREATED: 2.988 2022-04-29, Status: Accepted False bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb True ssssssssssssssssssssssssssssssss 2022-04-29, Status: Completed 2022-04-29, BUY EXECUTED: Price: 2.92824, Cost: 71516.06661707425, Comms: 141.34940225492323 2022-04-29, Account Balance: 81337.40337200619 2022-04-29, OPERATION PROFIT: GROSS -841.3654896126303, NET: -1125.747025101702 2022-04-29, Updated Account Balance: 81337.40337200619 Final Portfolio Value: 81337.40337200619
-
if you have suggestion for get better my cod I become glad