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

SMA-RSI-MACD 다중 지표 동적 한도 주문 거래 전략

저자:차오장, 날짜: 2024-12-11 15:15:49
태그:SMARSIMACDEMA

img

전반적인 설명

이 전략은 주로 EMA 크로스오버, RSI 과잉 판매 조건 및 MACD 골든 크로스를 사용하여 거래 확인을 하는 다기술 지표 거래 시스템이다. 이 전략은 진입에 대한 동적 한도 주문과 위험 관리에 대한 여러 출구 메커니즘을 사용한다. 이 전략은 트레이딩 신호를 필터링하기 위해 상대 강도 지수 (RSI) 와 이동 평균 컨버전스 디버전스 (MACD) 와 결합된 9 기간 및 21 기간 기하급수적 이동 평균 (EMA) 을 주요 트렌드 지표로 사용한다.

전략 원칙

핵심 거래 논리는 다음의 주요 구성 요소를 포함합니다.

  1. 입상 신호는 9주기 EMA가 21주기 EMA를 넘을 때 발사됩니다.
  2. 입시 가격은 특정 오프셋에서 9 기간 EMA 아래의 한계 주문으로 설정됩니다.
  3. 거래 확인은 임계치 이하의 RSI와 MACD 황금 십자가가 필요합니다.
  4. 출구 신호는 MACD 죽음의 크로스, 고정 수익/손실 포인트 및 시장 끝에서 강제 폐쇄를 포함한다.
  5. 거래 시간은 오전 9시 30분부터 오후 3시 10분까지입니다.

이 전략은 더 나은 입시 가격을 달성하기 위해 입시 제한 주문을 사용하며 거래 정확성을 향상시키기 위해 여러 기술적 지표를 결합합니다.

전략적 장점

  1. 다중 신호 확인 메커니즘은 거래 신뢰성을 향상시킵니다.
  2. 리미트 오더 엔트리는 더 나은 실행 가격을 제공합니다.
  3. 고정 수익/손실 지수는 위험 통제를 촉진합니다.
  4. 시장 끝에서 강제 폐쇄는 하루 하루 위험을 제거합니다
  5. 거래 시간 제한은 오픈 변동성을 피합니다.
  6. EMA 지표는 트렌드 반응 속도가 빨라집니다.
  7. RSI와 MACD 조합은 잘못된 신호를 필터링하는 데 도움이됩니다.

전략 위험

  1. 여러 신호 확인은 놓친 기회를 초래할 수 있습니다.
  2. 제한 주문은 빠른 가격 변동에서 실행되지 않을 수 있습니다.
  3. 고정점 스톱은 높은 변동성 중 더 큰 손실을 초래할 수 있습니다.
  4. MACD 신호는 가격 움직임에 뒤쳐질 수 있습니다.
  5. 전략은 시장 변동성의 변화를 고려하지 않습니다
  6. 매개 변수 최적화는 과도한 부착으로 이어질 수 있습니다.

전략 최적화 방향

  1. 시장 변동성에 기초한 적응적 스톱 로스 및 영업점 도입
  2. 추가 확인 신호로 볼륨 표시를 추가합니다.
  3. 트렌드 강도 필터를 추가하는 것을 고려하십시오.
  4. ATR을 사용하여 한계 순서 오프셋 계산을 최적화
  5. 불리한 조건을 필터링하기 위해 시장 정서 지표를 포함
  6. 신호 강도에 기반한 위치 크기를 추가하는 메커니즘

요약

이 전략은 유동 평균을 사용하여 트렌드를 식별하고, RSI와 MACD로 신호를 필터하고, 리미트 오더와 여러 스톱 메커니즘을 통해 위험을 제어하는 잘 구성된 다중 지표 거래 전략입니다. 이 전략의 강점은 신호 신뢰성과 포괄적인 위험 통제에 있습니다. 그러나 신호 지연 및 매개 변수 최적화와 함께 도전에 직면합니다. 동적 매개 변수 조정 및 추가 보조 지표를 통해 개선할 수있는 상당한 공간이 있습니다. 트렌딩 시장 조건에서 보수적인 투자자에게 적합합니다.


/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-09 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("SMA 9 & 21 with RSI and MACD Buy Strategy", overlay=true)

// Inputs for Simple Moving Averages
sma_short = ta.ema(close, 9)
sma_long = ta.ema(close, 21)

// Plotting SMA
plot(sma_short, color=color.green, title="SMA 9")
plot(sma_long, color=color.red, title="SMA 21")

// RSI Calculation
rsi_length = input.int(14, title="RSI Length")
rsi_threshold = input.int(70, title="RSI Threshold")
rsi = ta.rsi(close, rsi_length)

// MACD Calculation
macd_fast = input.int(8, title="MACD Fast Length")
macd_slow = input.int(18, title="MACD Slow Length")
macd_signal = input.int(6, title="MACD Signal Length")
[macd_line, signal_line, _] = ta.macd(close, macd_fast, macd_slow, macd_signal)

// Inputs for Limit Order Offset
limit_offset = input.int(50, title="Limit Order Offset", minval=1)  // 50 points below 9 EMA

// User input for specific date
simulationStartDate = input(timestamp("2024-12-01 00:00"), title="Simulation Start Date", group = "Simulation Dates")
simulationEndDate = input(timestamp("2024-12-30 00:00"), title="Simulation End Date", group = "Simulation Dates")

// Declare limit_price as float
var float limit_price = na

// Calculate Limit Order Price
if (sma_short[1] < sma_long[1] and sma_short > sma_long)  // 9 EMA crosses above 21 EMA
    limit_price := sma_short - limit_offset

// Buy Signal Condition (only on the specified date)
buy_condition = not na(limit_price) and rsi < rsi_threshold and ta.crossover(macd_line, signal_line) 

// Sell Signal Condition (MACD crossover down)
sell_condition = ta.crossunder(macd_line, signal_line)

// Track Entry Price for Point-Based Exit
var float entry_price = na

if (buy_condition )
    strategy.order("Buy", strategy.long, comment="Limit Order at 9 EMA - Offset", limit=limit_price)
    label.new(bar_index, limit_price, "Limit Buy", style=label.style_label_up, color=color.green, textcolor=color.white)
    entry_price := limit_price  // Set entry price

// Exit Conditions
exit_by_macd = sell_condition
exit_by_points = not na(entry_price) and ((close >= entry_price + 12) or (close <= entry_price - 12))  // Adjust as per exit points

// Exit all positions at the end of the day
if hour == 15 and minute > 10 and strategy.position_size > 0
    strategy.close_all()  // Close all positions at the end of the day
    strategy.cancel_all()  

// Exit based on sell signal or point movement
if (exit_by_macd or exit_by_points  and strategy.position_size > 0 )
    strategy.close("Buy")
    label.new(bar_index, close, "Close", style=label.style_label_down, color=color.red, textcolor=color.white)

 

관련

더 많은