Stratégie de cassure multi-échelle MACD+EMA


Date de création: 2024-03-22 11:13:12 Dernière modification: 2024-03-22 11:13:12
Copier: 0 Nombre de clics: 685
1
Suivre
1617
Abonnés

Stratégie de cassure multi-échelle MACD+EMA

Aperçu

La stratégie combine l’indicateur MACD et plusieurs lignes EMA pour capturer les tendances fortes du marché à partir de deux échelles de temps, la ligne de la demi-journée et la ligne de la minute. L’indicateur MACD est utilisé sur la ligne de la demi-journée pour déterminer la direction de la grande tendance, les trois lignes EMA des jours 5, 15 et 30 sont utilisées sur la ligne de la minute pour confirmer la tendance et négocier aux points de rupture.

Principe de stratégie

  1. Le MACD périphérique détermine les grandes tendances: calcul de l’indicateur MACD périphérique, comparant les écarts de la colonne MACD de la semaine en cours et de la semaine précédente, une différence supérieure à 0 indiquant une tendance à la hausse et inférieure à 0 indiquant une tendance à la baisse.

  2. Confirmation de la tendance par plusieurs lignes EMA: trois lignes EMA de 5, 15 et 30 jours sont tracées sur le graphique des minutes. Quand une EMA à court terme est en cours d’exécution au-dessus d’une EMA à long terme et à la hausse, la tendance est à la hausse; le contraire est à la baisse.

  3. Le point de croisement des lignes EMA:

    • Le stop-loss est fixé à un nombre de points fixe en dessous du cours moyen de la position, ou à zéro en dessous de l’EMA de 5 jours et en dessous de l’EMA de 15 jours.
    • Prise de position vide: Prise de position vide lorsque le MACD circulaire est à la baisse et que l’EMA du 5e jour franchit l’EMA du 30e jour. Le stop loss est fixé à un nombre de points sur le cours moyen de la position, ou en position libre lorsque l’EMA du 5e jour franchit l’EMA du 15e jour.
  4. La mise en place d’une garantie: aucune condition de mise en place.

Analyse des avantages

  1. La combinaison de deux échelles de temps permet d’évaluer les tendances de manière plus fiable. Le MACD périodique évalue les grandes tendances, évitant ainsi de faire trop de couverture en cas de choc; L’EMA minute croise les tendances, capturant chaque vague de tendance.

  2. Les paramètres EMA de la ligne minute sont sélectionnés pour les jours 5, 15, 30 et la combinaison des trois lignes permet de bien filtrer le bruit et de capturer les tendances claires.

  3. Le stop loss est raisonnable et permet de maîtriser le risque d’une seule transaction. La combinaison d’un stop en points fixes et d’un stop en EMA permet de maîtriser les pertes et de suivre la tendance.

  4. La conception modulaire du code, les principaux modules tels que le calcul MACD, le calcul EMA, etc., sont très polyvalents et extensibles.

Analyse des risques

  1. Le mauvais choix des seuils de différence du graphique MACD peut conduire à des critères de jugement de tendance trop laxistes ou stricts, ce qui rend le jugement inexact. Le choix des meilleurs seuils peut être effectué par remise en question et optimisation des paramètres.

  2. Le choix des paramètres de l’EMA de la ligne de minutes est inapproprié, une période trop courte entraîne des transactions fréquentes et une période trop longue entraîne des opportunités manquées. La meilleure combinaison de paramètres peut être choisie par retracement et optimisation des paramètres.

  3. Le choix de la position d’arrêt du nombre de points fixes est inapproprié, un réglage trop petit entraîne des arrêts fréquents, un réglage trop général entraîne des pertes excessives. Un arrêt personnalisé peut être réglé en fonction des caractéristiques de fluctuation de la variété.

  4. La ligne de l’EMA du point de basculement de la tendance peut être retardée et peut manquer le meilleur moment pour acheter ou vendre. Cependant, la stratégie de gestion efficace du risque et la performance globale de la stratégie sont bonnes sur le long terme.

Direction d’optimisation

  1. Il est possible de considérer la suppression d’indicateurs tels que le RSI pour confirmer la force de la tendance et améliorer l’exactitude des jugements de tendance sur la base des jugements de tendance MACD.

  2. Il est possible d’ajouter des indicateurs tels que le CCI comme conditions de filtrage des signaux de négociation sur la base du croisement des lignes EMA, ce qui réduit la fréquence des transactions et le risque.

  3. Il est possible de définir des points de stop personnalisés en fonction des caractéristiques historiques de la volatilité d’une action, ce qui rend la stratégie plus adaptée aux caractéristiques de la variété.

  4. On peut envisager des stratégies d’augmentation et de diminution de la position, en augmentant progressivement la position lorsque la tendance est forte et en diminuant progressivement la position lorsque la tendance s’affaiblit, pour améliorer l’efficacité de l’utilisation des fonds.

Résumer

La stratégie de rupture à plusieurs échelles de temps du MACD + EMA est une stratégie de suivi de tendance qui a une base scientifique pour juger la tendance et la confirmation de la tendance, qui permet de saisir efficacement les principales tendances du marché et de générer des gains stables. En même temps, la stratégie est également relativement complète en matière de contrôle des risques, en réglant des conditions de position pacifiques et raisonnables, pour contrôler efficacement le retrait de la stratégie.

Code source de la stratégie
/*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)