林加通道也称为布林线(Bollinger Band)是由三条线组成,在中间的通常为 20 天平均线,而在上下的两条线则分别为 Up 线和 Down 线,算法是首先计出过去 20 日收巿价的布林线标准差SD(Standard Deviation) ,通常再乘 2 得出 2 倍标准差,Up 线为 20 天平均线加 2 倍标准差,Down 线则为 20 天平均线减 2 倍标准差
(上下两条蓝线:Bollinger Band)
接着我们定义几个简单的参数:
inimal_roi = {
"40": 0.0, #运行40分钟且收益率>0%,则退出
"30": 0.01, #运行30分钟且收益率>1%,则退出
"20": 0.02, #运行20分钟且收益率>2%,则退出
"0": 0.04 #刚启动运行且收益率>4%,则退出
}
trailing_stop = False # 不启用追踪止损(动态止损的概念)
stoploss = -0.1 #单次交易损失超过10%,则触发止损
timeframe = '5m' #交易数据5m曲线
order_types = {
'entry': 'limit', #进场采用限价单
'exit': 'limit', #退出采用限价单
'stoploss': 'market', #止损时采用事假单
'stoploss_on_exchange': False #不启用交易所止损(后面再细讲)
}
接着写我们核心的交易策略代码。我们的蜡烛数据已经准备好了,都是5min曲线数据。构建 Bollinger bands 指标:
bollinger = qtpylib.bollinger_bands(qtpylib.typical_price(dataframe), window=20, stds=2)
dataframe['bb_upperband'] = bollinger['upper'] #bolling up line
dataframe['bb_midband'] = bollinger['mid'] # bolling standard line
dataframe['bb_lowerband'] = bollinger['lower'] #bolling down line
买入策略:
dataframe.loc[
(
(dataframe['close'] > dataframe['bb_midband'])
#这里逻辑简单点 收盘价大于标准价
),
'buy'] = 1
卖出策略:
dataframe.loc[
(
(dataframe['close'] > dataframe['bb_upperband'])
# 收盘价高于bolling up line
),
'sell'] = 1
核心策略实现了,我们跑个回测看看效果:
docker-compose run--rm freqtrade download-data --pairs ETH/BTC --exchange binance --days 5 -t 1h
# 新增指标RSI
dataframe['rsi'] = ta.RSI(dataframe)
# 买入信号
dataframe.loc[
(
(qtpylib.crossed_above(dataframe['rsi'], 40)) &
(dataframe['close'] > dataframe['bb_midband'])
),
'buy'] = 1
#卖出信号
populate_exit_trend(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe.loc[
(
(qtpylib.crossed_above(dataframe['rsi'], 70)) &
(dataframe['close'] > dataframe['bb_midband'])
),
'sell'] = 1
接着回测看一下效果:
策略优化以后,明显可以看到策略亏损缩小至-34USDT。
阅读量:2023
点赞量:0
收藏量:0