
이 전략은 부린띠와 MACD 지표를 결합하여 부린띠를 사용하여 시장 과매매 기회를 판단하고 MACD 지표를 사용하여 추세 반전을 판단하여 낮은 가격으로 높은 가격으로 판매하는 양적 거래 전략을 달성합니다. 전략 이름은 布林MACD 반전 전략 입니다.
이 전략은 먼저 20일 부린 반도를 계산하며, 중궤도, 상궤도, 하궤도를 포함한다. 가격이 하궤도를 접촉할 때, 시장이 과매매 상태에 있다고 간주한다. 이 때 MACD 지표와 결합하여 추세가 반전되는지 판단하고, 차이는 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