Stratégie de ligne de tendance instantanée Els


Date de création: 2023-12-20 16:51:05 Dernière modification: 2023-12-20 16:51:05
Copier: 0 Nombre de clics: 938
1
Suivre
1621
Abonnés

Stratégie de ligne de tendance instantanée Els

Aperçu

La stratégie de la ligne de tendance instantanée d’Ehlers a été proposée par John Ehlers dans son module d’analyse de contrôle des actions et des contrats à terme. Cette stratégie utilise des indicateurs techniques pour identifier la tendance instantanée d’une action ou d’un contrat à terme et pour ouvrir une position lorsque la tendance est inversée.

Principe de stratégie

Le cœur de la stratégie est de calculer une ligne de tendance instantanée. La formule de calcul de la ligne de tendance instantanée est la suivante:

it := (a-((a*a)/4.0))*src+0.5*a*a*src[1]-(a-0.75*a*a)*src[2]+2*(1-a )*it[1]-(1-a )*(1-a )*it[2]

où src représente le prix, a est un facteur d’aplatissement, la valeur par défaut est de 0,07. La formule est un filtre à deux vitesses, capable d’aplatir le prix et de générer une tendance.

L’autre indicateur clé est le décalage, dont la formule est la suivante:

lag = 2.0 * it - nz(it[2])

Cette ligne est en retard sur la ligne IT d’un cycle. Lorsque le prix est en retard, il représente un renversement de tendance, faisant plus; lorsque le prix est en retard, il représente un renversement de tendance, faisant moins.

En outre, la stratégie prévoit un coupon stop-loss pour contrôler les risques.

Analyse des avantages

Cette stratégie présente les avantages suivants:

  1. L’utilisation de la technologie de l’information pour identifier les tendances permet de filtrer efficacement le bruit du marché et d’améliorer la qualité du signal.
  2. Filtre à deux étages, optimisation des paramètres, large et réglable
  3. Génération de signaux de négociation en combinaison avec une ligne de retard pour éviter la reprise de la position courte dans la tendance
  4. Définition du risque de contrôle de stop loss unique, avec pré-réglage du stop loss ratio
  5. La structure du code est claire, facile à comprendre et à modifier

Analyse des risques

Cette stratégie comporte aussi des risques:

  1. Des paramètres incorrects pour les lignes IT et les lignes en retard peuvent entraîner des signaux erronés
  2. Une mauvaise configuration du point d’arrêt peut entraîner un arrêt prématuré ou excessif
  3. La fréquence des transactions peut être plus élevée, les coûts de transaction affectent les bénéfices
  4. Les effets de l’effet de magnification sur le rendement

Ces risques peuvent être atténués par les moyens suivants:

  1. Paramètres d’optimisation pour les algorithmes d’apprentissage automatique
  2. Réglage du point d’arrêt adaptatif
  3. Réduire la fréquence des transactions en ajustant le nombre de positions ouvertes.
  4. Définition d’un arrêt de la période de tenue

Direction d’optimisation

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

  1. Tester l’influence des différents paramètres du filtre sur les résultats pour trouver le paramètre optimal
  2. Essayez de filtrer les signaux de trading en les combinant avec d’autres indicateurs pour améliorer la qualité des signaux
  3. Optimisation de la logique d’ouverture de position et augmentation de la position pendant l’accélération de la tendance
  4. définir une stratégie de stop-loss adaptative, en ajustant le stop-loss en fonction de la volatilité du marché
  5. Effectuer une analyse de séquence temporelle pour déterminer l’influence du temps et de la période sur les résultats

en conclusion

Dans l’ensemble, la stratégie de ligne de tendance instantanée d’Elles utilise des indicateurs techniques pour identifier les tendances en temps réel des actions/futures et ouvrir des positions lorsque les tendances sont inversées. Elle présente des avantages tels qu’un filtrage efficace du bruit, une réglabilité à haute paramétrie, une logique de génération de signal claire et un contrôle du risque intégré.

Code source de la stratégie
/*backtest
start: 2022-12-13 00:00:00
end: 2023-12-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Ehlers Instantaneous Trendline Strategy", shorttitle = "Ehlers Instantaneous Trendline Strategy", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 1, backtest_fill_limits_assumption = 1)
src = input(hl2, title="Source")
a = input(0.07, title="Alpha", step=0.01) 
fr = input(false, title="Fill Trend Region")
it = na
if (na(it[2]) or na(it[1]))
    it := (src + 2 * src[1] + src[2]) / 4.0
else
    it := (a-((a*a)/4.0))*src+0.5*a*a*src[1]-(a-0.75*a*a)*src[2]+2*(1-a )*it[1]-(1-a )*(1-a )*it[2]
lag = 2.0 * it - nz(it[2])
rngFrac = input(0.35)
revPct = input(0.015)
stopType = input(title="Stop type", defval = "stop-order", options = ["stop-order", "market-order", "None"])

diff = input(0.5, title = "Spread")
LongPrice(p) =>
    LongPrice = diff == 0 ? p : floor(p / diff) * diff

ShortPrice(p) =>
    ShortPrice = diff == 0 ? p : ceil(p / diff) * diff

strategy.cancel_all()
reverseTrade = false
if stopType == "market-order" 
    if  strategy.position_size > 0 and close < strategy.position_avg_price * (1 - revPct) 
        strategy.order("StopLoss open short", strategy.short, 2 * strategy.position_size, limit = close - 2 * diff)
        reverseTrade := true
    if  strategy.position_size < 0 and close > strategy.position_avg_price * (1 + revPct) 
        strategy.order("StopLoss open long", strategy.long, -2 * strategy.position_size, limit = close + 2 * diff)
        reverseTrade := true
    
if lag > it and not reverseTrade
    price = LongPrice(max(close - (high - low) * rngFrac, low))
    if strategy.position_size <= 0
        strategy.order("Open long", strategy.long, strategy.equity / price - strategy.position_size, limit = price)
        if stopType == "stop-order"
            strategy.order("StopLoss open long", strategy.short, 2 * strategy.equity / price, stop = ShortPrice(price * (1 - revPct)))
    else
        if stopType == "stop-order"
            strategy.order("StopLoss open short", strategy.short, 2 * strategy.position_size, stop = ShortPrice(strategy.position_avg_price * (1 - revPct)))
if lag < it and not reverseTrade
    price = ShortPrice(min(close - (high - low) * rngFrac, high))
    if strategy.position_size >= 0
        strategy.order("Open short", strategy.short, strategy.equity / price + strategy.position_size, limit = price)
        if stopType == "stop-order"
            strategy.order("StopLoss open short", strategy.long, 2 * strategy.equity / price, stop = LongPrice(price * (1 + revPct)))
    else
        if stopType == "stop-order"
            strategy.order("StopLoss open long", strategy.long, -2 * strategy.position_size, stop = LongPrice(strategy.position_avg_price * (1 + revPct)))


itPlot=plot(it, color=red, linewidth=1, title="Trend")
lagPlot=plot(lag, color=blue, linewidth=1, title="Trigger")
fill(itPlot, lagPlot, it < lag ? green : red,  transp=70)

// === Backtesting Dates ===
testPeriodSwitch = input(false, "Custom Backtesting Dates")
testStartYear = input(2018, "Backtest Start Year")
testStartMonth = input(9, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testStartHour = input(0, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0)
testStopYear = input(2018, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(14, "Backtest Stop Day")
testStopHour = input(14, "Backtest Stop Hour")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStopHour,0)
testPeriod() =>
    time >= testPeriodStart and time <= testPeriodStop ? true : false
isPeriod = testPeriodSwitch == true ? testPeriod() : true
// === /END
if not isPeriod
    strategy.cancel_all()
    strategy.close_all()