Timeframe
5m
Direction
Long Only
Stoploss
-15.0%
Trailing Stop
Yes
ROI
0m: 10.3%, 3m: 5.0%, 5m: 3.4%, 61m: 2.8%
Interface Version
N/A
Startup Candles
200
Indicators
1
freqtrade/freqtrade-strategies
Strategy 003 author@: Gerald Lonlas github@: https://github.com/freqtrade/freqtrade-strategies
from pandas import DataFrame
import talib.abstract as ta
from functools import reduce
import numpy as np
from freqtrade.strategy import (IStrategy)
# DIV v1.0 - 2021-09-07
# by Sanka
class DIV_v1(IStrategy):
minimal_roi = {
"0": 0.10347601757573865,
"3": 0.050495605759981035,
"5": 0.03350898081823659,
"61": 0.0275218557571848,
"292": 0.005185372158403069,
"399": 0,
}
stoploss = -0.15
timeframe = '5m'
startup_candle_count = 200
process_only_new_candles = True
trailing_stop = True
trailing_stop_positive = 0.001
trailing_stop_positive_offset = 0.02
trailing_only_offset_is_reached = True
plot_config = {
"main_plot": {
"ohlc_bottom" : {
"type": "scatter",
'plotly': {
"mode": "markers",
"name": "a",
"text": "aa",
"marker": {
"symbol": "cross-dot",
"size": 3,
"color": "black"
}
}
},
},
"subplots": {
"rsi": {
"rsi": {"color": "blue"},
"rsi_bottom" : {
"type": "scatter",
'plotly': {
"mode": "markers",
"name": "b",
"text": "bb",
"marker": {
"symbol": "cross-dot",
"size": 3,
"color": "black"
}
}
},
}
}
}
#############################################################
def get_ticker_indicator(self):
return int(self.timeframe[:-1])
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
# RSI
dataframe['rsi'] = ta.RSI(dataframe, timeperiod=14)
# Divergence
dataframe = divergence(dataframe, "rsi")
return dataframe
def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe.loc[
(
(dataframe["bullish_divergence"] == True) &
(dataframe['rsi'] < 30) &
(dataframe["volume"] > 0)
), 'buy'
] = 1
return dataframe
def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
return dataframe
def divergence(dataframe: DataFrame, source='rsi'):
# Detect divergence between close price and source
# Detect HL or LL
dataframe['ohlc_bottom'] = np.NaN
dataframe['rsi_bottom'] = np.NaN
dataframe.loc[(dataframe['close'].shift() <= dataframe['close'].shift(2)) & (dataframe['close'] >= dataframe['close'].shift()), 'ohlc_bottom'] = dataframe['close'].shift()
dataframe.loc[(dataframe[source].shift() <= dataframe[source].shift(2)) & (dataframe[source] >= dataframe[source].shift()), 'rsi_bottom'] = dataframe[source].shift()
dataframe["ohlc_bottom"].fillna(method='ffill', inplace=True)
dataframe["rsi_bottom"].fillna(method='ffill', inplace=True)
# Detect divergence
dataframe['bullish_divergence'] = np.NaN
dataframe['hidden_bullish_divergence'] = np.NaN
for i in range(2, 15):
# Check there is nothing between the 2 diverging points
conditional_array = []
for ii in range(1, i):
conditional_array.append(dataframe["ohlc_bottom"].shift(i).le(dataframe['ohlc_bottom'].shift(ii)))
res = reduce(lambda x, y: x & y, conditional_array)
dataframe.loc[(
(dataframe["ohlc_bottom"].lt(dataframe['ohlc_bottom'].shift(i))) &
(dataframe["rsi_bottom"].gt(dataframe['rsi_bottom'].shift(i))) &
(dataframe["ohlc_bottom"].le(dataframe['ohlc_bottom'].shift())) &
(res)
), "bullish_divergence"] = True
return dataframe