Améliorer les stratégies de suivi des vagues


Date de création: 2024-01-31 15:35:41 Dernière modification: 2024-01-31 15:35:41
Copier: 0 Nombre de clics: 669
1
Suivre
1617
Abonnés

Améliorer les stratégies de suivi des vagues

Résumé: Il s’agit d’une stratégie de suivi de la tendance à l’aide d’un indicateur d’onde. Elle obtient une ligne d’onde en calculant une moyenne mobile indicielle du prix moyen et une moyenne mobile de l’écart de prix absolu. La stratégie génère un signal de transaction en surveillant l’intersection de la ligne d’onde avec la zone de survente.

Le principe de la stratégie:

  1. Calculer le prix moyen ap = (le prix le plus élevé + le prix le plus bas + le prix de clôture) / 3

  2. Calculer l’EMA de ap pour n1 cycles et obtenir esa

  3. Calculez l’EMA de n1 cycles de la différence absolue entre ap et esa, et obtenez d

  4. Calcul de la ligne de vague: ci = {ap-esa) / {0.015}*d)

  5. Calculer l’EMA pour n2 périodes ci, et obtenir la ligne d’onde finale tci, soit wt1

  6. Calculer la SMA de 4 cycles de wT1 pour obtenir wT2

  7. Les lignes horizontales obLevel1/2 et osLevel1/2 pour les zones de survente et de surachat

  8. Un signal d’achat est généré lorsque wt1 traverse un fil obLevel2; un signal de vente est généré lorsque wt1 traverse un fil osLevel2

  9. Ajouter le filtrage en ligne moyenne emaFilter et le filtrage volumeFilter comme conditions de filtrage pour éviter les faux signaux

  10. Régler le stop loss ratio après l’entrée et sortir de la position

Analyse des avantages:

  1. La ligne d’onde gère mieux la conversion multi-espace et capture efficacement les tendances

  2. Une meilleure fiabilité combinée à un double filtrage de la moyenne et du volume

  3. Le calcul de plusieurs ensembles de paramètres évite les contraintes d’un seul indicateur

  4. La mise en place d’un stop loss permet de verrouiller une partie des bénéfices et de contrôler efficacement les risques

Risques et défauts:

  1. Le choix des paramètres peut entraîner une mauvaise performance ou une suradaptation dans certains cas

  2. Il n’y a pas de directives claires sur la sélection des paramètres optimaux, il faut faire des essais.

  3. Les conditions plus larges du marché ne sont pas incluses dans le signal

  4. Risque d’effets d’entraînement si utilisé dans des marchés à portée limitée ou fluctuants

  5. Le manque de règles de sortie en dehors du gain/perte

Les directions d’optimisation

  1. Test des ensembles de paramètres sur différentes périodes et actifs pour trouver des valeurs optimales

  2. Combination avec un indicateur de volatilité pour éviter les signaux en période de faible volatilité

  3. Ajout d’indicateurs complémentaires tels que RSI pour améliorer la précision du signal

  4. Construire un modèle d’apprentissage automatique pour trouver les paramètres optimaux pour un actif spécifique

  5. Exit renforcé par l’ajout d’un stop-loss de suivi ou d’une sortie basée sur un événement d’expansion volatile soudaine

Résumé:

Il s’agit d’une stratégie qui combine une conception de lignes d’ondes et d’indicateurs auxiliaires. Elle utilise les lignes d’ondes pour identifier efficacement les conversions de tendance, en plus de la ligne moyenne et du filtrage du volume de transactions pour éviter les faux signaux, et peut obtenir la plupart des tendances de la ligne moyenne et longue.

Code source de la stratégie
/*backtest
start: 2023-12-31 00:00:00
end: 2024-01-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Bush Strategy test", shorttitle="Nique Audi", overlay=false)

// Paramètres
n1 = input(10, title="Channel Length")
n2 = input(21, title="Average Length")
obLevel1 = input(60, title="Over Bought Level 1")
obLevel2 = input(53, title="Over Bought Level 2")
osLevel1 = input(-65, title="Over Sold Level 1")
osLevel2 = input(-60, title="Over Sold Level 2")
takeProfitPercentage = input(1, title="Take Profit (%)")
stopLossPercentage = input(0.50, title="Stop Loss (%)")

// Calculs
ap = hlc3 
esa = ta.ema(ap, n1)
d = ta.ema(math.abs(ap - esa), n1)
ci = (ap - esa) / (0.015 * d)
tci = ta.ema(ci, n2)

wt1 = tci
wt2 = ta.sma(wt1, 4)

// Tracé des lignes
plot(0, color=color.gray)
plot(obLevel1, color=color.red)
plot(osLevel1, color=color.green)
plot(obLevel2, color=color.red, style=plot.style_line)
plot(osLevel2, color=color.green, style=plot.style_line)

plot(wt1, color=color.green)
plot(wt2, color=color.red, style=plot.style_line)

// Tracé de la différence entre wt1 et wt2 en bleu
hline(0, "Zero Line", color=color.gray)

// Conditions d'entrée long et court
longCondition = ta.crossover(wt1, obLevel2)
shortCondition = ta.crossunder(wt1, osLevel2)

// Tracé des signaux d'achat et de vente
plotshape(series=longCondition, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small, title="Buy Signal")
plotshape(series=shortCondition, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small, title="Sell Signal")

// Conditions d'entrée et de sortie
strategy.entry("Long", strategy.long, when=longCondition)
strategy.entry("Short", strategy.short, when=shortCondition)

// Niveaux de prise de profit pour les positions longues et courtes
longTakeProfitLevel = strategy.position_avg_price * (1 + takeProfitPercentage / 100)
shortTakeProfitLevel = strategy.position_avg_price * (1 - takeProfitPercentage / 100)

// Vérification si les niveaux de prise de profit sont atteints
longTakeProfitReached = strategy.position_size > 0 and high >= longTakeProfitLevel
shortTakeProfitReached = strategy.position_size < 0 and low <= shortTakeProfitLevel

// Tracé des formes de prise de profit
plotshape(series=longTakeProfitReached, style=shape.xcross, location=location.belowbar, color=color.blue, size=size.small, title="Take Profit Long")
plotshape(series=shortTakeProfitReached, style=shape.xcross, location=location.abovebar, color=color.blue, size=size.small, title="Take Profit Short")

// Niveaux de stop loss pour les positions longues et courtes
longStopLossLevel = strategy.position_avg_price * (1 - stopLossPercentage / 100)
shortStopLossLevel = strategy.position_avg_price * (1 + stopLossPercentage / 100)

// Vérification si les niveaux de stop loss sont atteints
longStopLossReached = strategy.position_size > 0 and low <= longStopLossLevel
shortStopLossReached = strategy.position_size < 0 and high >= shortStopLossLevel

// Tracé des formes de stop loss
plotshape(series=longStopLossReached, style=shape.xcross, location=location.belowbar, color=color.red, size=size.small, title="Stop Loss Long")
plotshape(series=shortStopLossReached, style=shape.xcross, location=location.abovebar, color=color.red, size=size.small, title="Stop Loss Short")

// Fermeture des positions en cas de prise de profit ou de stop loss
strategy.close("Long", when=longTakeProfitReached or longStopLossReached)
strategy.close("Short", when=shortTakeProfitReached or shortStopLossReached)