Stratégie de suivi des tendances PresentTrend


Date de création: 2023-09-21 15:00:08 Dernière modification: 2023-09-21 15:00:08
Copier: 0 Nombre de clics: 615
1
Suivre
1617
Abonnés

Aperçu

La stratégie PresentTrend est une stratégie de suivi de tendance unique et personnalisée qui combine des tendances de marché à court et à long terme pour s’adapter à différentes conditions de marché.

Principe de stratégie

La stratégie est composée de deux volets:

  1. Indicateur RSI ou MFI personnalisé: L’indicateur est calculé en fonction de la valeur de la tendance actuelle calculée par le RSI ou le MFI, et génère des signaux d’achat et de vente en fonction de la valeur de la fourche dorée, indiquant un potentiel renversement de tendance.

  2. Indicateur ATR: il s’agit d’une tendance populaire à suivre l’indicateur en utilisant la gamme de fluctuations réelles moyennes (ATR).

Lorsque les signaux d’achat et de vente des deux stratégies sont déclenchés simultanément, la stratégie ouvre une position en plus ou en moins. Cela permet de s’assurer que les transactions ne se produisent que lorsque les tendances à court et à long terme sont cohérentes, ce qui améliore la fiabilité de la stratégie.

Avantages stratégiques

  • Combinaison des tendances à court et à long terme, adaptée à différentes conditions de marché
  • Utilisation d’indicateurs personnalisés et d’ATR pour améliorer la fiabilité du signal
  • Options de négociation en plus, en moins ou en deux sens, adaptées à différents styles de négociation
  • Paramètres par défaut optimisés pour équilibrer la sensibilité et la stabilité
  • Les paramètres peuvent être ajustés en fonction des préférences personnelles et des stratégies d’optimisation

Risques stratégiques et solutions

  • Toutes les tendances qui suivent une stratégie courent le risque d’être exploitées
  • Les transactions bidirectionnelles multi-zones peuvent augmenter le nombre de transactions et les frais de traitement
  • Un paramètre incorrect peut générer trop de signaux d’erreur
  • Réduire le cycle de détention des positions de manière appropriée pour réduire le risque d’évasion
  • Vous pouvez choisir de faire plus ou moins de transactions
  • Les paramètres doivent être suffisamment testés et ajustés de manière appropriée pour s’assurer qu’ils sont raisonnables.

Orientation de l’optimisation de la stratégie

  • Augmentation des mécanismes de prévention des pertes et meilleure maîtrise des pertes individuelles
  • Combiné à d’autres indicateurs, le filtrage des signaux réduit les erreurs de transaction
  • Tester différents paramètres de cycle de détention pour trouver le meilleur
  • Essayez d’optimiser automatiquement les paramètres basés sur l’apprentissage automatique
  • Utiliser plus de sources de données, comme les flux de commandes
  • Optimiser le code de la stratégie pour une meilleure exécution

Résumer

La stratégie PresentTrend est une stratégie de suivi de tendance très efficace dans l’ensemble. Elle combine des indicateurs de tendance à court et à long terme pour améliorer la fiabilité du signal tout en restant sensible. En ajustant la direction, les paramètres et en ajoutant des logiques supplémentaires, la stratégie peut s’adapter à différents environnements de marché et aux besoins des traders.

Code source de la stratégie
/*backtest
start: 2023-08-21 00:00:00
end: 2023-09-20 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © PresentTrading

//@version=5

// Define the strategy settings
strategy('PresentTrend - Strategy [presentTrading]' , overlay=true, precision=3, default_qty_type=strategy.cash, 
 commission_value= 0.1, commission_type=strategy.commission.percent, slippage= 1, 
  currency=currency.USD, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, initial_capital= 10000)

// Define the input parameters
priceSource  = input.source(title='Source', defval=hlc3, group='PresentTrend') // The price source to use
lengthParam  = input.int(title='Length', defval=14, group='PresentTrend') // The length of the moving average
multiplier = input.float(title='Multiplier', defval=1.618, step=0.1, group='PresentTrend') // The multiplier for the ATR
indicatorChoice  = input.bool(title='Whether to use RSI or MFI', defval=false, group='PresentTrend') // Whether to use RSI or MFI

// Add a parameter for choosing Long or Short
tradeDirection = input.string(title="Trade Direction", defval="Both", options=["Long", "Short", "Both"])

// Calculate the ATR and the upT and downT values
ATR = ta.sma(ta.tr, lengthParam)
upperThreshold = low - ATR * multiplier 
lowerThreshold  = high + ATR * multiplier 

// Initialize the PresentTrend indicator
PresentTrend = 0.0

// Calculate the PresentTrend indicator
PresentTrend := (indicatorChoice ? ta.rsi(priceSource, lengthParam) >= 50 : ta.mfi(hlc3, lengthParam) >= 50) ? upperThreshold < nz(PresentTrend[1]) ? nz(PresentTrend[1]) : upperThreshold : lowerThreshold > nz(PresentTrend[1]) ? nz(PresentTrend[1]) : lowerThreshold

// Calculate the buy and sell signals
longSignal  = ta.crossover(PresentTrend, PresentTrend[2])
shortSignal  = ta.crossunder(PresentTrend, PresentTrend[2])

// Calculate the number of bars since the last buy and sell signals
barsSinceBuy = ta.barssince(longSignal)
barsSinceSell = ta.barssince(shortSignal)
previousBuy = ta.barssince(longSignal[1])
previousSell = ta.barssince(shortSignal[1])

// Initialize the direction variable
trendDirection = 0

// Calculate the direction of the trend
trendDirection := longSignal and previousBuy > barsSinceSell ? 1 : shortSignal and previousSell > barsSinceBuy ? -1 : trendDirection[1]

// Check the trade direction parameter before entering a trade
if (trendDirection == 1 and (tradeDirection == "Long" or tradeDirection == "Both"))
    strategy.entry("Buy", strategy.long) 
if (trendDirection == -1 and (tradeDirection == "Short" or tradeDirection == "Both"))
    strategy.entry("Sell", strategy.short) 

// Add a stop mechanism when the tradeDirection is one-sided
if (tradeDirection == "Long" and trendDirection == -1)
    strategy.close("Buy")
if (tradeDirection == "Short" and trendDirection == 1)
    strategy.close("Sell")

// Visualization
plot(PresentTrend, color=color.blue, title="PresentTrend")
plotshape(series=longSignal, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal")
plotshape(series=shortSignal, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal")