Stratégie de trading quantitatif du cycle stochastique d'Ehlers


Date de création: 2024-01-17 16:03:30 Dernière modification: 2024-01-17 16:03:30
Copier: 0 Nombre de clics: 793
1
Suivre
1617
Abonnés

Stratégie de trading quantitatif du cycle stochastique d’Ehlers

Aperçu

La stratégie de cycle aléatoire d’Ellis est une stratégie de trading quantitative qui utilise l’indicateur de cycle aléatoire d’Ellis pour générer des signaux de négociation. La stratégie combine les avantages des indicateurs aléatoires et des indicateurs cycliques pour saisir les opportunités cycliques du marché.

Principe de stratégie

La stratégie consiste d’abord à construire un indicateur de cycle lissé, puis à construire une valeur d’indicateur aléatoire basée sur cet indicateur. La production d’un signal de transaction est déterminée en fonction du croisement de la moyenne mobile de cette valeur d’indicateur aléatoire.

Plus précisément, le calcul de l’indicateur de la période lisse est le suivant:

smooth = (src + 2 * src[1] + 2 * src[2] + src[3]) / 6

Le src est une donnée de prix entrée, comme le prix de clôture. L’indicateur combine le prix actuel et le prix des 3 périodes précédentes pour créer un signal cyclique lisse.

Sur la base de cet indicateur lissé, on peut alors calculer le cycle de l’indicateur aléatoire:

cycle := (1 - .5 * alpha) * (1 - .5 * alpha) * 
           (smooth - 2 * smooth[1] + smooth[2]) + 
           2 * (1 - alpha) * cycle[1] - 
           (1 - alpha) * (1 - alpha) * cycle[2]

La formule de calcul contient les différentiels de phase deux du signal périodique après l’aplatissement, ainsi que les valeurs des deux périodes précédentes. α est le facteur d’aplatissement, qui régule le poids de la nouvelle et de l’ancienne valeur périodique.

Finalement, on calcule une valeur aléatoire de 0 à 100 en fonction de cet indicateur de cycle, et on construit une valeur de signal en fonction de la moyenne mobile sur 10 jours de la valeur 1. Le signal de transaction est émis lorsque le signal dépasse ou dépasse la moyenne mobile de la valeur 1.

Avantages stratégiques

Cette stratégie combine les avantages de l’indicateur aléatoire et de l’indicateur cyclique. Par rapport aux stratégies de tendance telles que les moyennes mobiles simples, cette stratégie permet de mieux saisir les opportunités cycliques, ce qui donne de meilleurs résultats.

Les principaux avantages sont:

  1. L’indicateur cyclique permet d’identifier les modèles cycliques, l’indicateur aléatoire fournit le moment de la transaction xFB
  2. La conception à double indicateur permet de filtrer efficacement les faux signaux
  3. Paramètres personnalisables pour s’adapter à différents environnements de marché

Risque stratégique

La stratégie présente principalement les risques suivants:

  1. Une mauvaise configuration des paramètres peut entraîner une fréquence élevée des transactions, augmenter les frais de transaction et le coût des points de glissement
  2. L’incapacité à gérer efficacement un marché où les prix fluctuent fortement peut entraîner des pertes importantes
  3. L’indicateur cyclique est fortement dépendant de l’ajustement de la courbe, un mauvais ajustement peut générer un signal erroné

Le risque peut être contrôlé par des paramètres d’optimisation, la définition d’un point de rupture et la combinaison d’autres indicateurs de filtrage.

Orientation de l’optimisation de la stratégie

Cette stratégie peut également être optimisée dans les directions suivantes:

  1. Filtrez le signal en combinaison avec d’autres indicateurs techniques, tels que les bandes de Brin, le RSI, etc., afin de réduire les signaux erronés
  2. Adhésion à un mécanisme d’exit adaptatif pour ajuster dynamiquement les points de rupture en fonction de la volatilité du marché
  3. Optimiser automatiquement les paramètres à l’aide d’une méthode d’apprentissage automatique pour les adapter dynamiquement au marché
  4. Optimiser le taux d’utilisation des fonds et améliorer leur efficacité par le biais de l’effet de levier et de la rentabilité

Résumer

La stratégie de cycle aléatoire d’Elles utilise les avantages de l’utilisation combinée d’indicateurs aléatoires et d’indicateurs cycliques, permettant de contrôler efficacement le risque grâce à une conception de double signal, permettant d’obtenir de meilleurs rendements dans des marchés plus cycliques. En étant optimisée, la stratégie peut devenir une stratégie de trading quantitative recommandée.

Code source de la stratégie
/*backtest
start: 2024-01-09 00:00:00
end: 2024-01-16 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Ehlers Stochastic Cyber Cycle Strategy",overlay=false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 1, commission_type = strategy.commission.percent, commission_value = 0.1)
src = input(hl2, title = "Source") 
alpha = input(.07, title = "Alpha")
lag = input(9, title = "Lag")
smooth = (src + 2 * src[1] + 2 * src[2] + src[3]) / 6
len = input(8, title = "Stochastic len")
cycle = na
if na(cycle[7])
    cycle := (src - 2 * src[1] + src[2]) / 4
else
    cycle := (1 - .5 * alpha) * (1 - .5 * alpha) * (smooth - 2 * smooth[1] + smooth[2]) + 2 * (1 - alpha) * cycle[1] - (1 - alpha) * (1 - alpha) * cycle[2]

value1 = stoch(cycle, cycle, cycle, len) / 100
value2 = 2 * ((4 * value1 + 3 * value1[1] + 2 * value1[2] + value1[3]) / 10 - 0.5)

signal = value2
oppositeTrade = input(true)
barsSinceEntry = 0
barsSinceEntry := nz(barsSinceEntry[1]) + 1
if strategy.position_size == 0
    barsSinceEntry := 0
if (crossover(signal, signal[1]) and not oppositeTrade) or (oppositeTrade and crossunder(signal, signal[1]))
    strategy.entry("Long", strategy.long)
    barsSinceEntry := 0
if (crossunder(signal, signal[1]) and not oppositeTrade) or (oppositeTrade and crossover(signal, signal[1]))
    strategy.entry("Short", strategy.short)
    barsSinceEntry := 0
if strategy.openprofit < 0 and barsSinceEntry > 8
    strategy.close_all()
    barsSinceEntry := 0
    
    
plot(0, title="ZeroLine", color=gray) 
plotSrc = signal
cyclePlot = plot(plotSrc, title = "CyberCycle", color = blue)
triggerPlot = plot(plotSrc[1], title = "Trigger", color = green)
fill(cyclePlot, triggerPlot, color = plotSrc < plotSrc[1] ? red : lime, transp = 50)