Stratégie de tendance croisée à moyenne mobile double

Auteur:ChaoZhang est là., Date: 2023-11-22 17:29:04
Les étiquettes:

img

Résumé

La stratégie de tendance de croisement de la moyenne mobile double est une stratégie de suivi de tendance qui génère des signaux d'achat et de vente lorsque les lignes moyennes mobiles rapides et lentes se croisent.

La logique de la stratégie

La stratégie utilise principalement les indicateurs suivants pour le jugement:

  1. Les lignes moyennes mobiles rapides et lentes: croix dorée pour le signal d'achat, croix de mort pour le signal de vente.

  2. MACD: ligne MACD au-dessus de la ligne de signal et MACD en hausse au plus bas pour le signal haussier.

  3. RSI: RSI supérieur à 50 pour la hausse, inférieur à 50 pour la baisse.

  4. L'oscillateur impressionnant (AO): l'OOA franchit la ligne 0 pour acheter, et la franchit pour vendre.

  5. Trois moyennes mobiles quotidiennes: une MA quotidienne de courte durée qui dépasse la MA quotidienne de longue durée comme signal d'achat.

La stratégie combine plusieurs délais et indicateurs pour générer une logique d'achat et de vente. Elle produit des ordres d'achat lorsque plusieurs indicateurs montrent des signaux haussiers en même temps, et des ordres de vente lorsque des signaux baissiers émergent, pour suivre la tendance.

Analyse des avantages

La stratégie présente les avantages suivants:

  1. La combinaison de plusieurs indicateurs réduit les faux signaux et améliore la précision.

  2. L'incorporation de plusieurs délais permet d'identifier une direction de tendance plus large.

  3. Le réglage des paramètres offre une bonne rentabilité.

  4. Adopte un stop loss mobile pour contrôler le risque et limiter les pertes.

  5. Suivi automatisé des tendances sans intervention manuelle, réduisant les coûts.

Analyse des risques

Il y a aussi des risques:

  1. Plus de coups de fouet peuvent se produire sur les marchés à portée de gamme.

  2. Les événements du cygne noir pourraient entraîner un retrait important.

  3. La logique d'achat/vente complexe repose sur de grandes données historiques pour trouver les paramètres optimaux.

  4. Un paramètre de stop-loss inapproprié conduit à une sortie prématurée.

Directions d'optimisation

La stratégie peut être améliorée par les aspects suivants:

  1. Testez plus de combinaisons d'indicateurs pour des signaux plus stables et précis, tels que l'indice de volatilité, l'OBV, etc.

  2. Optimiser les paramètres des indicateurs avec l'apprentissage automatique et des algorithmes génétiques pour réduire les sur-trades.

  3. Mettre en place des techniques d'ensemble de modèles pour intégrer des signaux provenant de plusieurs modèles stratégiques indépendants, améliorant ainsi la robustesse.

  4. Entrez dans le commerce sur une période plus longue, sortez sur une période plus courte.

  5. Construire un module de contrôle quantitatif des risques avec des limites strictes sur le pourcentage de perte d'arrêt par transaction, le tirage maximal, etc.

Résumé

La stratégie de tendance de croisement de la moyenne mobile double utilise des croisements de MA rapides et lents comme signaux de trading, ainsi que MACD, RSI pour juger de la direction de la tendance pour le suivi automatisé de la tendance.


/*backtest
start: 2023-10-22 00:00:00
end: 2023-11-21 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('SteffVans', shorttitle='SteffVans strategy', overlay=true, process_orders_on_close = true)

// Input settings
macd_fast_length = input(12)
macd_slow_length = input(26)
macd_signal_length = input(9)

// Calculate MACD values
[macd_line, signal_line, _] = ta.macd(close, macd_fast_length, macd_slow_length, macd_signal_length)
mg = ta.lowest(signal_line, 30) >= -0

// RSI
ma(source, length, type) =>
    switch type
        "SMA" => ta.sma(source, length)
        "Bollinger Bands" => 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)

rsiLengthInput = input.int(14, minval=1)
rsiSourceInput = input.source(close, "Source", group="RSI Settings")
maTypeInput = input.string("SMA", title="MA Type", options=["SMA", "Bollinger Bands", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA Settings")
maLengthInput = input.int(14, title="MA Length", group="MA Settings")
bbMultInput = input.float(2.0, minval=0.001, maxval=50, title="BB StdDev", group="MA Settings")

up = ta.rma(math.max(ta.change(rsiSourceInput), 0), rsiLengthInput)
down = ta.rma(-math.min(ta.change(rsiSourceInput), 0), rsiLengthInput)
RSI = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))


//  AO
AO = ta.sma((high + low) / 2, 5) - ta.sma((high + low) / 2, 34)
crossaosell = AO < AO[1] and AO[1] < AO[2] and AO[2] > AO[3]  and ta.lowest(low,3)

// Uptrend sma
len1 = input.int(5, minval=1)
len2 = input.int(10, minval=1)
len3 = input.int(20, minval=1)
src = input(close)

out1 = ta.sma(src, len1)
out2 = ta.sma(src, len2)
out3 = ta.sma(src, len3)



// Timeframe 
macdl60 = request.security(syminfo.tickerid, "60", signal_line,lookahead = barmerge.lookahead_on)
ao = request.security(syminfo.tickerid, "60", AO,lookahead = barmerge.lookahead_on)
rsi = request.security(syminfo.tickerid, "60", RSI,lookahead = barmerge.lookahead_on)
good = request.security(syminfo.tickerid, "60", mg,lookahead = barmerge.lookahead_on)
bad = request.security(syminfo.tickerid, "60", crossaosell,lookahead = barmerge.lookahead_on)

ma1 = request.security(syminfo.tickerid, "D", out1,lookahead = barmerge.lookahead_on)
ma2 = request.security(syminfo.tickerid, "D", out2, lookahead = barmerge.lookahead_on)
ma3 = request.security(syminfo.tickerid, "D", out3, lookahead = barmerge.lookahead_on)






// Kriteria BUY and SELL
uptrend1 =  request.security(syminfo.tickerid, "D", close,lookahead = barmerge.lookahead_on) > ma1 and ma1 > ma3 and ma2 > ma3
uptrend2 = ta.lowest(ma1,12) > ta.lowest(ma3,12) and ta.lowest(ma2,12) > ta.lowest(ma3,12) 


 

// Triger BUY and SELL 
cross1 = ao > ao[1] and ao[1] < ao[2] and ao > 0 and good and rsi >= 60 and uptrend1
cross2 = ao > 0 and ao[1] < 0 and good and rsi >=50 and uptrend1
cross3 =  ao > 0 and ao[1] < 0 and not good and uptrend2 and uptrend1
cross4 =  ao > ao[1] and ao[1] > ao[2] and ao[2] < ao[3] and ao[3] < ao[4]  and not good and uptrend2 and uptrend1

s1 = ao < ao[1] and ao[1] < ao[2] and ao[2] < ao[3] and ao > 0 and rsi < 50 and request.security(syminfo.tickerid, "D", close,lookahead = barmerge.lookahead_on) < ma1
s2 =  ao < 0 and ao < ao[2] and rsi < 50 and request.security(syminfo.tickerid, "D", close,lookahead = barmerge.lookahead_on) < ma1 

// Variabel Buy dan Sell
buySignal = false
sellSignal = false

// Syarat masuk Buy
buyCondition =  cross1 or cross2 or cross3 or cross4
if buyCondition
    buySignal := true

// Syarat masuk Sell
sellCondition = s1 or s2
if sellCondition
    sellSignal := true

// Reset sinyal jika ada sinyal berulang
if buySignal and sellSignal
    sellSignal := false
if sellSignal and buySignal
    buySignal := false

// Logika perdagangan
if buySignal
    strategy.entry("Buy", strategy.long, comment = "BUY")
if sellSignal
    strategy.close("Buy")


plotshape(cross1,title = "Stefkuy1", style = shape.labelup, location = location.belowbar, color = color.green,text = "1", textcolor = color.white,size = size.small)
plotshape(cross2,title = "Stefkuy2", style = shape.labelup, location = location.belowbar, color = color.green, text = "2", textcolor= color.white, size = size.small)
plotshape(cross3,title = "StefVan1", style = shape.labelup, location = location.belowbar, color = color.rgb(0, 153, 255), text = "3", textcolor= color.white,size = size.small)
plotshape(cross4,title = "StefVan2", style = shape.labelup, location = location.belowbar, color = color.rgb(0, 153, 255), text = "4", textcolor= color.white,size = size.small)


Plus de