Ejemplo n.º 1
0
    def update_order(self,
                     ticker,
                     size,
                     execute_price,
                     action_type,
                     last_avg_price,
                     long_or_short='long'):
        new_value = None

        if action_type == ActionType.Sell:
            new_value = (self.latest(ticker, long_or_short) +
                         (execute_price - last_avg_price) * size *
                         dollar_per_pips(ticker, execute_price))
        elif action_type == ActionType.Cover:
            new_value = (self.latest(ticker, long_or_short) -
                         (execute_price - last_avg_price) * size *
                         dollar_per_pips(ticker, execute_price))

        if new_value:
            self._append_value(ticker, new_value, long_or_short)
Ejemplo n.º 2
0
    def settle_left_trade(self):
        cur_price = self.env.feeds[self.ticker].cur_price
        buy_order_type = self._get_order_type(self.buy)
        slippage = self.env.recorder.slippage

        self.entry_date = self.buy.trading_date
        self.entry_price = self.buy.first_cur_price
        self.entry_type = f'{buy_order_type} {self.buy.action_type.value}'
        self.exit_date = None
        self.exit_price = None
        self.exit_type = None
        self.pl_points = (cur_price -
                          self.buy.first_cur_price) * self._earn_short()
        self.re_pnl = self.pl_points*self.size * \
            dollar_per_pips(self.ticker, cur_price)

        self.commission = (slippage[self.ticker] * self.size / 1e5 *
                           dollar_per_pips(self.ticker, self.entry_price))

        return self
Ejemplo n.º 3
0
    def _required_cash_func(cls, order: MarketOrder) -> float:
        ticker = order.ticker
        size = order.size
        execute_price = order.execute_price
        margin_rate = cls.env.recorder.margin_rate
        mult = market_value_multiplayer(order.ticker, execute_price)

        slippage = cls.env.recorder.slippage[ticker]
        commission = (slippage*size/1e5 *
                      dollar_per_pips(ticker, execute_price))

        return size*execute_price*margin_rate*mult+commission
Ejemplo n.º 4
0
    def update_order(self,
                     ticker,
                     cur_price,
                     new_avg_price,
                     new_position,
                     long_or_short='long'):

        if new_position == 0:
            new_value = 0
        else:
            earn_short = 1 if long_or_short == 'long' else -1
            new_value = ((cur_price - new_avg_price) * new_position *
                         earn_short * dollar_per_pips(ticker, cur_price))
        self._append_value(ticker, new_value, long_or_short)
Ejemplo n.º 5
0
    def update_order(self,
                     ticker,
                     size,
                     execute_price,
                     action_type,
                     last_commission,
                     long_or_short='long'):
        slippage = self.env.recorder.slippage[ticker]

        if action_type in [ActionType.Buy, ActionType.Short]:

            new_value = (
                last_commission +
                slippage * size / 1e5 * dollar_per_pips(ticker, execute_price))
            self._append_value(ticker, new_value, long_or_short)
Ejemplo n.º 6
0
    def generate(self):
        sell_order_type = self._get_order_type(self.sell)
        buy_order_type = self._get_order_type(self.buy)
        slippage = self.env.recorder.slippage

        self.entry_date = self.buy.trading_date
        self.entry_price = self.buy.first_cur_price
        self.entry_type = f'{buy_order_type} {self.buy.action_type.value}'
        self.exit_price = self.sell.first_cur_price
        self.exit_type = f'{sell_order_type} {self.sell.action_type.value}'
        self.pl_points = (self.sell.first_cur_price -
                          self.buy.first_cur_price) * self._earn_short()
        self.re_pnl = self.pl_points*self.size * \
            dollar_per_pips(self.ticker, self.exit_price)

        self.commission = (slippage[self.ticker] * self.size / 1e5 *
                           dollar_per_pips(self.ticker, self.entry_price))

        if self.env.execute_on_close_or_next_open == 'open':
            self.exit_date = self.sell.signal.next_datetime
        elif self.env.execute_on_close_or_next_open == 'close':
            self.exit_date = self.sell.trading_date

        return self