80 lines
1.9 KiB
Python
80 lines
1.9 KiB
Python
|
|
import freqtrade.vendor.qtpylib.indicators as qtpylib
|
|
import pandas as pd
|
|
|
|
"""
|
|
Indicators for Freqtrade
|
|
author@: Gerald Lonlas
|
|
github@: https://github.com/freqtrade/freqtrade-strategies
|
|
"""
|
|
|
|
def pivots_points(dataframe: pd.DataFrame, timeperiod=30, levels=3) -> pd.DataFrame:
|
|
"""
|
|
Pivots Points
|
|
|
|
Formula:
|
|
Pivot = (Previous High + Previous Low + Previous Close)/3
|
|
|
|
Resistance #1 = (2 x Pivot) - Previous Low
|
|
Support #1 = (2 x Pivot) - Previous High
|
|
|
|
Resistance #2 = (Pivot - Support #1) + Resistance #1
|
|
Support #2 = Pivot - (Resistance #1 - Support #1)
|
|
|
|
Resistance #3 = (Pivot - Support #2) + Resistance #2
|
|
Support #3 = Pivot - (Resistance #2 - Support #2)
|
|
...
|
|
|
|
:param dataframe:
|
|
:param timeperiod: Period to compare (in ticker)
|
|
:param levels: Num of support/resistance desired
|
|
:return: dataframe
|
|
"""
|
|
|
|
data = {}
|
|
|
|
low = qtpylib.rolling_mean(
|
|
series=pd.Series(
|
|
index=dataframe.index,
|
|
data=dataframe['low']
|
|
),
|
|
window=timeperiod
|
|
)
|
|
|
|
high = qtpylib.rolling_mean(
|
|
series=pd.Series(
|
|
index=dataframe.index,
|
|
data=dataframe['high']
|
|
),
|
|
window=timeperiod
|
|
)
|
|
|
|
# Pivot
|
|
data['pivot'] = qtpylib.rolling_mean(
|
|
series=qtpylib.typical_price(dataframe),
|
|
window=timeperiod
|
|
)
|
|
|
|
# Resistance #1
|
|
data['r1'] = (2 * data['pivot']) - low
|
|
|
|
# Resistance #2
|
|
data['s1'] = (2 * data['pivot']) - high
|
|
|
|
# Calculate Resistances and Supports >1
|
|
for i in range(2, levels+1):
|
|
prev_support = data['s' + str(i - 1)]
|
|
prev_resistance = data['r' + str(i - 1)]
|
|
|
|
# Resitance
|
|
data['r'+ str(i)] = (data['pivot'] - prev_support) + prev_resistance
|
|
|
|
# Support
|
|
data['s' + str(i)] = data['pivot'] - (prev_resistance - prev_support)
|
|
|
|
return pd.DataFrame(
|
|
index=dataframe.index,
|
|
data=data
|
|
)
|
|
|