text: Title: Bug: Stop loss results is very largely different between from_signals(sl_stop=0.1) and generate_ohlc_stop_exits(sl_stop=0.1) 
  Body: I'm trying to compare the stop loss mechanisms implemented with different ways such as model 1: `from_signals(sl_stop=0.1, sl_trail=False)`, model 2: `generate_ohlc_stop_exits(sl_stop=0.1, sl_trail=False) ` and model 3:  `vbt.OHLCSTX.run(sl_stop=[0.1])`. 
  
  I found that model 2 and model 3 gave the exact same results (i.e., total return=459.05%) , but for model 1, the results are very different (i.e., total return = 47.47%) as displayed below:
  
  Model 1: `from_signals(sl_stop=0.1, sl_trail=False)`
  ![image](https://github.com/polakowo/vectorbt/assets/64836390/839148cc-9744-422b-8b80-8753a8f92500)
  
  Model 2:  `generate_ohlc_stop_exits(sl_stop=0.1, sl_trail=False)`
  ![image](https://github.com/polakowo/vectorbt/assets/64836390/2cd0ff4a-f49f-466e-8487-84b09c670166)
  
  Model 3:  `vbt.OHLCSTX.run(sl_stop=[0.1])`
  ![image](https://github.com/polakowo/vectorbt/assets/64836390/46008428-f564-46ed-81d8-f7819e254465)
  
  Is it a bug? Or is it my implementation error? 
  And btw, here is where I got the reference from: https://github.com/polakowo/vectorbt/issues/181
  
  Below are the codes for these 3 models:
  --------------------------------------------------
  
  Model 1: Using `from_signals(sl_stop=0.1, sl_trail=False)`
  ```
  # Reference: stop exits with RANDENEX indicator: https://github.com/polakowo/vectorbt/issues/181
  import vectorbt as vbt
  
  ohlcv = vbt.YFData.download(
      "BTC-USD",
      start='2017-01-01 UTC',
      end='2020-01-01 UTC'
  ).concat()
  # Random enter signal generator based on the number of signals.
  rand = vbt.RAND.run(ohlcv["Close"].shape, n=10, seed=42)
  # Random exit signal generator based on the number of signals.
  randx = vbt.RANDX.run(rand.entries, seed=42)
  pf1 = vbt.Portfolio.from_signals(ohlcv["Close"], 
                                  rand.entries, 
                                  randx.exits,
                                  open=ohlcv["Open"],
                                  high=ohlcv["High"],
                                  low=ohlcv["Low"],
                                  sl_stop=0.1,
                                  sl_trail=False,
                                  )
  pf1.stats()
  ```
  
  
  
  
  Model 2: Using `generate_ohlc_stop_exits(sl_stop=0.1, sl_trail=False) `
  ```
  import vectorbt as vbt
  
  ohlcv = vbt.YFData.download(
      "BTC-USD",
      start='2017-01-01 UTC',
      end='2020-01-01 UTC'
  ).concat()
  
  # Random enter signal generator based on the number of signals.
  rand = vbt.RAND.run(ohlcv["Close"].shape, n=10, seed=42)
  # Random exit signal generator based on the number of signals.
  randx = vbt.RANDX.run(rand.entries, seed=42)
  
  stop_exits = rand.entries.vbt.signals.generate_ohlc_stop_exits(
      open=ohlcv["Open"], 
      high=ohlcv['High'],
      low=ohlcv['Low'], 
      close=ohlcv['Close'], 
      sl_stop=0.1,
      sl_trail=False,
  )
  exits = randx.exits.vbt | stop_exits # optional: combine exit signals such that the first exit of two conditions wins
  entries, exits = rand.entries.vbt.signals.clean(exits) # optional: automatically remove ignored exit signals
  
  pf2 = vbt.Portfolio.from_signals(ohlcv['Close'], entries, exits,
                                   open=ohlcv["Open"],high=ohlcv["High"],
                                   low=ohlcv["Low"])
  pf2.stats()
  ```
  
  Model 3: Using `vbt.OHLCSTX.run(sl_stop=[0.1])`
  ```
  import numpy
  import vectorbt as vbt
  
  ohlcv = vbt.YFData.download(
      "BTC-USD",
      start='2017-01-01 UTC',
      end='2020-01-01 UTC'
  ).concat()
  
  # Random enter signal generator based on the number of signals.
  rand = vbt.RAND.run(ohlcv["Close"].shape, n=10, seed=42)
  # Random exit signal generator based on the number of signals.
  randx = vbt.RANDX.run(rand.entries, seed=42)
  
  stops = [0.1,]
  sl_exits = vbt.OHLCSTX.run(
      rand.entries, 
      ohlcv['Open'], 
      ohlcv['High'], 
      ohlcv['Low'], 
      ohlcv['Close'], 
      sl_stop=list(stops),
      stop_type=None, 
      stop_price=None
  ).exits
  exits = randx.exits.vbt | sl_exits
  
  pf3 = vbt.Portfolio.from_signals(ohlcv['Close'], rand.entries, exits)  # with SL
  pf3.stats()
  ```
  
  