Stratégie de négociation quantitative dans les nuages Octa-EMA et Ichimoku

Auteur:ChaoZhang est là., Date: 2023-12-11 14:52:05 Je vous en prie.
Les étiquettes:

img

Résumé

Cette stratégie utilise 8 moyennes mobiles exponentielles (MEI) de différentes périodes et le nuage Ichimoku comme principaux signaux de trading, qui peuvent fonctionner efficacement dans des délais horaires, de 4 heures ou quotidiens.

Principes de stratégie

Les principes fondamentaux de cette stratégie reposent sur les deux éléments suivants:

  1. 8 Moyennes mobiles exponentielles (Octa-EMA)

    Cette stratégie utilise 8 EMA avec des périodes différentes, en particulier 5 jours, 11 jours, 15 jours, 18 jours, 21 jours, 24 jours, 28 jours et 34 jours. Ces 8 EMA sont appelées Octa-EMA. Lorsque les EMA à plus courte période sont au-dessus des EMA à plus longue période, cela indique une tendance haussière, et vice versa pour une tendance à la baisse.

  2. Le nuage Ichimoku

    Le nuage Ichimoku contient la ligne de conversion, la ligne de base, l'étendue de retard et les étendues principales A / B. Le nuage juge principalement la direction de la tendance et fournit un support / résistance. Lorsque le prix est au-dessus du nuage, il indique une tendance haussière, et quand il est en dessous du nuage, il indique une tendance baissière.

Les signaux de trading pour cette stratégie proviennent de la combinaison des deux composantes ci-dessus. Un signal d'achat est généré lorsque les 8 EMA sont dans un arrangement de tendance haussière (EMA plus courte au-dessus de l'EMA plus longue) et que le prix est au-dessus du nuage Ichimoku. Un signal de vente est généré lorsque l'arrangement EMA se retourne vers une tendance baissière (EMA plus courte traversant au-dessous de l'EMA plus longue).

Analyse des avantages

Les principaux avantages de cette stratégie sont les suivants:

  1. Réduit les faux signaux grâce au double filtre d'indicateur
  2. Le nuage Ichimoku juge la direction de la tendance, évitant les transactions contre-tendance
  3. 8 croisements EMA se combinent pour déterminer les tendances avec une plus grande précision
  4. Peut être exécuté sur plusieurs délais
  5. Grand espace de réglage de paramètres, peut être personnalisé pour différents produits

Analyse des risques

Cette stratégie comporte également des risques:

  1. Peut générer plus de faux signaux de vente sur les marchés à fourchette
  2. Des conditions d'achat strictes peuvent faire perdre certaines opportunités d'achat
  3. Peut échouer lorsque les tendances à court terme et à moyen terme sont en conflit
  4. Un mauvais réglage des paramètres EMA peut entraîner un retard de signal

Pour faire face à ces risques, les paramètres peuvent être ajustés ou les conditions d'entrée optimisées afin de réduire le risque.

Directions d'optimisation

Cette stratégie peut être optimisée sous plusieurs aspects:

  1. Ajustez les paramètres de l'EMA pour trouver les périodes optimales
  2. Ajout d'indicateurs déterminant la tendance afin d'assurer un jugement précis de la tendance
  3. Incorporer des indicateurs supplémentaires tels que MACD, KDJ pour améliorer le calendrier d'entrée
  4. Ajouter le stop loss/take profit au contrôle par risque de transaction
  5. Paramètres d'essai pour différents produits afin de déterminer le meilleur ajustement
  6. Utiliser l'apprentissage automatique pour optimiser automatiquement les paramètres

Conclusion

Dans l'ensemble, la stratégie de nuage Octa-EMA et Ichimoku est un système de suivi des tendances relativement stable et fiable. Elle utilise des croisements EMA pour déterminer les tendances et Ichimoku pour filtrer les signaux, fournissant de faibles faux signaux lorsqu'elle est optimisée.


/*backtest
start: 2022-12-04 00:00:00
end: 2023-12-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//Fukuiz

strategy(title='Fukuiz Octa-EMA + Ichimoku', shorttitle='Fuku octa strategy', overlay=true, process_orders_on_close=true, 
     default_qty_type= strategy.cash , default_qty_value=1000, currency=currency.USD, initial_capital=10000 ,commission_type = strategy.commission.percent,commission_value=0.25)


//OCTA EMA ##################################################


// Functions
f_emaRibbon(_src, _e1, _e2, _e3, _e4, _e5, _e6, _e7, _e8) =>
    _ema1 = ta.ema(_src, _e1)
    _ema2 = ta.ema(_src, _e2)
    _ema3 = ta.ema(_src, _e3)
    _ema4 = ta.ema(_src, _e4)
    _ema5 = ta.ema(_src, _e5)
    _ema6 = ta.ema(_src, _e6)
    _ema7 = ta.ema(_src, _e7)
    _ema8 = ta.ema(_src, _e8)
    [_ema1, _ema2, _ema3, _ema4, _ema5, _ema6, _ema7, _ema8]

showRibbon = input(true, 'Show Ribbon (EMA)')
ema1Len = input(5, title='EMA 1 Length')
ema2Len = input(11, title='EMA 2 Length')
ema3Len = input(15, title='EMA 3 Length')
ema4Len = input(18, title='EMA 4 Length')
ema5Len = input(21, title='EMA 5 Length')
ema6Len = input(24, title='EMA 6 Length')
ema7Len = input(28, title='EMA 7 Length')
ema8Len = input(34, title='EMA 8 Length')

[ema1, ema2, ema3, ema4, ema5, ema6, ema7, ema8] = f_emaRibbon(close, ema1Len, ema2Len, ema3Len, ema4Len, ema5Len, ema6Len, ema7Len, ema8Len)

//Plot

ribbonDir = ema8 < ema2
p1 = plot(ema1, color=showRibbon ? ribbonDir ? #1573d4 : color.new(#5d606b, 15) : na, linewidth=2, title='EMA 1')
p2 = plot(ema2, color=showRibbon ? ribbonDir ? #3096ff : color.new(#5d606b, 15) : na, linewidth=2, title='EMA 2')
plot(ema3, color=showRibbon ? ribbonDir ? #57abff : color.new(#5d606b, 15) : na, linewidth=2, title='EMA 3')
plot(ema4, color=showRibbon ? ribbonDir ? #85c2ff : color.new(#5d606b, 15) : na, linewidth=2, title='EMA 4')
plot(ema5, color=showRibbon ? ribbonDir ? #9bcdff : color.new(#5d606b, 30) : na, linewidth=2, title='EMA 5')
plot(ema6, color=showRibbon ? ribbonDir ? #b3d9ff : color.new(#5d606b, 30) : na, linewidth=2, title='EMA 6')
plot(ema7, color=showRibbon ? ribbonDir ? #c9e5ff : color.new(#5d606b, 30) : na, linewidth=2, title='EMA 7')
p8 = plot(ema8, color=showRibbon ? ribbonDir ? #dfecfb : color.new(#5d606b, 30) : na, linewidth=2, title='EMA 8')
fill(p1, p2, color.new(#1573d4, 85))
fill(p2, p8, color.new(#1573d4, 85))

//ichimoku##################################################

//color
colorblue = #3300CC
colorred = #993300
colorwhite = #FFFFFF
colorgreen = #CCCC33
colorpink = #CC6699
colorpurple = #6633FF

//switch
switch1 = input(false, title='Chikou')
switch2 = input(false, title='Tenkan')
switch3 = input(false, title='Kijun')

middleDonchian(Length) =>
    lower = ta.lowest(Length)
    upper = ta.highest(Length)
    math.avg(upper, lower)

//Functions
conversionPeriods = input.int(9, minval=1)
basePeriods = input.int(26, minval=1)
laggingSpan2Periods = input.int(52, minval=1)
displacement = input.int(26, minval=1)
Tenkan = middleDonchian(conversionPeriods)
Kijun = middleDonchian(basePeriods)
xChikou = close
SenkouA = middleDonchian(laggingSpan2Periods)
SenkouB = (Tenkan[basePeriods] + Kijun[basePeriods]) / 2

//Plot
A = plot(SenkouA[displacement], color=color.new(colorpurple, 0), title='SenkouA')
B = plot(SenkouB, color=color.new(colorgreen, 0), title='SenkouB')
plot(switch1 ? xChikou : na, color=color.new(colorpink, 0), title='Chikou', offset=-displacement)
plot(switch2 ? Tenkan : na, color=color.new(colorred, 0), title='Tenkan')
plot(switch3 ? Kijun : na, color=color.new(colorblue, 0), title='Kijun')
fill(A, B, color=color.new(colorgreen, 90), title='Ichimoku Cloud')

//Buy and Sell signals
fukuiz = math.avg(ema2, ema8)
white = ema2 > ema8
gray = ema2 < ema8
buycond = white and white[1] == 0
sellcond = gray and gray[1] == 0
bullish = ta.barssince(buycond) < ta.barssince(sellcond)
bearish = ta.barssince(sellcond) < ta.barssince(buycond)
buy = bearish[1] and buycond and fukuiz > SenkouA[displacement] and fukuiz > SenkouB
sell = bullish[1] and sellcond and fukuiz > SenkouA[displacement] and fukuiz > SenkouB
sell2=ema2 < ema8
buy2 = white and fukuiz > SenkouA[displacement] and fukuiz > SenkouB

//$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
//Back test

startYear = input.int(defval=2017, title='Start Year', minval=2000, maxval=3000)
startMonth = input.int(defval=1, title='Start Month', minval=1, maxval=12)
startDay = input.int(defval=1, title='Start Day', minval=1, maxval=31)
endYear = input.int(defval=2023, title='End Year', minval=2000 ,maxval=3000)
endMonth = input.int(defval=12, title='End Month', minval=1, maxval=12)
endDay = input.int(defval=31, title='End Day', minval=1, maxval=31)

start = timestamp(startYear, startMonth, startDay, 00, 00)
end = timestamp(endYear, endMonth, endDay, 23, 59)
period() => time >= start and time <= end ? true : false

if buy2 
    strategy.entry(id='long', direction=strategy.long, when=period(), comment='BUY')

if sell2
    strategy.close(id='long', when=period(), comment='SELL')





Plus de