Stratégie de trading quantitatif avec graphique en nuage Octa-EMA et Ichimoku


Date de création: 2023-12-11 14:52:05 Dernière modification: 2023-12-11 14:52:05
Copier: 1 Nombre de clics: 737
1
Suivre
1621
Abonnés

Stratégie de trading quantitatif avec graphique en nuage Octa-EMA et Ichimoku

Aperçu

La stratégie utilise des moyennes mobiles indicielles de huit périodes différentes avec des diagrammes de nuages d’Ichimoku comme signal de trading principal, et peut fonctionner efficacement dans des cadres horaires de 1 heure, 4 heures ou jour.

Principe de stratégie

Le principe de base de cette stratégie repose sur les deux éléments suivants:

  1. 8 indices des moyennes mobiles (Octa-EMA)

La stratégie utilise 8 EMA de différentes périodes, respectivement les lignes 5, 11, 15, 18, 21, 24, 28 et 34. Ces 8 EMA sont appelées piles Octa-EMA. Lorsque les EMA de périodes plus courtes sont au-dessus des EMA de périodes plus longues, elles indiquent une tendance à plusieurs têtes, et vice versa.

  1. Indicateur des nuages d’Ichimoku

Le diagramme Ichimoku contient des lignes de conversion, des lignes de référence, des lignes de retard et des lignes de pointe A/B. Le diagramme Ichimoku détermine principalement la direction de la tendance et fournit une résistance de soutien.

Les signaux de négociation de cette stratégie proviennent des deux composantes ci-dessus. Un signal d’achat est généré lorsque les 8 EMA sont toutes en tête (le short EMA est au-dessus du long EMA) et que le prix est supérieur au diagramme nuageux d’Ichimoku. Un signal de vente est généré lorsque l’ordre des EMA est transformé en tête vide (le long EMA est au-dessous du short EMA).

Analyse des forces stratégiques

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

  1. Le filtrage à double indice réduit les faux signaux
  2. Les cartes de nuages Ichimoku permettent de déterminer la direction de la tendance et d’éviter les échanges à contre-courant
  3. Article 8 Tendances et précisions dans le jugement des portfolios croisés de l’EMA
  4. Fonctionne sur plusieurs périodes
  5. L’optimisation des paramètres est large et peut être personnalisée pour différentes variétés

Analyse stratégique des risques

Cette stratégie comporte aussi des risques:

  1. Il est possible de produire un plus grand nombre de signaux de tête vide en cas de secousse.
  2. Les conditions d’achat sont plus strictes, il est possible de rater certains points d’achat
  3. Peut être invalidé lorsque la tendance à court terme est incompatible avec la tendance à moyen et long terme
  4. Une mauvaise configuration des paramètres EMA peut entraîner un retard de signal

Pour les risques ci-dessus, il est possible de réduire le risque en ajustant les paramètres de l’EMA ou en optimisant les conditions d’admission, ou en combinant d’autres indicateurs comme auxiliaires.

Orientation de l’optimisation de la stratégie

Cette stratégie peut être optimisée dans les domaines suivants:

  1. Ajustez les paramètres EMA pour optimiser le cycle correspondant
  2. Augmentation de l’indicateur de jugement de la plus-value moyenne afin d’assurer l’exactitude du jugement de la tendance
  3. Combiné avec d’autres indicateurs tels que MACD, KDJ, optimiser le moment d’entrée
  4. Augmentation des stratégies de stop-loss et de contrôle des pertes uniques
  5. Tester l’efficacité des paramètres de différentes variétés pour trouver la meilleure combinaison de paramètres
  6. Les algorithmes d’apprentissage automatique sont utilisés pour rechercher automatiquement les paramètres de préférence.

Résumer

Octa-EMA est une stratégie de suivi de tendance plus stable et plus fiable que la stratégie de trading quantifiée dans le cloud d’Ichimoku. Elle utilise à la fois la combinaison de tendances de jugement d’EMA et le signal de filtrage d’Ichimoku, ce qui permet d’obtenir un taux d’erreur inférieur après optimisation des paramètres. La stratégie peut être largement utilisée dans des variétés telles que les indices boursiers, les devises et les métaux précieux, et peut également fonctionner sur plusieurs périodes.

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