
Стратегия объединяет в себе бурин-полосы и MACD, используя бурин-полосы для определения возможности перепродажи рынка и MACD для определения обратного тренда, чтобы достичь количественной стратегии торговли с низкой покупкой и высокой продажей. Название стратегии определено как бурин-MACD.
Сначала стратегия рассчитывает 20-дневную буринскую полосу, включающую среднюю, верхнюю и нижнюю полосы. Когда цена касается нижней полосы, считается, что рынок находится в состоянии перепродажи. В этом случае в сочетании с индикатором MACD определяется, будет ли реверсироваться тенденция.
В частности, при одновременном срабатывании соприкосновения с пониженной трассой и разрыва MACD в направлении линии сигнала прорыва происходит подача сигнала покупки; при повышении цены на закрытие до превышения стоп-стопа - подача сигнала остановки.
Стратегия объединяет сигналы обратного тренда, определяемые перепродажной зоной по Бринской полосе и MACD, и обеспечивает более низкую цену покупки. В то же время, стратегия включает в себя метод остановки, позволяющий закрепить прибыль и избежать убытков.
В частности, преимущества:
В этой стратегии также есть определенные риски, которые сосредоточены на следующих аспектах:
В связи с вышеуказанными рисками можно принять следующие меры предосторожности:
В этой стратегии есть место для дальнейшей оптимизации, в частности:
Стратегия, объединяющая суждение о перепродаже по Бринской полосе и индикатор обратного тренда MACD, обеспечивает относительно выгодный выбор точки покупки. В то же время, устанавливается риск-контроль методом остановки убытков. Это является стратегией низкой покупки и продажи, которую стоит изучить и оптимизировать.
/*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