La stratégie MACD+EMA de rupture à plusieurs délais

Auteur:ChaoZhang est là., Date: 2024-03-22 11:13:12 Le président de la République
Les étiquettes:

img

Résumé

Cette stratégie combine l'indicateur MACD et plusieurs lignes EMA pour capturer les fortes tendances du marché à partir de deux délais - hebdomadaire et intraday. Il utilise l'indicateur MACD sur le graphique hebdomadaire pour déterminer la direction générale de la tendance, et trois lignes EMA (5 jours, 15 jours, 30 jours) sur le graphique intraday pour confirmer la tendance et effectuer des transactions aux points de rupture.

Principe de stratégie

  1. Le MACD hebdomadaire détermine la tendance globale: Calculez l'indicateur MACD hebdomadaire et comparez la différence entre les valeurs de l'histogramme MACD des semaines en cours et des semaines précédentes. Une différence positive indique une tendance haussière, tandis qu'une différence négative indique une tendance baissière. Mettez à jour la direction de la tendance tous les lundis à l'ouverture du marché.

  2. Plusieurs lignes EMA confirment la tendance: Tracer les lignes EMA de 5 jours, 15 jours et 30 jours sur le graphique intraday. Lorsque l'EMA à court terme dépasse et s'éloigne de l'EMA à long terme, la tendance est à la hausse; inversement, la tendance est à la baisse.

  3. Commerce aux points de croisement de l'EMA:

    • Entrée longue: Lorsque la tendance MACD hebdomadaire est à la hausse et que la clôture intradienne dépasse l'EMA de 15 jours, passez long.
    • Entrée courte: Lorsque la tendance MACD hebdomadaire est à la baisse et que l'EMA à 5 jours dépasse l'EMA à 30 jours, passez à la courte.
  4. Ajout de positions: Aucune condition d'entrée supplémentaire n'est fixée pour le moment.

Analyse des avantages

  1. La combinaison de deux délais rend la détermination de la tendance plus fiable. Le MACD hebdomadaire évite de se retrouver coincé dans les marchés à fourchette, tandis que les croisements de l'EMA intraday capturent chaque vague dans la tendance.

  2. Le choix des EMA 5/15/30 jours sur le graphique intraday filtre efficacement le bruit et capte les tendances claires.

  3. Les paramètres de stop-loss sont raisonnables, contrôlant le risque sur les transactions individuelles.

  4. La conception du code modulaire, avec des composants clés tels que les calculs MACD et EMA, est hautement réutilisable et extensible.

Analyse des risques

  1. Une sélection incorrecte du seuil de différence d'histogramme MACD peut entraîner des critères de tendance trop lâches ou stricts, provoquant des jugements erronés.

  2. Une sélection incorrecte des paramètres de l'EMA intraday - trop court peut conduire à une survente, tandis que trop long peut manquer des opportunités.

  3. Les points de stop-loss fixes inappropriés - le réglage trop serré peut entraîner des stop-outs fréquents, tandis que trop larges peuvent entraîner des pertes excessives par transaction.

  4. Les EMA peuvent être en retard sur les points de basculement de la tendance, manquant potentiellement les meilleurs points d'entrée/sortie.

Directions d'optimisation

  1. Envisagez d'ajouter d'autres indicateurs comme le RSI au MACD hebdomadaire pour confirmer la force de la tendance et améliorer la précision.

  2. Il convient d'envisager d'ajouter d'autres indicateurs tels que le CCI comme filtres supplémentaires pour les signaux croisés de l'EMA intraday afin de réduire la fréquence et le risque de négociation.

  3. Définissez des points de stop-loss personnalisés basés sur la volatilité historique de chaque action pour mieux répondre à ses caractéristiques.

  4. Il convient d'envisager d'ajouter des règles stratégiques pour la mise à l'échelle et la sortie des positions - ajoutant progressivement des tendances fortes et réduisant les tendances en baisse pour améliorer l'efficacité du capital.

Résumé

La stratégie MACD+EMA Multi-Timeframe Breakout est une stratégie de suivi des tendances avec une base scientifique pour la détermination et la confirmation des tendances. Elle peut capturer efficacement les principales tendances du marché et générer des rendements stables. Pendant ce temps, la stratégie est assez complète en matière de contrôle des risques, limitant efficacement les retraits grâce à des règles raisonnables de stop-loss et de sortie. Cependant, il existe également certaines lacunes, telles que les signaux de tendance en retard et l'absence de règles de mise à l'échelle, qui peuvent être optimisées et améliorées. Dans l'ensemble, il s'agit d'une stratégie de trading quantitative très utile à apprendre et à utiliser.


/*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)

Plus de