
Cette stratégie combine les bandes de Brin et le MACD pour déterminer les opportunités de survente du marché et le MACD pour déterminer le renversement de la tendance, pour réaliser une stratégie de trading quantitatif à bas prix et à haut prix. Le nom de la stratégie est défini comme la stratégie de renversement de Brin MACD.
La stratégie commence par calculer les bandes de Brin du 20e jour, comprenant le milieu, le haut et le bas. Lorsque le prix touche le bas, le marché est considéré comme étant en survente.
Plus précisément, le Brin génère un signal d’achat lorsque le contact de la voie descendante et le MACD de la différence sont déclenchés simultanément vers la ligne de signal de rupture; un signal d’arrêt est généré lorsque la hausse du prix de clôture dépasse le point d’arrêt.
La stratégie intègre les courbes de Brin pour juger les zones de survente et les signaux de renversement de tendance pour juger le MACD, ce qui permet de réaliser un prix d’achat plus bas. En même temps, la stratégie intègre le mode de stop-loss, qui permet de bloquer les gains et d’éviter les pertes.
Les avantages sont les suivants:
Cette stratégie comporte également des risques, principalement liés aux aspects suivants:
Les mesures suivantes peuvent être prises pour contrer ces risques:
Il y a de la place pour d’autres améliorations à la stratégie, notamment:
Cette stratégie intègre le jugement des zones de survente de la ceinture de Brin et l’indicateur de renversement de tendance MACD, permettant une sélection de point d’achat relativement avantageuse. En même temps, la stratégie de contrôle des risques de la méthode de stop-loss est configurée.
/*backtest
start: 2023-11-19 00:00:00
end: 2023-12-19 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © DojiEmoji
//@version=4
strategy("[KL] BOLL + MACD Strategy v2 (published)",overlay=true)
// BOLL bands {
BOLL_length = 20
BOLL_src = close
BOLL_mult = 2.0
BOLL_basis = sma(BOLL_src, BOLL_length)
BOLL_dev = BOLL_mult * stdev(BOLL_src, BOLL_length)
BOLL_upper = BOLL_basis + BOLL_dev
BOLL_lower = BOLL_basis - BOLL_dev
BOLL_offset = 0
plot(BOLL_basis, "Basis", color=#872323, offset = BOLL_offset)
BOLL_p1 = plot(BOLL_upper, "Upper", color=color.navy, offset = BOLL_offset, transp=50)
BOLL_p2 = plot(BOLL_lower, "Lower", color=color.navy, offset = BOLL_offset, transp=50)
fill(BOLL_p1, BOLL_p2, title = "Background", color=#198787, transp=85)
// }
// MACD signals {
MACD_fastLen = 12
MACD_slowLen = 26
MACD_Len = 9
MACD = ema(close, MACD_fastLen) - ema(close, MACD_slowLen)
aMACD = ema(MACD, MACD_Len)
MACD_delta = MACD - aMACD
// }
backtest_timeframe_start = input(defval = timestamp("01 Nov 2010 13:30 +0000"), title = "Backtest Start Time", type = input.time)
//backtest_timeframe_end = input(defval = timestamp("05 Mar 2021 19:30 +0000"), title = "Backtest End Time", type = input.time)
TARGET_PROFIT_MODE = input(false,title="Exit when Risk:Reward met")
REWARD_RATIO = input(3,title="Risk:[Reward] (i.e. 3) for exit")
// Trailing stop loss {
var entry_price = float(0)
ATR_multi_len = 26
ATR_multi = input(2, "ATR multiplier for stop loss")
ATR_buffer = atr(ATR_multi_len) * ATR_multi
risk_reward_buffer = (atr(ATR_multi_len) * ATR_multi) * REWARD_RATIO
take_profit_long = low > entry_price + risk_reward_buffer
take_profit_short = low < entry_price - risk_reward_buffer
var bar_count = 0 //number of bars since entry
var trailing_SL_buffer = float(0)
var stop_loss_price = float(0)
stop_loss_price := max(stop_loss_price, close - trailing_SL_buffer)
// plot TSL line
trail_profit_line_color = color.green
if strategy.position_size == 0
trail_profit_line_color := color.blue
stop_loss_price := low
plot(stop_loss_price,color=trail_profit_line_color)
// }
var touched_lower_bb = false
if true// and time <= backtest_timeframe_end
if low <= BOLL_lower
touched_lower_bb := true
else if strategy.position_size > 0
touched_lower_bb := false//reset state
expected_rebound = MACD > MACD[1] and abs(MACD - aMACD) < abs(MACD[1] - aMACD[1])
buy_condition = touched_lower_bb and MACD > aMACD or expected_rebound
//ENTRY:
if strategy.position_size == 0 and buy_condition
entry_price := close
trailing_SL_buffer := ATR_buffer
stop_loss_price := close - ATR_buffer
strategy.entry("Long",strategy.long, comment="buy")
bar_count := 0
else if strategy.position_size > 0
bar_count := bar_count + 1
//EXIT:
// Case (A) hits trailing stop
if strategy.position_size > 0 and close <= stop_loss_price
if close > entry_price
strategy.close("Long", comment="take profit [trailing]")
stop_loss_price := 0
else if close <= entry_price and bar_count
strategy.close("Long", comment="stop loss")
stop_loss_price := 0
bar_count := 0
// Case (B) take targeted profit relative to risk
if strategy.position_size > 0 and TARGET_PROFIT_MODE
if take_profit_long
strategy.close("Long", comment="take profits [risk:reward]")
stop_loss_price := 0
bar_count := 0