Files
freqtrade-strategies/user_data/strategies/SwingHighToSky.py
T

111 lines
3.2 KiB
Python
Raw Normal View History

2021-08-03 20:54:24 +02:00
"""
author = "Kevin Ossenbrück"
copyright = "Free For Use"
credits = ["Bloom Trading, Mohsen Hassan"]
license = "MIT"
version = "1.0"
maintainer = "Kevin Ossenbrück"
email = "kevin.ossenbrueck@pm.de"
status = "Live"
"""
from freqtrade.strategy import IStrategy
from freqtrade.strategy import IntParameter
2021-02-22 12:21:35 +01:00
from functools import reduce
from pandas import DataFrame
import talib.abstract as ta
import freqtrade.vendor.qtpylib.indicators as qtpylib
2021-03-28 15:22:21 +02:00
import numpy
2021-02-22 12:21:35 +01:00
2021-08-03 20:54:24 +02:00
2021-02-22 12:21:35 +01:00
2021-03-28 15:22:21 +02:00
# CCI timerperiods and values
cciBuyTP = 72
cciBuyVal = -175
cciSellTP = 66
cciSellVal = -106
# RSI timeperiods and values
rsiBuyTP = 36
rsiBuyVal = 90
rsiSellTP = 45
rsiSellVal = 88
2021-08-03 20:54:24 +02:00
2021-02-22 12:21:35 +01:00
class SwingHighToSky(IStrategy):
2022-07-10 11:44:41 +02:00
INTERFACE_VERSION = 3
2021-02-22 12:21:35 +01:00
2021-04-05 12:04:54 +02:00
timeframe = '15m'
2021-08-03 20:54:24 +02:00
2021-03-28 15:22:21 +02:00
stoploss = -0.34338
2021-08-03 20:54:24 +02:00
2021-03-28 15:22:21 +02:00
minimal_roi = {"0": 0.27058, "33": 0.0853, "64": 0.04093, "244": 0}
2021-08-03 20:54:24 +02:00
buy_cci = IntParameter(low=-200, high=200, default=100, space='buy', optimize=True)
buy_cciTime = IntParameter(low=10, high=80, default=20, space='buy', optimize=True)
buy_rsi = IntParameter(low=10, high=90, default=30, space='buy', optimize=True)
buy_rsiTime = IntParameter(low=10, high=80, default=26, space='buy', optimize=True)
sell_cci = IntParameter(low=-200, high=200, default=100, space='sell', optimize=True)
sell_cciTime = IntParameter(low=10, high=80, default=20, space='sell', optimize=True)
sell_rsi = IntParameter(low=10, high=90, default=30, space='sell', optimize=True)
sell_rsiTime = IntParameter(low=10, high=80, default=26, space='sell', optimize=True)
# Buy hyperspace params:
buy_params = {
"buy_cci": -175,
"buy_cciTime": 72,
"buy_rsi": 90,
"buy_rsiTime": 36,
}
# Sell hyperspace params:
sell_params = {
"sell_cci": -106,
"sell_cciTime": 66,
"sell_rsi": 88,
"sell_rsiTime": 45,
}
2021-02-22 12:21:35 +01:00
def informative_pairs(self):
return []
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
2021-08-03 20:54:24 +02:00
for val in self.buy_cciTime.range:
dataframe[f'cci-{val}'] = ta.CCI(dataframe, timeperiod=val)
for val in self.sell_cciTime.range:
dataframe[f'cci-sell-{val}'] = ta.CCI(dataframe, timeperiod=val)
for val in self.buy_rsiTime.range:
dataframe[f'rsi-{val}'] = ta.RSI(dataframe, timeperiod=val)
for val in self.sell_rsiTime.range:
dataframe[f'rsi-sell-{val}'] = ta.RSI(dataframe, timeperiod=val)
2021-02-22 12:21:35 +01:00
return dataframe
2022-07-10 11:34:40 +02:00
def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
2021-08-03 20:54:24 +02:00
2021-02-22 12:21:35 +01:00
dataframe.loc[
(
2021-08-03 20:54:24 +02:00
(dataframe[f'cci-{self.buy_cciTime.value}'] < self.buy_cci.value) &
(dataframe[f'rsi-{self.buy_rsiTime.value}'] < self.buy_rsi.value)
2021-02-22 12:21:35 +01:00
),
2022-07-10 11:34:40 +02:00
'enter_long'] = 1
2021-08-03 20:54:24 +02:00
2021-02-22 12:21:35 +01:00
return dataframe
2022-07-10 11:34:40 +02:00
def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
2021-08-03 20:54:24 +02:00
2021-02-22 12:21:35 +01:00
dataframe.loc[
2021-08-03 20:54:24 +02:00
(
(dataframe[f'cci-sell-{self.sell_cciTime.value}'] > self.sell_cci.value) &
(dataframe[f'rsi-sell-{self.sell_rsiTime.value}'] > self.sell_rsi.value)
2021-02-22 12:21:35 +01:00
),
2022-07-10 11:34:40 +02:00
'exit_long'] = 1
2021-08-03 20:54:24 +02:00
return dataframe