Timeframe
5m
Direction
Long Only
Stoploss
-3.0%
Trailing Stop
No
ROI
0m: 700.0%
Interface Version
N/A
Startup Candles
N/A
Indicators
6
freqtrade/freqtrade-strategies
Strategy 003 author@: Gerald Lonlas github@: https://github.com/freqtrade/freqtrade-strategies
from freqtrade.strategy import IStrategy , merge_informative_pair
import pandas as pd
from pandas import DataFrame
import talib.abstract as ta
import freqtrade.vendor.qtpylib.indicators as qtpylib
import technical.indicators as ftt
def pivots_points(dataframe: pd.DataFrame , timeperiod=1 , levels=4) -> pd.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)
# R1 = PP + 0.382 * (HIGHprev - LOWprev) ... fibonacci
data["r1"] = data['pivot'] + 0.382 * (high - low)
data["rS1"] = data['pivot'] + 0.0955 * (high - low)
# Resistance #2
# S1 = PP - 0.382 * (HIGHprev - LOWprev) ... fibonacci
data["s1"] = data["pivot"] - 0.382 * (high - low)
data["sR1"] = data["pivot"] - 0.1955 * (high - low)
# 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)
class hdGen(IStrategy):
# Optimal timeframe for the strategy
timeframe = '5m'
# generate signals from the 1h timeframe
informative_timeframe = '1h'
process_only_new_candles = False
buy_params = {
'buy-rsi': 70
}
minimal_roi = {
"0": 7
}
# Stoploss:
stoploss = -0.03
plot_config = {
'main_plot': {
'close_pr1': {'color': 'brown'} ,
'high_pr1': {'color': 'green'} ,
'pivot': {'color': 'orange'} ,
'r1': {'color': 'red'} ,
'ema5': {'color': 'blue'} ,
'ema10': {'color': 'pink'} ,
'ema60': {'color': 'yellow'} ,
'ema200': {'color': 'grey'} ,
'rS1': {'color': 'blue'} ,
'sR1': {'color': 'green'} ,
's1': {'color': 'black'}
} ,
'subplots': {
"SRSI": {
'srsi_k': {'color': 'blue'} ,
'srsi_d': {'color': 'red'} ,
} ,
"ATR": {
'atr': {'color': 'blue'} ,
} ,
"RSI": {
'rsi': {'color': 'blue'} ,
} ,
}
}
def informative_pairs(self):
pairs = self.dp.current_whitelist()
informative_pairs = [(pair , self.informative_timeframe)
for pair in pairs]
if self.dp:
for pair in pairs:
informative_pairs += [(pair , "1d")]
return informative_pairs
def slow_tf_indicators(self , dataframe: DataFrame , metadata: dict) -> DataFrame:
dataframe1d = self.dp.get_pair_dataframe(
pair=metadata['pair'] , timeframe="1d")
# Pivots Points
pp = pivots_points(dataframe1d)
dataframe['pivot'] = pp['pivot']
dataframe['r1'] = pp['r1']
dataframe['s1'] = pp['s1']
dataframe['rS1'] = pp['rS1']
dataframe['sR1'] = pp['sR1']
# Definiamo H e C giorno prima
dataframe['close_pr1'] = dataframe1d['close']
dataframe['high_pr1'] = dataframe1d['high']
dataframe = merge_informative_pair(
dataframe , dataframe1d , self.timeframe , "1d" , ffill=True)
dataframe['ema5'] = ta.EMA(dataframe , timeperiod=5)
dataframe['ema10'] = ta.EMA(dataframe , timeperiod=10)
dataframe['ema60'] = ta.EMA(dataframe , timeperiod=60)
dataframe['ema220'] = ta.EMA(dataframe , timeperiod=220)
dataframe['atr'] = ta.ATR(dataframe , timeperiod=14)
dataframe['rsi'] = ta.RSI(dataframe , timeperiod=14)
# RSI
period = 14
smoothD = 3
SmoothK = 3
stochrsi = (dataframe['rsi'] - dataframe['rsi'].rolling(period).min()) / (
dataframe['rsi'].rolling(period).max() - dataframe['rsi'].rolling(period).min())
dataframe['srsi_k'] = stochrsi.rolling(SmoothK).mean() * 100
dataframe['srsi_d'] = dataframe['srsi_k'].rolling(smoothD).mean()
# Start Trading
dataframe['pivots_ok'] = (
(dataframe['ema5'] > dataframe['ema10'])
&
(dataframe['ema5'] > dataframe['high_pr1'])
&
(dataframe['volume'] > dataframe['volume'].shift(2))
&
(dataframe['ema60'] < dataframe['high_pr1'])
&
(qtpylib.crossed_above(dataframe['rsi'] , params['buy-rsi'])
).astype('int')
# # Stiamo Salendo
# (dataframe['close_pr1'] > dataframe['pivot']) &
# #(dataframe['close'] > dataframe['ema220']) &
# (dataframe['ema60'] > dataframe['ema220']) &
# #(dataframe['pivot'] > dataframe['ema60']) & #Per ora lasciamo ?!
# # (dataframe['ema60'] > dataframe['pivot']) &
# # Catch The Pump!
# #(dataframe['ema10'] > dataframe['ema60']) &
#
# # (dataframe['open'] > dataframe['close_pr1'])
# # |
# #(dataframe['close'] >= dataframe['pivot'])
# #&
# #(dataframe['ema5'] > dataframe['ema10']) &
# # qtpylib.crossed_above(dataframe['ema5'] , dataframe['close_pr1'])
# # |
# qtpylib.crossed_above(dataframe['ema10'], dataframe['rS1'])
# #(dataframe['ema10'] >= dataframe['rS1'])
dataframe['trending_over'] = (
(
(dataframe['ema10'] > dataframe['ema5'])
)
|
(
qtpylib.crossed_above(dataframe['ema60'] , dataframe['ema5'])
)
|
(
qtpylib.crossed_above(dataframe['ema60'] , dataframe['ema10']) # Need some test...
)
).astype('int')
return dataframe
def populate_indicators(self , dataframe: DataFrame , metadata: dict) -> DataFrame:
dataframe = self.slow_tf_indicators(dataframe , metadata)
return dataframe
def populate_buy_trend(self , dataframe: DataFrame , metadata: dict) -> DataFrame:
dataframe.loc[
(
(dataframe['pivots_ok'] > 0)
) , 'buy'] = 1
return dataframe
def populate_sell_trend(self , dataframe: DataFrame , metadata: dict) -> DataFrame:
dataframe.loc[
(
(dataframe['trending_over'] > 0)
) , 'sell'] = 1
return dataframe