Les ressources ont été chargées... Je charge...

Stratégie de négociation d'apprentissage automatique

Auteur:ChaoZhang est là., Date: 2024-01-29 11:20:42 Je vous en prie.
Les étiquettes:

img

Résumé

Cette stratégie utilise des méthodes d'apprentissage automatique pour mettre en œuvre une stratégie de trading automatisée prête à l'emploi.

Principe de stratégie

Cette stratégie repose principalement sur les points clés suivants:

  1. Utiliser la moyenne mobile de Hull pour déterminer la direction de la tendance du marché
  2. Utiliser l' EMA pour juger des tendances à court et moyen terme
  3. Utilisez le canal du corps de la bougie pour localiser les niveaux de support/résistance clés
  4. Prendre des décisions basées sur le croisement entre les prix d'ouverture et de clôture à partir de plusieurs échéanciers

Plus précisément, la stratégie tracera le Hull MA, l'EMA à 13 périodes et l'EMA à 21 périodes. Jugant des directions de tendance à court et moyen terme en fonction du statut long et court des EMA. Combiné avec Hull MA pour déterminer les tendances de cycle plus long. Cela fournit des conseils sur la direction générale des signaux de trading ultérieurs.

Avant d'ajuster les positions, la stratégie se réfère aux prix les plus élevés et les plus bas du canal de l'entité correspondant aux niveaux de support et de résistance.

Enfin, la stratégie invoque les prix d'ouverture et de fermeture de 60 périodes. Lorsque le prix de fermeture dépasse le prix d'ouverture, un signal d'achat est généré. Lorsqu'il dépasse le prix d'ouverture, un signal de vente est généré. Cela complète toute la logique de négociation.

Analyse des avantages

Le plus grand avantage de cette stratégie est qu'elle combine l'apprentissage automatique et les indicateurs d'analyse technique pour obtenir une solution de trading automatisée logique, réglable et facile à utiliser.

  1. Une combinaison multi-indicateurs améliore la précision du signal

    La stratégie ne repose pas uniquement sur un ou deux indicateurs, mais prend en compte de multiples facteurs tels que les tendances, le support/résistance et les percées de prix.

  2. Réglage des paramètres

    Les durées des périodes Hull MA, EMA, ouvertes/close crossover peuvent être ajustées à l'aide de paramètres, ce qui rend la stratégie adaptable à différents environnements de marché.

  3. Signaux de négociation automatisés

    Les signaux de négociation basés sur des indicateurs et des croisements peuvent déclencher automatiquement des achats et des ventes sans jugement manuel, ce qui réduit la difficulté.

  4. Affichage visualisé

    Les graphiques de la stratégie peuvent clairement montrer la structure du marché, l'état de la tendance et les prix clés, affichant de manière intuitive la base du jugement stratégique.

Analyse des risques

Bien que cette stratégie ait été optimisée sous de multiples aspects, certains risques potentiels subsistent:

  1. Échec du suivi des mouvements drastiques des prix

    Dans les marchés volatils, les indicateurs peuvent devenir inefficaces ou retardés, ce qui empêche la stratégie de suivre les changements de prix dans le temps.

  2. Existence d'un taux d'erreur du signal

    Les signaux de négociation basés sur des indicateurs et des modèles, plus ou moins, auront des signaux faux ou manquants.

  3. Résultats de l'évaluation

    La stratégie consistant à réaliser simultanément des positions longues et courtes comporte le risque de pertes des deux côtés si les jugements sont erronés.

  4. Risque de surentraînement

    Les paramètres trop complexes risquent d'être surajustés et le système doit être simplifié avec un nombre limité de combinaisons de paramètres.

Directions d'optimisation

Il reste encore une marge d'optimisation de cette stratégie, principalement dans les aspects suivants:

  1. Ajouter plus de signaux d'indicateur

    Outre les indicateurs existants, d'autres indicateurs auxiliaires peuvent être introduits, tels que les canaux BOLL, les indicateurs KD, etc., pour enrichir la référence du système.

  2. Appliquer des modèles d'apprentissage profond

    Utiliser des indicateurs simples comme caractéristiques pour former LSTM et autres modèles d'apprentissage en profondeur afin d'améliorer la qualité du signal.

  3. Incorporer des données fondamentales

    Ajouter des données macroéconomiques, des informations sur les politiques et d'autres facteurs fondamentaux pour optimiser les décisions à long terme.

  4. Taux de risque et de position

    Introduire des stratégies de stop loss, ajuster dynamiquement la taille des positions en fonction de la volatilité du rendement de la stratégie pour contrôler strictement les risques.

Conclusion

Cette stratégie intègre les tendances, les niveaux de support/résistance, les écarts et plusieurs autres indicateurs, en utilisant des méthodes d'apprentissage automatique pour obtenir des solutions de trading quantitatives automatisées et prêtes à l'emploi. Elle présente les avantages de combinaisons d'indicateurs diverses, de paramètres réglables et de signaux automatisés, tout en faisant face à des écarts de suivi, des erreurs de signal, des risques de mix long/short dans une certaine mesure. Il existe encore des directions pour d'autres optimisations en incorporant plus d'indicateurs et de modèles auxiliaires, en combinant des facteurs fondamentaux, en ajustant dynamiquement les positions et ainsi de suite, afin d'obtenir une performance de trading quantitative plus stable, précise et intelligente.


/*backtest
start: 2023-01-22 00:00:00
end: 2024-01-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title='Ali Jitu Abus', shorttitle='Ali_Jitu_Abis_Strategy', overlay=true, pyramiding=0, initial_capital=1000, currency=currency.USD)

//Candle body resistance Channel-----------------------------//
len = 34
src = input(close, title="Candle body resistance channel")
out = sma(src, len)
last8h = highest(close, 13)
lastl8 = lowest(close, 13)
bearish = cross(close,out) == 1 and falling(close, 1)
bullish = cross(close,out) == 1 and rising(close, 1)
channel2=input(false, title="Bar Channel On/Off")
ul2=plot(channel2?last8h:last8h==nz(last8h[1])?last8h:na, color=black, linewidth=1, style=linebr, title="Candle body resistance level top", offset=0)
ll2=plot(channel2?lastl8:lastl8==nz(lastl8[1])?lastl8:na, color=black, linewidth=1, style=linebr, title="Candle body resistance level bottom", offset=0)
//fill(ul2, ll2, color=black, transp=95, title="Candle body resistance Channel")

//-----------------Support and Resistance 
RST = input(title='Support / Resistance length:',  defval=10) 
RSTT = valuewhen(high >= highest(high, RST), high, 0)
RSTB = valuewhen(low <= lowest(low, RST), low, 0)
RT2 = plot(RSTT, color=RSTT != RSTT[1] ? na : red, linewidth=1, offset=+0)
RB2 = plot(RSTB, color=RSTB != RSTB[1] ? na : green, linewidth=1, offset=0)

//--------------------Trend colour ema------------------------------------------------// 
src0 = close, len0 = input(13, minval=1, title="EMA 1")
ema0 = ema(src0, len0)
direction = rising(ema0, 2) ? +1 : falling(ema0, 2) ? -1 : 0
plot_color = direction > 0  ? lime: direction < 0 ? red : na
plot(ema0, title="EMA", style=line, linewidth=1, color = plot_color)

//-------------------- ema 2------------------------------------------------//
src02 = close, len02 = input(21, minval=1, title="EMA 2")
ema02 = ema(src02, len02)
direction2 = rising(ema02, 2) ? +1 : falling(ema02, 2) ? -1 : 0
plot_color2 = direction2 > 0  ? lime: direction2 < 0 ? red : na
plot(ema02, title="EMA Signal 2", style=line, linewidth=1, color = plot_color2)

//=============Hull MA//
show_hma = input(false, title="Display Hull MA Set:")
hma_src = input(close, title="Hull MA's Source:")
hma_base_length = input(8, minval=1, title="Hull MA's Base Length:")
hma_length_scalar = input(5, minval=0, title="Hull MA's Length Scalar:")
hullma(src, length)=>wma(2*wma(src, length/2)-wma(src, length), round(sqrt(length)))
plot(not show_hma ? na : hullma(hma_src, hma_base_length+hma_length_scalar*6), color=black, linewidth=2, title="Hull MA")

//============ signal Generator ==================================//
Period=input('60')
ch1 = request.security(syminfo.tickerid, Period, open)
ch2 = request.security(syminfo.tickerid, Period, close)
longCondition = crossover(request.security(syminfo.tickerid, Period, close),request.security(syminfo.tickerid, Period, open))
if (longCondition)
    strategy.entry("BUY", strategy.long)
shortCondition = crossunder(request.security(syminfo.tickerid, Period, close),request.security(syminfo.tickerid, Period, open))
if (shortCondition)
    strategy.entry("SELL", strategy.short)

plot(request.security(syminfo.tickerid, Period, close), color=red, title="Period request.security Close")
plot(request.security(syminfo.tickerid, Period, open), color=green, title="Period request.security Open")

///////////////////////////////////////////////////////////////////////////////////////////

Plus de