Simple Profit

A reward scheme that rewards the agent for profitable trades and prioritizes trading over not trading.

Class Parameters

None

Functions

Below are the functions that the SimpleProfit uses to effectively operate.

Private

None

Public

  • reset - Reset variables
    • Necessary to reset the last purchase price and state of open positions
    • Variables it resets
      • _purchase_price
      • The price the bot purchased the asset
      • _is_holding_instrument - A boolean that shares with the get_reward function if we’re currently holding onto a trade.
  • get_reward
    • Returns the reward for the given action
    • The 5^(log_10(profit)) function simply slows the growth of the reward as trades get large.

Use Cases

The simple profit scheme needs to keep a history of profit over time. The way it does this is through looking at the portfolio as a means of keeping track of how the portfolio moves. It also keeps track to see if it’s holding onto a trade as well. This is seen inside of the get_reward function.

Use Case #1: Buying

When the bot says buy, it sets the variable _is_holding_instrument to True, and sets the current price to the price of the trade.

We see that inside of this line of code here. This allows us to check to see if we’ve made a profit later.

elif trade.is_buy and trade.size > 0:
    self._purchase_price = trade.price
    self._is_holding_instrument = True

Use Case #2: Selling

We then sell afterward using the original trade price as a reference. Which is suggested in the lines below:

if trade.is_sell and trade.size > 0:
    self._is_holding_instrument = False
    profit_per_instrument = trade.price - self._purchase_price
    profit = trade.size * profit_per_instrument
    profit_sign = np.sign(profit)

    return profit_sign * (1 + (5 ** np.log10(abs(profit))))