For code/output blocks: Use ``` (aka backtick or grave accent) in a single line before and after the block. See: http://commonmark.org/help/

Market Order Submitted, but not executed...



  • As the title suggests, I placed my bracket order as Market Order, but it wasn't executed. Can anyone help?

    Strategy Snippet:

    class TurtleStrategy(bt.Strategy):
        
        # Set the parameters
        params = (
            ('fast_ema_period', 25),
            ('slow_ema_period', 350),
            ('donchian_period', 20),
            ('ATR_period', 20),
            ('ATR_dist', 2.0),
            ('percrisk', 0.01),
            ('multi', 1000.0)
            )
        
        def log(self, txt, dt = None):
            ''' Logging Function for this strategy'''
            dt = dt or self.datas[0].datetime.date(0)
            dt1 = self.datas[0].datetime.time(0)
            print('%s, %s, %s' % (dt.isoformat(), dt1.isoformat(), txt))
        
        def __init__(self):
            
            # Set up the indicators
            self.emafast = bt.indicators.ExponentialMovingAverage(self.data.close,
                period = self.p.fast_ema_period)
            self.emaslow = bt.indicators.ExponentialMovingAverage(self.data.close,
                period = self.p.slow_ema_period)
            self.donchian = DonchianChannels()
            self.atr = bt.indicators.ATR(self.data,
                                         period=self.p.ATR_period)
            
            # Fast-Slow EMA Crossover signal
            self.CrossOver = bt.indicators.CrossOver(self.emafast, self.emaslow)
            
            # Keep track of pending order + price + commission
            self.order = None 
            self.buyprice = None
            self.buycomm = None
            
        def notify_order(self, order):
            if order.status in [order.Submitted, order.Accepted]:
                # Buy/Sell order submitted/accepted by broker. Do nothing
                self.log('ORDER ACCEPTED/SUBMITTED')
                return 
            
            #Check if order has been completed
            if order.status in [order.Completed]:
                if order.isbuy():
                    self.log(
                        'LONG 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(
                        'SHORT EXECUTED, Price: %.2f, Cost: %.2f, Comm: %.2f' % 
                        (order.executed.price,
                         order.executed.value,
                         order.executed.comm))
                    
                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
            
            # open position PnL
            self.log('OPERATION PROFIT, Gross %.2f, Net %.2f' %
                     (trade.pnl, trade.pnlcomm))
            self.log('PORTFOLIO VALUE, %.2f' % self.broker.get_value())
                    
    
        def next(self):
            close = self.data.close[0]
            # Log closing price for reference
            self.log('Close, %.2f' % close)
            
            # Check if an order is pending, if yes then we do nothing
            if self.order:
                return
            
            # set up parameters for SL and TP
            pdist = self.atr[0] * self.p.ATR_dist
            long_stop = close - pdist
            short_stop = close + pdist
            long_profit = close + pdist
            short_profit = close - pdist
            Size = (0.01 * self.broker.get_value()) / (self.atr[0] * 50000)
            
            # Check if we are in the market
            if not self.position: # not in the market
                # Trade Logic
                if close > self.donchian.l.dch[0]:
                    if self.emafast[0] > self.emaslow[0]:
                        # Place BUY trade : 1% of portfolio value
                        self.log('BUY CREATE, {}, DONCHIAN HIGH, {}, ATR, {}'.format(
                                close, self.donchian.l.dch[0], self.atr[0]))
                        self.buy_bracket(
                            stopprice = long_stop,
                            limitprice = long_profit,
                            exectype = bt.Order.Market,
                            size = Size
                            )
                        
                
                elif close < self.donchian.l.dcl[0]:
                    if self.emafast[0] < self.emaslow[0]:
                        # Place SELL trade : 1% of portfolio value
                        self.log('SELL CREATE, {}, DONCHIAN LOW, {}, ATR, {}'.format(
                                close, self.donchian.l.dcl[0], self.atr[0]))
                        self.sell_bracket(
                            stopprice = short_stop,
                            limitprice = short_profit,
                            exectype = bt.Order.Market,
                            size = Size
                            )
    

    My Output:

    2020-02-24, 23:59:59.999989, Close, 2.55
    2020-02-24, 23:59:59.999989, Close, 2.57
    2020-02-24, 23:59:59.999989, Close, 2.58
    2020-02-22, 23:59:59.999989, Close, 2.64
    2020-02-22, 23:59:59.999989, BUY CREATE, 2.642, DONCHIAN HIGH, 2.611, ATR, 0.053519956567191586
    2020-02-21, 23:59:59.999989, ORDER ACCEPTED/SUBMITTED
    2020-02-21, 23:59:59.999989, ORDER ACCEPTED/SUBMITTED
    2020-02-21, 23:59:59.999989, ORDER ACCEPTED/SUBMITTED
    2020-02-21, 23:59:59.999989, ORDER ACCEPTED/SUBMITTED
    2020-02-21, 23:59:59.999989, ORDER ACCEPTED/SUBMITTED
    2020-02-21, 23:59:59.999989, ORDER ACCEPTED/SUBMITTED
    2020-02-21, 23:59:59.999989, Close, 2.63
    2020-02-21, 23:59:59.999989, Close, 2.64
    2020-02-21, 23:59:59.999989, Close, 2.59
    2020-02-21, 23:59:59.999989, Close, 2.63
    2020-02-21, 23:59:59.999989, Close, 2.62
    2020-02-21, 23:59:59.999989, Close, 2.66
    2020-02-20, 23:59:59.999989, Close, 2.68
    2020-02-20, 23:59:59.999989, Close, 2.69
    


  • Maybe there's no volume tradeable, you can check the origin data first


Log in to reply
 

});