From 57a17697a0e15d80ea1ccbd1dccaaea77034a3b6 Mon Sep 17 00:00:00 2001 From: Janne Sinivirta Date: Sat, 28 Oct 2017 16:14:01 +0300 Subject: [PATCH 1/8] add RSI, MOM, EMA5 and EMA10 to analyze --- freqtrade/analyze.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/freqtrade/analyze.py b/freqtrade/analyze.py index 1eeb8408d..20fa67ca3 100644 --- a/freqtrade/analyze.py +++ b/freqtrade/analyze.py @@ -43,6 +43,10 @@ def populate_indicators(dataframe: DataFrame) -> DataFrame: dataframe['tema'] = ta.TEMA(dataframe, timeperiod=9) dataframe['mfi'] = ta.MFI(dataframe) dataframe['cci'] = ta.CCI(dataframe) + dataframe['rsi'] = ta.RSI(dataframe) + dataframe['mom'] = ta.MOM(dataframe) + dataframe['ema5'] = ta.EMA(dataframe, timeperiod=5) + dataframe['ema10'] = ta.EMA(dataframe, timeperiod=10) dataframe['ao'] = awesome_oscillator(dataframe) return dataframe From ec981b415a374ba3b0c2c37b5c7351882b508685 Mon Sep 17 00:00:00 2001 From: Janne Sinivirta Date: Sat, 28 Oct 2017 16:21:07 +0300 Subject: [PATCH 2/8] add RSI to hyperopt --- freqtrade/tests/test_hyperopt.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/freqtrade/tests/test_hyperopt.py b/freqtrade/tests/test_hyperopt.py index fa1c0fab1..ae085fe90 100644 --- a/freqtrade/tests/test_hyperopt.py +++ b/freqtrade/tests/test_hyperopt.py @@ -52,6 +52,8 @@ def buy_strategy_generator(params): conditions.append(dataframe['adx'] > params['adx']['value']) if params['cci']['enabled']: conditions.append(dataframe['cci'] < params['cci']['value']) + if params['rsi']['enabled']: + conditions.append(dataframe['rsi'] < params['rsi']['value']) if params['over_sar']['enabled']: conditions.append(dataframe['close'] > dataframe['sar']) if params['uptrend_sma']['enabled']: @@ -114,6 +116,10 @@ def test_hyperopt(conf, pairs, mocker): {'enabled': False}, {'enabled': True, 'value': hp.uniform('cci-value', -200, -100)} ]), + 'rsi': hp.choice('rsi', [ + {'enabled': False}, + {'enabled': True, 'value': hp.uniform('rsi-value', 20, 30)} + ]), 'below_sma': hp.choice('below_sma', [ {'enabled': False}, {'enabled': True} From e1bbe1d9a9547f3844f4be4e69e6314b099378c9 Mon Sep 17 00:00:00 2001 From: Janne Sinivirta Date: Sat, 28 Oct 2017 16:26:32 +0300 Subject: [PATCH 3/8] adjust indicator ranges in hyperopt --- freqtrade/tests/test_hyperopt.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/freqtrade/tests/test_hyperopt.py b/freqtrade/tests/test_hyperopt.py index ae085fe90..99063c602 100644 --- a/freqtrade/tests/test_hyperopt.py +++ b/freqtrade/tests/test_hyperopt.py @@ -102,19 +102,19 @@ def test_hyperopt(conf, pairs, mocker): space = { 'mfi': hp.choice('mfi', [ {'enabled': False}, - {'enabled': True, 'value': hp.uniform('mfi-value', 2, 40)} + {'enabled': True, 'value': hp.uniform('mfi-value', 5, 15)} ]), 'fastd': hp.choice('fastd', [ {'enabled': False}, - {'enabled': True, 'value': hp.uniform('fastd-value', 2, 40)} + {'enabled': True, 'value': hp.uniform('fastd-value', 5, 40)} ]), 'adx': hp.choice('adx', [ {'enabled': False}, - {'enabled': True, 'value': hp.uniform('adx-value', 2, 40)} + {'enabled': True, 'value': hp.uniform('adx-value', 10, 30)} ]), 'cci': hp.choice('cci', [ {'enabled': False}, - {'enabled': True, 'value': hp.uniform('cci-value', -200, -100)} + {'enabled': True, 'value': hp.uniform('cci-value', -150, -100)} ]), 'rsi': hp.choice('rsi', [ {'enabled': False}, From 22cfef7d36dfebc9290b23caa4443da1e8194820 Mon Sep 17 00:00:00 2001 From: Janne Sinivirta Date: Sat, 28 Oct 2017 16:40:21 +0300 Subject: [PATCH 4/8] add ema5 cross ema10 trigger to hyperopt --- freqtrade/tests/test_hyperopt.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/freqtrade/tests/test_hyperopt.py b/freqtrade/tests/test_hyperopt.py index 99063c602..8a34eb94e 100644 --- a/freqtrade/tests/test_hyperopt.py +++ b/freqtrade/tests/test_hyperopt.py @@ -66,6 +66,7 @@ def buy_strategy_generator(params): 'lower_bb': dataframe['tema'] <= dataframe['blower'], 'faststoch10': (dataframe['fastd'] >= 10) & (prev_fastd < 10), 'ao_cross_zero': (crossed_above(dataframe['ao'], 0.0)), + 'ema5_cross_ema10': (crossed_above(dataframe['ema5'], dataframe['ema10'])), } conditions.append(triggers.get(params['trigger']['type'])) @@ -139,7 +140,8 @@ def test_hyperopt(conf, pairs, mocker): 'trigger': hp.choice('trigger', [ {'type': 'lower_bb'}, {'type': 'faststoch10'}, - {'type': 'ao_cross_zero'} + {'type': 'ao_cross_zero'}, + {'type': 'ema5_cross_ema10'}, ]), } trials = Trials() From 893738d6f0695b6fa6d6e4bf0434cc91e118bb5b Mon Sep 17 00:00:00 2001 From: Janne Sinivirta Date: Sat, 28 Oct 2017 16:43:34 +0300 Subject: [PATCH 5/8] add MACD to analyze --- freqtrade/analyze.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/freqtrade/analyze.py b/freqtrade/analyze.py index 20fa67ca3..4dba24851 100644 --- a/freqtrade/analyze.py +++ b/freqtrade/analyze.py @@ -48,7 +48,10 @@ def populate_indicators(dataframe: DataFrame) -> DataFrame: dataframe['ema5'] = ta.EMA(dataframe, timeperiod=5) dataframe['ema10'] = ta.EMA(dataframe, timeperiod=10) dataframe['ao'] = awesome_oscillator(dataframe) - + macd = ta.MACD(dataframe) + dataframe['macd'] = macd['macd'] + dataframe['macdsignal'] = macd['macdsignal'] + dataframe['macdhist'] = macd['macdhist'] return dataframe From 473d09b5cd88ff5ec44ae117ea4b8137b59af405 Mon Sep 17 00:00:00 2001 From: Janne Sinivirta Date: Sat, 28 Oct 2017 16:52:26 +0300 Subject: [PATCH 6/8] add ema50 and ema100. add long uptrend ema guard to hyperopt --- freqtrade/analyze.py | 2 ++ freqtrade/tests/test_hyperopt.py | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/freqtrade/analyze.py b/freqtrade/analyze.py index 4dba24851..031641a4b 100644 --- a/freqtrade/analyze.py +++ b/freqtrade/analyze.py @@ -47,6 +47,8 @@ def populate_indicators(dataframe: DataFrame) -> DataFrame: dataframe['mom'] = ta.MOM(dataframe) dataframe['ema5'] = ta.EMA(dataframe, timeperiod=5) dataframe['ema10'] = ta.EMA(dataframe, timeperiod=10) + dataframe['ema50'] = ta.EMA(dataframe, timeperiod=50) + dataframe['ema100'] = ta.EMA(dataframe, timeperiod=100) dataframe['ao'] = awesome_oscillator(dataframe) macd = ta.MACD(dataframe) dataframe['macd'] = macd['macd'] diff --git a/freqtrade/tests/test_hyperopt.py b/freqtrade/tests/test_hyperopt.py index 8a34eb94e..003621f64 100644 --- a/freqtrade/tests/test_hyperopt.py +++ b/freqtrade/tests/test_hyperopt.py @@ -44,6 +44,8 @@ def buy_strategy_generator(params): conditions.append(dataframe['close'] < dataframe['sma']) if params['over_sma']['enabled']: conditions.append(dataframe['close'] > dataframe['sma']) + if params['uptrend_long_ema']['enabled']: + conditions.append(dataframe['ema50'] > dataframe['ema100']) if params['mfi']['enabled']: conditions.append(dataframe['mfi'] < params['mfi']['value']) if params['fastd']['enabled']: @@ -129,6 +131,10 @@ def test_hyperopt(conf, pairs, mocker): {'enabled': False}, {'enabled': True} ]), + 'uptrend_long_ema': hp.choice('uptrend_long_ema', [ + {'enabled': False}, + {'enabled': True} + ]), 'over_sar': hp.choice('over_sar', [ {'enabled': False}, {'enabled': True} From a632121368178ac8cb9fa64f0de3a7b7292e184f Mon Sep 17 00:00:00 2001 From: Janne Sinivirta Date: Sat, 28 Oct 2017 16:52:49 +0300 Subject: [PATCH 7/8] add macd cross signal trigger to hyperopt --- freqtrade/tests/test_hyperopt.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/freqtrade/tests/test_hyperopt.py b/freqtrade/tests/test_hyperopt.py index 003621f64..75fa4eddc 100644 --- a/freqtrade/tests/test_hyperopt.py +++ b/freqtrade/tests/test_hyperopt.py @@ -69,6 +69,7 @@ def buy_strategy_generator(params): 'faststoch10': (dataframe['fastd'] >= 10) & (prev_fastd < 10), 'ao_cross_zero': (crossed_above(dataframe['ao'], 0.0)), 'ema5_cross_ema10': (crossed_above(dataframe['ema5'], dataframe['ema10'])), + 'macd_cross_signal': (crossed_above(dataframe['macd'], dataframe['macdsignal'])), } conditions.append(triggers.get(params['trigger']['type'])) @@ -148,6 +149,7 @@ def test_hyperopt(conf, pairs, mocker): {'type': 'faststoch10'}, {'type': 'ao_cross_zero'}, {'type': 'ema5_cross_ema10'}, + {'type': 'macd_cross_signal'}, ]), } trials = Trials() From d066817d0bbb8483803b498feff34eaaaf246dce Mon Sep 17 00:00:00 2001 From: Janne Sinivirta Date: Sat, 28 Oct 2017 18:25:40 +0300 Subject: [PATCH 8/8] removed below_sma and over_sma to wait for better implementation --- freqtrade/tests/test_hyperopt.py | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/freqtrade/tests/test_hyperopt.py b/freqtrade/tests/test_hyperopt.py index 75fa4eddc..8cbe0ad26 100644 --- a/freqtrade/tests/test_hyperopt.py +++ b/freqtrade/tests/test_hyperopt.py @@ -40,10 +40,6 @@ def buy_strategy_generator(params): def populate_buy_trend(dataframe: DataFrame) -> DataFrame: conditions = [] # GUARDS AND TRENDS - if params['below_sma']['enabled']: - conditions.append(dataframe['close'] < dataframe['sma']) - if params['over_sma']['enabled']: - conditions.append(dataframe['close'] > dataframe['sma']) if params['uptrend_long_ema']['enabled']: conditions.append(dataframe['ema50'] > dataframe['ema100']) if params['mfi']['enabled']: @@ -124,14 +120,6 @@ def test_hyperopt(conf, pairs, mocker): {'enabled': False}, {'enabled': True, 'value': hp.uniform('rsi-value', 20, 30)} ]), - 'below_sma': hp.choice('below_sma', [ - {'enabled': False}, - {'enabled': True} - ]), - 'over_sma': hp.choice('over_sma', [ - {'enabled': False}, - {'enabled': True} - ]), 'uptrend_long_ema': hp.choice('uptrend_long_ema', [ {'enabled': False}, {'enabled': True}