이 전략은 MACD 지표와 여러 EMA 라인을 결합하여 주간 및 내일 두 시간 프레임에서 강력한 시장 트렌드를 포착합니다. 주간 차트에서 MACD 지표를 사용하여 전반적인 트렌드 방향을 결정하고, 내일 차트에서 세 EMA 라인 (5 일, 15 일, 30 일) 을 사용하여 트렌드를 확인하고 브레이크 포인트에서 거래를합니다. 주요 아이디어는 강력한 트렌드를 따라 큰 파도를 타고 단기 EMA가 장기 EMA를 넘어서면 거래를 입력하고 EMA가 철회하거나 스톱-손실 조건을 유발하면 종료하는 것입니다.
주간 MACD는 전반적인 추세를 결정합니다: 주간 MACD 지표를 계산하고 현재 주와 전주 MACD 히스토그램 값의 차이를 비교합니다. 긍정적 인 차이는 상승 추세를 나타내고 부정적인 차이는 하락 추세를 나타냅니다. 시장 개방 시 매주 월요일 트렌드 방향을 업데이트합니다.
다중 EMA 라인은 트렌드를 확인합니다. 5 일, 15 일 및 30 일 EMA 라인을 내일 차트에 그려보십시오. 단기 EMA가 장기 EMA보다 높고 떨어져있을 때 트렌드는 상승합니다. 반대로, 트렌드는 하락합니다.
EMA 교차점에서의 거래:
추가 포지션: 현재 추가 입시 조건이 정해지지 않았습니다.
두 시간 프레임을 결합하면 트렌드 결정이 더 신뢰할 수 있습니다. 주간 MACD는 범위 제한 시장에 갇히지 않는 반면 내일 EMA 크로스오버는 트렌드 내의 각 파도를 캡처합니다.
5/15/30일 EMA를 선택하면 내일 차트에서 소음을 효과적으로 필터링하고 명확한 트렌드를 파악할 수 있습니다.
스톱 로스 설정은 합리적이며 개별 거래에서 위험을 제어합니다. 고정 포인트 스톱 로스와 EMA 스톱 로스를 결합하면 손실 통제와 트렌드 다음이 가능합니다.
모
MACD 히스토그램 차이 문턱의 잘못된 선택은 너무 느슨하거나 엄격한 트렌드 기준으로 이어질 수 있으며 잘못된 판단을 유발할 수 있습니다. 백테스팅 및 매개 변수 최적화는 최적의 문턱을 선택하는 데 도움이 될 수 있습니다.
내일 EMA 매개 변수의 잘못된 선택 - 너무 짧으면 과잉 거래로 이어질 수 있으며 너무 길으면 기회를 놓칠 수 있습니다. 백테스팅 및 매개 변수 최적화는 최적의 매개 변수 조합을 선택하는 데 도움이 될 수 있습니다.
부적절한 고정 스톱 로스 포인트 - 너무 좁게 설정하면 빈번한 스톱 아웃이 발생할 수 있으며 너무 넓게 설정하면 거래 당 과도한 손실이 발생할 수 있습니다. 각 도구의 변동성 특성에 따라 맞춤형 스톱 로스는 도움이 될 수 있습니다.
EMA는 트렌드 전환점에 지연할 수 있고, 잠재적으로 가장 좋은 입출점들을 놓칠 수 있습니다. 그러나 장기적으로는 여전히 위험을 효과적으로 통제하고 전반적으로 좋은 성과를 낼 수 있습니다.
주간 MACD에 RSI와 같은 다른 지표를 추가하여 트렌드 강도를 확인하고 정확도를 향상시키는 것을 고려하십시오.
거래 빈도와 위험을 줄이기 위해 CCI와 같은 다른 지표를 추가 필터로 추가로 추가하는 것을 고려하십시오.
각 주식의 역사적 변동성을 기반으로 사용자 정의 스톱-러스 포인트를 설정하여 그 특성에 더 잘 맞게 설정합니다.
포지션의 확장 및 퇴출을 위한 전략 규칙을 추가하는 것을 고려하십시오. 자본 효율성을 향상시키기 위해 점차적으로 강한 추세를 추가하고 약화 추세를 줄입니다.
MACD+EMA 멀티 타임프레임 브레이크아웃 전략은 트렌드 결정과 확인을 위한 과학적 근거를 가진 트렌드 추후 전략이다. 주요 시장 트렌드를 효과적으로 파악하고 안정적인 수익을 창출할 수 있다. 한편, 전략은 합리적인 스톱 로스 및 출구 규칙으로 마이너드 다운을 효과적으로 제한하여 위험 통제에 상당히 완전하다. 그러나 추후 트렌드 신호와 스케일링 규칙의 부족과 같은 몇 가지 단점도 있다. 이를 더 이상 최적화하고 개선할 수 있다. 전반적으로, 이것은 학습하고 활용할 가치가 있는 매우 가치 있는 양적 거래 전략이다.
/*backtest start: 2023-03-16 00:00:00 end: 2024-03-21 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // 1) 전주와 전전주의 히스토그램의 차이를 계산하여, 매주 월요일에 매매 방향을 표시하고, // 2) 5일, 15일, 30일 선을 호출하여 평행하게 그리고, 매매 방향에 따라 // 3) 분봉기준의 이동평균선 매매전략 // 4) 수익 실현은 미설정 해둠 //@version=5 strategy('Last week MACD+ 15day, 30day break through, by Ho.J', overlay=true, initial_capital=30000, commission_value = 7.5, commission_type=strategy.commission.cash_per_order, slippage = 0) // 백테스팅 기간 설정 start_time = input(timestamp("Jan 19 2024 00:00:01"), confirm = true) end_time = input(timestamp("MAR 19 2024 23:59:59"), confirm = true) is_in_time = true stopLoss = input.int(100, title="손절 수준") // 지난주 값 불러오기 입력 매개변수, 1은 5일, 3은 15일, 6은 30일 이동평균선을 구하는 변수임 emaLength1 = input(1, title="EMA Length") emaLength2 = input(3, title="EMA Length") emaLength3 = input(6, title="EMA Length") timeframePeriod = "W" // 'D'는 일간 데이터를 의미 // 분봉기준 EMA 계산 shortEMA = ta.ema(close, 50) mediumEMA = ta.ema(close, 60) longEMA = ta.ema(close, 150) // 분봉기준 EMA 그리기 plot(shortEMA, color=color.blue, title="5일 EMA") plot(mediumEMA, color=color.orange, title="15일 EMA") plot(longEMA, color=color.red, title="30일 EMA") // 주간 MACD 계산, 전주와 전전주 히스토그램을 계산하여 상대적인 상승, 하락을 계산 [macdLine, signalLine, _] = ta.macd(close, 12, 26, 9) histogram = macdLine - signalLine histLastWeek = request.security(syminfo.tickerid, timeframePeriod, histogram[1], lookahead=barmerge.lookahead_on) histWeekBeforeLast = request.security(syminfo.tickerid, timeframePeriod, histogram[2], lookahead=barmerge.lookahead_on) histDiff = histLastWeek - histWeekBeforeLast // 현재 주의 월요일 첫 봉인지 확인 isMondayFirstBar = (dayofweek == dayofweek.monday) and (hour == 09) and (minute == 00) // 여기서 시간은 시장 개장 시간에 따라 조정해야 함 // 월요일 첫봉에, 주간 MACD 히스토그램이 상승하면 '매수', 하락하면 '매도' 표시 var label myLabel = na if (isMondayFirstBar) if (histDiff > 0) myLabel := label.new(bar_index, high, "이번주는 매수만", color=color.green, textcolor=color.white, style=label.style_label_down, size=size.large) else if (histDiff < 0) myLabel := label.new(bar_index, low, "이번주는 매도만", color=color.red, textcolor=color.white, style=label.style_label_up, size=size.large) // 지난주 EMA 값 요청 // 'lookahead'를 사용하여 지난 데이터를 기준으로 계산 lastWeekEMA1 = request.security(syminfo.tickerid, timeframePeriod, ta.ema(close[1], emaLength1), lookahead=barmerge.lookahead_on) lastWeekEMA2 = request.security(syminfo.tickerid, timeframePeriod, ta.ema(close[1], emaLength2), lookahead=barmerge.lookahead_on) lastWeekEMA3 = request.security(syminfo.tickerid, timeframePeriod, ta.ema(close[1], emaLength3), lookahead=barmerge.lookahead_on) // 지난주 EMA 그리기 plot(lastWeekEMA1, color=color.red, title="Last Week EMA1") plot(lastWeekEMA2, color=color.rgb(157, 126, 126), title="Last Week EMA2") plot(lastWeekEMA3, color=color.rgb(199, 192, 192), title="Last Week EMA3") // 매수/매도 조건 buySignal = ta.crossover(close, lastWeekEMA2) and histDiff > 0 // addbuySignal = ta.crossover(close, lastWeekEMA3) and histDiff > 0 sellSignal = ta.crossunder(shortEMA, longEMA) and histDiff < 0 // addSellSignal = ta.crossunder(close, lastWeekEMA3) and histDiff < 0 // 매수 조건 if (buySignal) strategy.entry('Buy', strategy.long) alert('Buy Signal', alert.freq_once_per_bar_close) // if (addbuySignal) // strategy.entry('Buy', strategy.long) // alert('add Buy Signal', alert.freq_once_per_bar_close) if (strategy.position_size > 0 and ((strategy.position_avg_price - close) >= stopLoss) or ta.crossunder(close, mediumEMA)) strategy.close('Buy') alert('Close Buy Signal', alert.freq_once_per_bar_close) // 매도 조건 if (sellSignal) strategy.entry('Sell', strategy.short) alert('Sell Signal', alert.freq_once_per_bar_close) //if (addSellSignal) // strategy.entry('Sell', strategy.short) // alert('add Sell Signal', alert.freq_once_per_bar_close) if (strategy.position_size < 0 and ((close - strategy.position_avg_price) >= stopLoss) or ta.crossover(shortEMA, mediumEMA)) strategy.close('Sell') alert('Close Sell Signal', alert.freq_once_per_bar_close)