For code/output blocks: Use ``` (aka backtick or grave accent) in a single line before and after the block. See: http://commonmark.org/help/
How to cancel bracket order.
-
I am trying this strategy using bracket order. I am trying to enter into short strategy and have stoploss, takeprofit and exit square off conditions to take exit. But the problem is The trade is exiting multiple time but it should complete only one exit order and cancel other two.
I am attaching my code please let me know what I am doing wrong.def next(self): self.starttime = self.data.datetime.time() self.new_time = timedelta(hours=self.starttime.hour+5, minutes=self.starttime.minute+30) self.curr_time = datetime.strptime(str(self.new_time), '%H:%M:%S').time() pos = self.getposition() if self.orefs: return if not self.position: # if self.data.high[0] < self.ema[0] and self.p.position_type in ["short"]: if self.p.position_type in ["short"] and self.starttime >= self.entry_time and self.starttime <= self.exit_time: self.stoploss = self.data.close[0] * (self.p.stoploss + (0.1 / 100)) self.takeprofit = self.data.close[0] * (self.p.takeprofit - (0.1 / 100)) if not self.p.usebracket: self.o1 = self.sell(exectype=bt.Order.Market, data=self.data, valid=bt.Order.DAY, size=self.p.quantity, transmit=False) self.o1.addinfo(Trigger='SSEN', name="SSEN") print('{}: Oref {} / Sell at {}'.format( self.datetime.datetime(), self.o1.ref, self.data.close[0])) self.o1.addinfo(Trigger='SSEN', name="SSEN") self.trade_entry_time = self.datetime.datetime() # print(self.order_in) self.o2 = self.buy(exectype=bt.Order.Stop, data=self.data, price=self.stoploss, valid=bt.Order.DAY, size=self.o1.size, parent=self.o1, transmit=False) self.o2.addinfo(Trigger='SBSL', name='SBSL') print('{}: Oref {} / Buy Stop at {}'.format( self.datetime.datetime(), self.o2.ref, self.stoploss)) # self.orefs.append(self.o2.ref) self.o3 = self.buy(exectype=bt.Order.Limit, data=self.data, price=self.takeprofit, valid=bt.Order.DAY, size=self.o1.size, parent=self.o1, transmit=True) self.o3.addinfo(Trigger='SBTP', name='SBTP') print('{}: Oref {} / Buy TP at {}'.format( self.datetime.datetime(), self.o3.ref, self.takeprofit)) # self.orefs.append(self.o3.ref) self.o4 = self.buy(exectype=bt.Order.Market, size=self.p.quantity, data=self.data) self.o4.addinfo(Trigger='SBEX', name='SBEX') print('{}: Oref {} / Buy Exit at {}'.format( self.datetime.datetime(), self.o4.ref, self.data.close[0])) # self.orefs.append(self.o4.ref) self.o5 = self.buy(exectype=bt.Order.Market, size=self.p.quantity, data=self.data) self.o5.addinfo(Trigger='SBSO', name='SBSO') print('{}: Oref {} / Buy Exit at {}'.format( self.datetime.datetime(), self.o5.ref, self.data.close[0])) # self.orefs.append(self.o5.ref) self.orefs= [self.o1.ref, self.o2.ref, self.o3.ref, self.o4.ref, self.o5.ref] print(self.orefs) def notify_order(self, order): if order.status in[order.Submitted, order.Accepted]: # print("Order Accepted") return elif order.status in [order.Completed]: if order.isbuy(): self.buyprice = order.executed.price self.buycomm = order.executed.comm self.stoploss = order.executed.price * (self.p.stoploss - (0.1/100)) self.takeprofit = order.executed.price * (self.p.takeprofit + (0.1/100)) self.ord_type = "BUY" self.buytrade = self.buytrade + 1 self.total_buy_qty = self.total_buy_qty + order.executed.size elif order.issell(): self.sellprice = order.executed.price self.stoploss = order.executed.price * (self.p.stoploss + (0.1/100)) self.takeprofit = order.executed.price * (self.p.takeprofit - (0.1/100)) self.ord_type = "SELL" self.selltrade = self.selltrade+1 self.total_sell_qty = self.total_sell_qty + abs(order.executed.size) print("Completed %s: %s %s Executed Price: %.2f Size: %.2f Commission: %.2f %s" % (self.ord_type, order.ref, # self.data.num2date(order.executed.dt).date().isoformat(), self.datetime.datetime(), order.executed.price, order.executed.size, order.executed.comm, order.info['name'],)) elif order.status in [order.Cancelled, order.Rejected, order.Margin]: print(order.ref,": Order Cancelled/Rejected/Margin") self.order = None
ThankYou