Stratégie de négociation croisée TEMA

Auteur:ChaoZhang est là., Date: 12 septembre 2023 à 16h40
Les étiquettes:

Cette stratégie échange le croisement entre deux lignes TEMA de périodes différentes pour capturer les tendances à moyen terme.

La logique de la stratégie:

  1. Calculer les lignes TEMA rapides et lentes, généralement 5 et 8 périodes.

  2. Allez long quand le TEMA rapide traverse le TEMA lent.

  3. Sortie longue lorsque le TEMA rapide passe sous le TEMA lent.

  4. Option de filtrage basée sur la direction de la bougie pour éviter les transactions contre-tendance.

  5. Test de retour sur une période spécifiée pour simuler les signaux historiques.

Les avantages:

  1. TEMA filtre fortement le bruit des prix.

  2. La combinaison rapide/lente capture les tendances intermédiaires.

  3. Le filtre de direction améliore le taux de gain en évitant les entrées de contre-tendance.

Les risques:

  1. TEMA est toujours en retard, potentiellement manquant les meilleures entrées.

  2. Un réglage de paramètres pour une correspondance idéale.

  3. Difficile de maintenir les signaux sur les marchés variés.

En résumé, cette stratégie traverse les lignes TEMA pour échanger les tendances avec un filtre de bruit pour la stabilité.


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

//@version=4
strategy("Tema",overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.075)
startP = timestamp(input(2017, "Start Year"), input(12, "Start Month"), input(17, "Start Day"), 0, 0)
end   = timestamp(input(9999, "End Year"),   input(1, "End Month"),   input(1, "End Day"),   0, 0)
_testPeriod() =>
    iff(time >= startP and time <= end, true, false)

tema_length_1 = input(5, "Fast TEMA")
tema_length_2 = input(8, "Slow TEMA")
usedir       = input(true, "Use bar's direction ?" )
dirtime      = input(2,"direction bars")

tema(sec, length)=>
    tema1= ema(sec, length)
    tema2= ema(tema1, length)
    tema3= ema(tema2, length)
    tema = 3*tema1-3*tema2+tema3

tema1 = tema(hlc3, tema_length_1)
tema2 = tema(hlc3, tema_length_2)

dir=if close/close[dirtime] > 1
    1
else
    -1

plot(tema1, color=color.green, transp=50)
plot(tema2, color=color.red, transp=50)


up =  crossover(tema1, tema2) 
down = crossunder(tema1, tema2)

long_condition =  up and (usedir ? dir==1 : true) and _testPeriod()
strategy.entry('BUY', strategy.long, when=long_condition)  
 
short_condition =  down
strategy.close('BUY', when=short_condition)

Plus de