리소스 로딩... 로딩...

볼링거 밴드, 피보나치, MACD 및 RSI와 함께 다중 지표 시너지 트레이딩 전략

저자:차오장, 날짜: 2024-12-12 17:20:26
태그:BBMACDRSIFIBSMAEMASMMAWMAVWMA

img

전반적인 설명

이 전략은 볼링거 밴드, 피보나치 리트레이싱, MACD 및 RSI 등 여러 기술적 지표를 결합한 포괄적인 거래 시스템입니다. 이 전략은 다중 지표 조정을 통해 다른 시장 조건 하에서 거래 기회를 포착하고 위험 통제를 위해 최대 수익 취득 방법을 적용합니다. 시스템은 유연한 지표 매개 변수와 모듈형 디자인을 채택하여 강력한 적응성과 실용성을 제공합니다.

전략 원칙

이 전략은 네 가지 주요 기술 지표를 사용하여 거래 신호를 생성합니다.

  1. 볼링거 밴드 신호: 하부 밴드 아래로 가격의 파업은 긴 신호를 생성, 상부 밴드 위에 파업은 짧은 신호를 생성
  2. 피보나치 신호: 0-23.6% 범위의 가격은 긴 신호를 생성하고 61.8-100% 범위에서는 짧은 신호를 생성합니다.
  3. MACD 신호: 신호 선 위의 MACD 라인의 교차는 긴 신호를 생성하고 아래의 교차는 짧은 신호를 생성합니다.
  4. RSI 신호: 과잉 판매 수준 이하의 RSI는 긴 신호를 생성하고, 과잉 구매 수준 이상의 RSI는 짧은 신호를 생성합니다 거래는 어떤 지표가 신호를 생성할 때 시작됩니다. 이 전략은 또한 최대 이익 취득 방법을 적용하여 미리 설정된 이익 목표 또는 스톱 로스 수준에 도달하면 자동으로 포지션을 닫습니다.

전략적 장점

  1. 다중 지표 시너지: 다중 기술 지표를 통합함으로써 신호 신뢰성을 향상시킵니다.
  2. 높은 유연성: 지표 매개 변수를 다른 시장 환경에 맞게 조정할 수 있습니다.
  3. 종합적인 위험 관리: 최대 수익 취득과 고정 스톱 로스를 결합합니다.
  4. 좋은 적응력: 전략은 다른 시장 주기와 변동성 조건에 적응할 수 있습니다.
  5. 높은 실행 효율성: 중간 계산 부하와 함께 명확한 코드 구조

전략 위험

  1. 신호 중복: 동시에 신호를 생성하는 여러 지표가 과도한 거래로 이어질 수 있습니다.
  2. 매개 변수 민감도: 다른 매개 변수 조합은 상당히 다른 결과를 가져올 수 있습니다.
  3. 시장 적응력: 특정 시장 조건에서 실적이 떨어질 수 있습니다.
  4. 슬리퍼 영향: 슬리퍼로 인해 고주파 거래가 영향을 받을 수 있습니다.
  5. 자금 관리: 위험 통제를 위해 적절한 포지션 크기를 요구합니다.

전략 최적화

  1. 신호 가중: 신호 품질을 향상시키기 위해 다른 지표에 가중을 추가합니다.
  2. 시장 환경 인식: 시장 환경 인식 모듈을 추가하여 전략을 적절히 조정합니다.
  3. 동적 매개 변수: 적응적 매개 변수 조정 메커니즘을 도입
  4. 거래 비용: 비용을 줄이기 위해 거래 빈도를 최적화하십시오.
  5. 신호 필터링: 잘못된 신호를 줄이기 위해 추가 필터링 조건을 추가합니다.

요약

이 전략은 다중 지표 조정을 통해 안정성을 유지하면서 거래 효율성을 달성합니다. 특정 위험에도 불구하고 적절한 위험 통제와 지속적인 최적화로 실용적인 가치가 있습니다. 라이브 거래 전에 철저한 백테스팅과 매개 변수 최적화가 권장됩니다.


/*backtest
start: 2024-12-04 00:00:00
end: 2024-12-11 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Demo GPT Bollinger, Fibonacci, MACD & RSI with Max Profit Exit", overlay=true)

// === User Inputs for Bollinger Bands ===
length_bb = input.int(20, minval=1, title="Bollinger Bands Length")
maType_bb = input.string("SMA", title="Bollinger Bands MA Type", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"])
src_bb = input(close, title="Bollinger Bands Source")
mult_bb = input.float(2.0, minval=0.001, maxval=50, title="Bollinger Bands StdDev")
offset_bb = input.int(0, title="Bollinger Bands Offset", minval=-500, maxval=500)

// === User Inputs for Fibonacci Levels ===
lookback_fib = input.int(50, minval=1, title="Fibonacci Lookback Period")

// === User Inputs for MACD ===
macd_fast = input.int(12, minval=1, title="MACD Fast Length")
macd_slow = input.int(26, minval=1, title="MACD Slow Length")
macd_signal = input.int(9, minval=1, title="MACD Signal Length")

// === User Inputs for RSI ===
rsi_length = input.int(14, title="RSI Length")
rsi_overbought = input.int(70, title="RSI Overbought Level")
rsi_oversold = input.int(30, title="RSI Oversold Level")

// === Start and End Date Inputs ===
start_date = input(timestamp("2023-01-01 00:00:00"), title="Start Date")
end_date = input(timestamp("2069-12-31 23:59:59"), title="End Date")

// === Moving Average Function ===
ma(source, length, _type) =>
    switch _type
        "SMA" => ta.sma(source, length)
        "EMA" => ta.ema(source, length)
        "SMMA (RMA)" => ta.rma(source, length)
        "WMA" => ta.wma(source, length)
        "VWMA" => ta.vwma(source, length)

// === Bollinger Bands Calculation ===
basis_bb = ma(src_bb, length_bb, maType_bb)
dev_bb = mult_bb * ta.stdev(src_bb, length_bb)
upper_bb = basis_bb + dev_bb
lower_bb = basis_bb - dev_bb

// === Fibonacci Levels Calculation ===
highest_price = ta.highest(high, lookback_fib)
lowest_price = ta.lowest(low, lookback_fib)

fib_0 = lowest_price
fib_23 = lowest_price + 0.236 * (highest_price - lowest_price)
fib_38 = lowest_price + 0.382 * (highest_price - lowest_price)
fib_50 = lowest_price + 0.5 * (highest_price - lowest_price)
fib_61 = lowest_price + 0.618 * (highest_price - lowest_price)
fib_100 = highest_price

// === MACD Calculation ===
[macd_line, signal_line, _] = ta.macd(close, macd_fast, macd_slow, macd_signal)

// === RSI Calculation ===
rsi = ta.rsi(close, rsi_length)

// === Plotting for Reference ===
plot(basis_bb, "Bollinger Basis", color=color.blue, offset=offset_bb)
p1_bb = plot(upper_bb, "Bollinger Upper", color=color.red, offset=offset_bb)
p2_bb = plot(lower_bb, "Bollinger Lower", color=color.green, offset=offset_bb)
fill(p1_bb, p2_bb, title="Bollinger Bands Background", color=color.rgb(33, 150, 243, 95))

plot(fib_0, "Fib 0%", color=color.gray)
plot(fib_23, "Fib 23.6%", color=color.yellow)
plot(fib_38, "Fib 38.2%", color=color.orange)
plot(fib_50, "Fib 50%", color=color.blue)
plot(fib_61, "Fib 61.8%", color=color.green)
plot(fib_100, "Fib 100%", color=color.red)

hline(0, "MACD Zero Line", color=color.gray)
plot(macd_line, "MACD Line", color=color.blue)
plot(signal_line, "Signal Line", color=color.orange)

hline(rsi_overbought, "RSI Overbought", color=color.red)
hline(rsi_oversold, "RSI Oversold", color=color.green)
plot(rsi, "RSI", color=color.blue)

// === Combined Trading Logic ===
// Bollinger Bands Signals
long_bb = ta.crossover(close, lower_bb)
short_bb = ta.crossunder(close, upper_bb)

// Fibonacci Signals
long_fib = close <= fib_23 and close >= fib_0
short_fib = close >= fib_61 and close <= fib_100

// MACD Signals
long_macd = ta.crossover(macd_line, signal_line)
short_macd = ta.crossunder(macd_line, signal_line)

// RSI Signals
long_rsi = rsi < rsi_oversold
short_rsi = rsi > rsi_overbought

// Combined Long and Short Conditions
long_condition = (long_bb or long_fib or long_macd or long_rsi) 
short_condition = (short_bb or short_fib or short_macd or short_rsi) 
// === Max Profit Exit Logic ===
// Define the maximum profit exit percentage
take_profit_percentage = input.float(5.0, title="Take Profit (%)", minval=0.1, maxval=100) / 100
stop_loss_percentage = input.float(2.0, title="Stop Loss (%)", minval=0.1, maxval=100) / 100

// Track the highest price during the trade
var float max_profit_price = na
if (strategy.opentrades > 0)
    max_profit_price := na(max_profit_price) ? strategy.opentrades.entry_price(0) : math.max(max_profit_price, high)

// Calculate the take profit and stop loss levels based on the max profit price
take_profit_level = max_profit_price * (1 + take_profit_percentage)
stop_loss_level = max_profit_price * (1 - stop_loss_percentage)

// Exit the trade if the take profit or stop loss level is hit
if (strategy.opentrades > 0)
    if (close >= take_profit_level)
        strategy.exit("Take Profit", from_entry="Long", limit=take_profit_level)
    if (close <= stop_loss_level)
        strategy.exit("Stop Loss", from_entry="Long", stop=stop_loss_level)

if (strategy.opentrades > 0)
    if (close <= take_profit_level)
        strategy.exit("Take Profit", from_entry="Short", limit=take_profit_level)
    if (close >= stop_loss_level)
        strategy.exit("Stop Loss", from_entry="Short", stop=stop_loss_level)

// === Execute Trades ===
if (long_condition)
    strategy.entry("Long", strategy.long, when=not na(long_condition))

if (short_condition)
    strategy.entry("Short", strategy.short, when=not na(short_condition))


관련

더 많은