Stratégie combinée de l'inversion de tendance et de l'indicateur principal d'Ehlers

Auteur:ChaoZhang est là., Date: 2023-11-07 16:10:26 Je vous en prie.
Les étiquettes:

img

Résumé

Cette stratégie combine une stratégie d'inversion de tendance et une stratégie d'indicateur leader d'Ehlers pour générer des signaux de trading plus fiables.

La logique de la stratégie

Stratégie d'inversion de tendance

Cette stratégie est tirée du livre How I Tripled My Money in the Futures Market d'Ulf Jensen, page 183. C'est une stratégie de type inversion. Elle est longue lorsque la clôture est supérieure à la clôture précédente pendant 2 jours consécutifs et que la ligne lente stochastique de 9 jours est inférieure à 50. Elle est courte lorsque la clôture est inférieure à la clôture précédente pendant 2 jours consécutifs et que la ligne rapide stochastique de 9 jours est supérieure à 50.

Stratégie d'indicateur de référence d'Ehlers

Cette stratégie trace un prix synthétique détrendu quotidien (DSP) et un indicateur de référence quotidien d'Ehlers (ELI) en utilisant des données intraday. DSP capture le cycle de prix dominant et est calculé en soustrayant un filtre Butterworth à 3 pôles d'un filtre à 2 pôles. ELI donne une indication avancée des points tournants cycliques et est calculé en soustrayant la moyenne mobile simple de DSP du DSP lui-même. Les signaux d'achat et de vente sont générés lorsque ELI traverse au-dessus ou en dessous de DSP.

Analyse des avantages

Le plus grand avantage de cette stratégie combinée est la combinaison de l'identification de l'inversion de tendance et de la détection du tournant cyclique pour des signaux plus fiables.

Un autre avantage est la flexibilité dans l'ajustement des paramètres. Les paramètres de l'indicateur stochastique peuvent être ajustés en fonction des conditions du marché.

Analyse des risques

Le plus grand risque de cette stratégie est de manquer des tendances persistantes. Puisque la stratégie attend que des signaux d'inversion entrent, elle peut manquer de forts mouvements de tendance précoces. Les signaux d'inversion peuvent également s'avérer être de fausses ruptures entraînant un piégeage.

Les solutions consistent à ajuster les paramètres afin de raccourcir la période de détection de l'inversion pour une capture rapide de l'inversion de tendance.

Directions d'optimisation

La stratégie peut être améliorée dans les domaines suivants:

  1. Mettre en place un stop loss pour contrôler les pertes d'une seule transaction.

  2. Optimiser les paramètres pour ajuster les périodes de signal d'inversion pour différents environnements de marché.

  3. Ajouter d'autres filtres d'indicateur pour améliorer la qualité du signal et réduire les faux signaux.

  4. Ajouter des modules de dimensionnement des positions et de gestion des risques.

  5. Testez les paramètres sur différents produits pour trouver des ajustements optimaux.

  6. Ajouter des modules d'apprentissage automatique pour le réglage adaptatif des paramètres.

Résumé

La stratégie combine l'inversion de tendance et la détection du tournant cyclique pour une entrée sur le marché plus fiable. Le plus grand avantage est la haute qualité et la flexibilité du signal. Le principal risque est le manque de tendances précoces, qui peuvent être atténuées via le réglage des paramètres et le stop loss. Les améliorations futures peuvent se concentrer sur le stop loss, l'optimisation des paramètres, le filtrage des signaux, etc. pour rendre la stratégie robuste dans tous les environnements du marché.


/*backtest
start: 2023-10-07 00:00:00
end: 2023-11-06 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 26/11/2019
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The 
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close 
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. 
// The strategy sells at market, if close price is lower than the previous close price 
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Second strategy
// This Indicator plots a single
// Daily DSP (Detrended Synthetic Price) and a Daily ELI (Ehlers Leading
// Indicator) using intraday data.
// Detrended Synthetic Price is a function that is in phase with the dominant
// cycle of real price data. This one is computed by subtracting a 3 pole Butterworth
// filter from a 2 Pole Butterworth filter. Ehlers Leading Indicator gives an advanced
// indication of a cyclic turning point. It is computed by subtracting the simple
// moving average of the detrended synthetic price from the detrended synthetic price.
// Buy and Sell signals arise when the ELI indicator crosses over or under the detrended
// synthetic price.
// See "MESA and Trading Market Cycles" by John Ehlers pages 64 - 70. 
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
    vFast = sma(stoch(close, high, low, Length), KSmoothing) 
    vSlow = sma(vFast, DLength)
    pos = 0.0
    pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
	         iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) 
	pos

D_ELI(Length) =>
    pos = 0.0
    xHL2 = security(syminfo.tickerid, 'D', hl2)
    xEMA1 = ema(xHL2, Length)
    xEMA2 = ema(xHL2, 2 * Length)
    xEMA1_EMA2 = xEMA1 - xEMA2
    xResultEMA = ema(xEMA1_EMA2, Length)
    nRes = xEMA1_EMA2 - xResultEMA
    pos:= iff(nRes > 0, 1,
	       iff(nRes < 0, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & D_ELI (Ehlers Leading Indicator)", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
LengthELI = input(7, minval=1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posD_ELI = D_ELI(LengthELI)
pos = iff(posReversal123 == 1 and posD_ELI == 1 , 1,
	   iff(posReversal123 == -1 and posD_ELI == -1, -1, 0)) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1 , 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )

Plus de