Timeframe
5m
Direction
Long & Short
Stoploss
-1.5%
Trailing Stop
Yes
ROI
0m: 0.5%, 30m: 0.3%, 60m: 0.0%
Interface Version
3
Startup Candles
12
Indicators
4
freqtrade/freqtrade-strategies
Strategy 003 author@: Gerald Lonlas github@: https://github.com/freqtrade/freqtrade-strategies
import numpy as np
import talib.abstract as ta
from freqtrade.strategy import IStrategy
from pandas import DataFrame
class SimpleMomentumStrategy(IStrategy):
INTERFACE_VERSION = 3
timeframe = "5m"
can_short = True
# ROI: 盈利0.5%就出
minimal_roi = {"0": 0.005, "30": 0.003, "60": 0}
stoploss = -0.015
trailing_stop = True
trailing_stop_positive = 0.004
trailing_stop_positive_offset = 0.008
trailing_only_offset_is_reached = True
startup_candle_count = 12
max_open_trades = 1
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
# 均线
dataframe["ema9"] = ta.EMA(dataframe, timeperiod=9)
dataframe["ema21"] = ta.EMA(dataframe, timeperiod=21)
dataframe["sma50"] = ta.SMA(dataframe, timeperiod=21)
# 动量
dataframe["rsi"] = ta.RSI(dataframe, timeperiod=7)
dataframe["macd"], dataframe["macd_signal"], _ = ta.MACD(dataframe,
fastperiod=12, slowperiod=26, signalperiod=9)
# 成交量确认
dataframe["volume_sma"] = ta.SMA(dataframe["volume"], timeperiod=10)
return dataframe
def populate_entry_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
# 做多: EMA9 > EMA21 + RSI > 50 + MACD金叉 + 放量
dataframe.loc[
(
(dataframe["ema9"] > dataframe["ema21"]) &
(dataframe["rsi"] > 50) &
(dataframe["macd"] > dataframe["macd_signal"]) &
(dataframe["volume"] > dataframe["volume_sma"]) &
(dataframe["close"] > dataframe["sma50"])
),
["enter_long", "enter_tag"]
] = (1, "ema_momentum_long")
# 做空: EMA9 < EMA21 + RSI < 50 + MACD死叉 + 放量
dataframe.loc[
(
(dataframe["ema9"] < dataframe["ema21"]) &
(dataframe["rsi"] < 50) &
(dataframe["macd"] < dataframe["macd_signal"]) &
(dataframe["volume"] > dataframe["volume_sma"]) &
(dataframe["close"] < dataframe["sma50"])
),
["enter_short", "enter_tag"]
] = (1, "ema_momentum_short")
return dataframe
def populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
# 平多: 趋势反转
dataframe.loc[
((dataframe["ema9"] < dataframe["ema21"]) | (dataframe["rsi"] < 40)),
"exit_long"
] = 1
# 平空: 趋势反转
dataframe.loc[
((dataframe["ema9"] > dataframe["ema21"]) | (dataframe["rsi"] > 60)),
"exit_short"
] = 1
return dataframe