This module aims to help to find bullish/bearish divergences (regular or hidden) between two indicators using argrelextrema
from scipy.signal
.
Code based on higher-highs-lower-lows-and-calculating-price-trends-in-python article on medium.
This package is mean to use in conjunction with jesse ai but is generic enough to be used on its own.
poetry build
pip install dist/jesse_extra_indicators-0.1.0-py3-none-any.whl
import jesse_extra_indicators as xta
# Loopback window
w = 2
# this indicators has lower highs
ind1 = np.array([0, 10, 0, 9, 0]) # ex df.close
ind1_hl = xta.hl.HighLow(ind1, order=1)
# this indicators has higher highs
ind2 = np.array([0, 10, 0, 11, 0]) # ex ta.rsi(df.close)
ind2_hl = xta.hl.HighLow(ind2, order=1)
# build indicator divergence object
ind_div = xta.hl.IndicatorDivergence(ind1_hl, ind2_hl)
# Check regular or hidden bearish divergence
assert ind_div.regular_divergence(w, "bearish")
assert ind_div.hidden_divergence(w, "bearish")
# Check bearish confirmation
assert ind_div.confirmation(w, "bearish")
# Check regular or hidden bullish divergence
assert ind_div.regular_divergence(w, "bullish")
assert ind_div.hidden_divergence(w, "bullish")
# Check bearish confirmation
assert ind_div.confirmation(w, "bullish")
from jesse.strategies import Strategy, cached
import jesse.indicators as ta
import jesse_extra_indicators as xta
class Example(Strategy):
@property
@cached
def close_rsi_div(self):
# no need to have the full data, this will speed up processing
w = 100
close_hl = xta.hl.HighLow(self.candles[-w:, 2])
rsi_hl = xta.hl.HighLow(self.rsi)
# build indicator divergence object
return xta.hl.IndicatorDivergence(close_hl, close_hl)
def should_long(self) -> bool:
w = 2 # you may wan to tweak the loopback window
return (
self.close_rsi_div.regular_divergence(w, "bullish")
or self.close_rsi_div.hidden_divergence(w, "bullish")
)
def should_short(self) -> bool:
w = 2 # you may wan to tweak the loopback window
return (
self.close_rsi_div.regular_divergence(w, "bearish")
or self.close_rsi_div.hidden_divergence(w, "bearish")
)
def should_cancel(self) -> bool:
...
def go_long(self):
...
def go_short(self):
...
Find this usefull and want to buy me a coffee ?
send tips to
33w68oGuotfpJy59fPP5fUDk2fT3EzGkmS (btc)
D8zxqb2Fzm7Kqkn7QcKrcQjBPwbEBmMbRE (dogecoin)