Timeframe
1h
Direction
Long Only
Stoploss
-99.0%
Trailing Stop
No
ROI
0m: 10000.0%
Interface Version
N/A
Startup Candles
150
Indicators
4
# pragma pylint: disable=missing-docstring, invalid-name, pointless-string-statement
# --- Do not remove these libs ---
import numpy as np # noqa
import pandas as pd # noqa
from pandas import DataFrame
from freqtrade.strategy.interface import IStrategy
# --------------------------------
# Add your lib to import here
import talib.abstract as ta
import freqtrade.vendor.qtpylib.indicators as qtpylib
from technical.util import resample_to_interval, resampled_merge
from freqtrade.strategy import IStrategy, merge_informative_pair
from technical.indicators import ichimoku
def zema(dataframe: dataframe, period, field='ha_close'):
"""
Source: https://github.com/freqtrade/technical/blob/master/technical/indicators/overlap_studies.py#L79
Modified slightly to use ta.EMA instead of technical ema
"""
dataframe['ema1'] = ta.EMA(dataframe[field], timeperiod=period)
dataframe['ema2'] = ta.EMA(dataframe['ema1'], timeperiod=period)
dataframe['d'] = df['ema1'] - dataframe['ema2']
dataframe['zema'] = dataframe['ema1'] + dataframe['d']
return dataframe['zema']
class Ichimoku_v31(IStrategy):
# ROI table:
minimal_roi = {
"0": 100
}
# Stoploss:
stoploss = -0.99
# Optimal timeframe for the strategy.
timeframe = '1h'
inf_tf = '4h'
# Run "populate_indicators()" only for new candle.
process_only_new_candles = True
# These values can be overridden in the "ask_strategy" section in the config.
use_sell_signal = True
sell_profit_only = False
ignore_roi_if_buy_signal = True
# Number of candles the strategy requires before producing valid signals
startup_candle_count = 150
# Optional order type mapping.
order_types = {
'buy': 'market',
'sell': 'market',
'stoploss': 'market',
'stoploss_on_exchange': False
}
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
if not self.dp:
# Don't do anything if DataProvider is not available.
return dataframe
dataframe= self.dp.get_pair_dataframe(pair=metadata['pair'], timeframe=self.timeframe)
#Heiken Ashi Candlestick Data
heikinashi = qtpylib.heikinashi(dataframe)
dataframe['ha_open'] = heikinashi['open']
dataframe['ha_close'] = heikinashi['close']
dataframe['ha_high'] = heikinashi['high']
dataframe['ha_low'] = heikinashi['low']
dataframe['open'] = heikinashi['open']
dataframe['close'] = heikinashi['close']
dataframe['high'] = heikinashi['high']
dataframe['low'] = heikinashi['low']
ha_ichi = ichimoku(heikinashi,
conversion_line_period=20,
base_line_periods=60,
laggin_span=120,
displacement=30
)
#Required Ichi Parameters
dataframe['senkou_a'] = ha_ichi['senkou_span_a']
dataframe['senkou_b'] = ha_ichi['senkou_span_b']
dataframe['cloud_green'] = ha_ichi['cloud_green']
dataframe['cloud_red'] = ha_ichi['cloud_red']
"""
Senkou Span A > Senkou Span B = Cloud Green
Senkou Span B > Senkou Span A = Cloud Red
"""
dataframe['fastMA'] = ta.SMA(dataframe, timeperiod=13)
dataframe['slowMA'] = ta.SMA(dataframe, timeperiod=26)
dataframe['signalMA'] = ta.SMA(dataframe, timeperiod=9)
dataframe['zema'] = zema(dataframe, 20)
return dataframe
def populate_buy_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe.loc[
(
(dataframe['zema'] < dataframe['zema'].shift()) #up
& dataframe['open'] < dataframe['close'] #srcOPen<....
& dataframe['slowMA'] > dataframe['fastMA'] #not fast< slow
),
'buy'] = 1
return dataframe
def populate_sell_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe.loc[
(
(dataframe['ha_close'] < dataframe['senkou_a']) |
(dataframe['ha_close'] < dataframe['senkou_b'])
),
'sell'] = 1
return dataframe