from Utils import (
ewo,
+ non_zero_range,
vwapb,
top_change_percent,
get_distance,
INTERFACE_VERSION = 3
def version(self) -> str:
- return "3.1.14"
+ return "3.1.15"
timeframe = "5m"
dataframe["close"],
dataframe["volume"],
length=period,
- fillna=0.0,
)
dataframe["%-tcp-period"] = top_change_percent(dataframe, period=period)
# dataframe["%-bcp-period"] = bottom_change_percent(dataframe, period=period)
dataframe["%-bb_width"] = (
dataframe["bb_upperband"] - dataframe["bb_lowerband"]
) / dataframe["bb_middleband"]
- dataframe["%-ibs"] = (
- (dataframe["close"] - dataframe["low"])
- / (dataframe["high"] - dataframe["low"])
- ).fillna(0.0)
+ dataframe["%-ibs"] = (dataframe["close"] - dataframe["low"]) / (
+ non_zero_range(dataframe["high"], dataframe["low"])
+ )
# dataframe["jaw"], dataframe["teeth"], dataframe["lips"] = alligator(
- # dataframe, zero_lag=True
+ # dataframe, mamode="ema", zero_lag=True
# )
# dataframe["%-dist_to_jaw"] = get_distance(dataframe["close"], dataframe["jaw"])
# dataframe["%-dist_to_teeth"] = get_distance(
# )
# dataframe["%-spread_jaw_teeth"] = dataframe["jaw"] - dataframe["teeth"]
# dataframe["%-spread_teeth_lips"] = dataframe["teeth"] - dataframe["lips"]
+ # dataframe["%-alligator_trend_strength"] = (
+ # dataframe["lips"] - dataframe["teeth"]
+ # ) + (non_zero_range(dataframe["teeth"], dataframe["jaw"]))
dataframe["zlema_50"] = pta.zlma(dataframe["close"], length=50, mamode="ema")
dataframe["zlema_12"] = pta.zlma(dataframe["close"], length=12, mamode="ema")
dataframe["zlema_26"] = pta.zlma(dataframe["close"], length=26, mamode="ema")
import talib.abstract as ta
from scipy.signal import convolve
from scipy.signal.windows import gaussian
+from sys import float_info
from technical import qtpylib
return abs(p1 - p2)
+def non_zero_range(s1: pd.Series, s2: pd.Series) -> pd.Series:
+ """Returns the difference of two series and adds epsilon to any zero values."""
+ diff = s1 - s2
+ if diff.eq(0).any().any():
+ diff += float_info.epsilon
+ return diff
+
+
def get_gaussian_window(std: float, center: bool) -> int:
if std is None:
raise ValueError("Standard deviation cannot be None")
)
return (dataframe["close"] - previous_close_low) / (
- previous_close_high - previous_close_low
- ).fillna(0.0)
+ non_zero_range(previous_close_high, previous_close_low)
+ )
# VWAP bands