La valeur de l'échange de titres est calculée en fonction de la valeur de l'échange de titres.

Auteur:ChaoZhang est là., Date: 2024-02-05 16h35
Les étiquettes:

img

Résumé

La stratégie Trend Following Stop Loss est une stratégie de trading de suivi de tendance basée sur l'indicateur TrendAlert. Elle détermine la direction de la tendance à travers l'indicateur TrendAlert pour mettre en œuvre l'entrée de suivi de tendance.

La logique de la stratégie

La stratégie se compose principalement des éléments suivants:

  1. L'indicateur TrendAlert juge la direction de la tendance. Lorsque TrendAlert est supérieur à 0, c'est un signal haussier. Lorsque celui-ci est inférieur à 0, c'est un signal baissier.

  2. L'indicateur ATR calcule la fourchette de fluctuation des prix récemment.

  3. Le paramètre de structure contrôle si elle est activée.

  4. Entrez des positions longues ou courtes selon la direction du signal de tendance.

  5. Fermer les positions lorsque le prix déclenche un stop loss ou un profit.

La stratégie filtre les faux signaux par le jugement de tendance, contrôle les risques par le suivi du stop loss, assure la rentabilité par le biais de la prise de profit et améliore la stabilité du système de négociation.

Analyse des avantages

Les principaux avantages de cette stratégie sont les suivants:

  1. La double garantie de filtrage des tendances et de suivi des stop loss évite de courir après le bruit du marché et garantit des risques de négociation contrôlables.

  2. Le réglage d'arrêt de perte adaptatif ATR empêche une optimisation excessive et convient à divers environnements de marché.

  3. Prendre profit assure la rentabilité et empêche de manger les profits.

  4. La logique de la stratégie est claire et concise, facile à comprendre et à modifier, adaptée aux traders quantitatifs développement secondaire.

  5. Écrit en langage Pine Script, il peut être utilisé directement sur la plateforme TradingView sans compétences en programmation.

Analyse des risques

Cette stratégie comporte également certains risques:

  1. Un jugement de tendance incorrect peut entraîner une entrée inutile et déclencher un stop loss.

  2. Lorsque le marché fluctue violemment, l'ATR peut sous-estimer l'amplitude réelle.

  3. L'objectif de prise de profit peut limiter l'espace de profit de la stratégie. Ajustez le paramètre limitMultiplier selon le marché.

  4. La logique de l'existence basée uniquement sur le prix devrait être combinée à la gestion du temps.

Directions d'optimisation

La stratégie peut être optimisée dans les aspects suivants:

  1. Optimiser les paramètres ATR longueur atrLength et stop loss multiplier atrStopMultiplier pour ajuster la sensibilité de l'algorithme de stop loss.

  2. Essayez différents indicateurs de tendance pour trouver de meilleures opportunités d'entrée.

  3. Sélectionner ou ajuster le paramètre cible de prise de profit en fonction des caractéristiques des variétés de négociation spécifiques.

  4. Augmenter le mécanisme d'arrêt des pertes pour éviter les risques du jour au lendemain.

  5. Filtrer les fausses ruptures en combinant des indicateurs de volume de négociation pour améliorer la stabilité de la stratégie.

Conclusion

En général, il s'agit d'une stratégie de suivi des tendances très pratique. Elle utilise des indicateurs pour déterminer la direction de la tendance afin d'atteindre le suivi des tendances, tout en définissant des arrêts adaptatifs pour assurer le contrôle des risques. La logique de la stratégie est claire et facile à utiliser, ce qui la rend idéale pour les débutants.


/*backtest
start: 2023-01-29 00:00:00
end: 2024-02-04 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © jaque_verdatre

//@version=5
strategy("TrendAlert Based", overlay = true)

// Get inputs
TrendAlert = input.source(close, "TrendAlert")
atrLength = input.int(title="ATR Length", defval=15, minval=1)
useStructure = input.bool(title="Use Structure?", defval=true)
lookback = input.int(title="How Far To Look Back For High/Lows", defval=8, minval=1)
atrStopMultiplier = input.float(title="ATR Multiplier", defval=0.2, minval=0.1)
LimitMultiplier = input.float(title = "Limit Multiplier", defval = 0.5, minval = 0.1)
PineConnectorID = input.int(title = "Pine Connector ID",defval = 0)
CurrencyToSend = input.string(title = "personilized currency", defval = "ETHUSD")
Risk = input.int(title = "risk in % to send", defval = 10, minval = 1)

// Calculate data
atr = ta.atr(atrLength)
lowestLow = ta.lowest(low, lookback)
highestHigh = ta.highest(high, lookback)
longStop = (useStructure ? lowestLow : close) - atr * atrStopMultiplier
shortStop = (useStructure ? highestHigh : close) + atr * atrStopMultiplier

// Draw data to chart
plot(atr, color=color.rgb(33, 149, 243), title="ATR", display = display.none)
plot(longStop, color=color.green, title="Long Trailing Stop")
plot(shortStop, color=color.red, title="Short Trailing Stop")

var float LimitL = na
var float LimitS = na
var float LPosPrice = na
var float SPosPrice = na
var float LPosLongStop = na
var float SPosShortStop = na

KnowLimit (PosPrice, PosStop) =>
    (PosPrice-PosStop)*LimitMultiplier+PosPrice


NotInTrade = strategy.position_size == 0
InLongTrade = strategy.position_size > 0
InShortTrade = strategy.position_size < 0

longCondition = TrendAlert > 0 and NotInTrade
if (longCondition)
    LPosPrice := close
    LPosLongStop := longStop
    LimitL := KnowLimit(LPosPrice, LPosLongStop)
    strategy.entry("long", strategy.long)
    LTPPip = LimitL-LPosPrice
    LSLPip = LPosPrice-longStop
    alert(str.tostring(PineConnectorID)+',buy,'+str.tostring(CurrencyToSend)+',risk='+str.tostring(Risk)+',sl='+str.tostring(LSLPip)+'tp='+str.tostring(LTPPip), alert.freq_once_per_bar_close)
    strategy.exit("exit", "long", stop = longStop, limit = LimitL)

shortCondition = TrendAlert < 0 and NotInTrade
if (shortCondition)
    SPosPrice := close
    SPosShortStop := shortStop
    LimitS := KnowLimit(SPosPrice, SPosShortStop)
    strategy.entry("short", strategy.short)
    STPPip = SPosPrice-LimitS
    SSLPip = shortStop - SPosPrice
    alert(str.tostring(PineConnectorID)+',sell,ETHUSD,risk=10,sl='+str.tostring(SSLPip)+'tp='+str.tostring(STPPip), alert.freq_once_per_bar_close)
    strategy.exit("exit", "short", stop = shortStop, limit = LimitS)

plotshape(longCondition, color = color.green, style = shape.labelup, location = location.belowbar, size = size.normal, title = "Long Condition")
plotshape(shortCondition, color = color.red, style = shape.labeldown, location = location.abovebar, size = size.normal, title = "Short Condition")

if (InShortTrade)
    LimitL := close
    LPosLongStop := close
    LPosPrice := close

PlotLongTakeProfit = plot(LimitL, color = InLongTrade ? color.rgb(0, 255, 64) : color.rgb(120, 123, 134, 100), title = "Long Take Profit")
PlotLongStopLoss = plot(LPosLongStop, color = InLongTrade ? color.rgb(255, 0, 0) : color.rgb(120, 123, 134, 100), title = "Long Stop Loss")
PlotLongPosPrice = plot(LPosPrice, color = InLongTrade ? color.gray : color.rgb(120, 123, 134, 100), title = "Long Position Price")

if (InLongTrade)
    LimitS := close
    SPosShortStop := close
    SPosPrice := close

PlotShortTakeProfit = plot(LimitS, color = InShortTrade ? color.rgb(0, 255, 64) : color.rgb(120, 123, 134, 100), title = "Short Take Profit")
PlotShortStopLoss = plot(SPosShortStop, color = InShortTrade ? color.rgb(255, 0, 0) : color.rgb(120, 123, 134, 100), title = "Short Stop Loss")
PlotShortPosPrice = plot(SPosPrice, color = InShortTrade ? color.gray : color.rgb(120, 123, 134, 100), title = "Short Position Price")

fill(PlotLongPosPrice, PlotLongTakeProfit, color = InLongTrade ? color.rgb(0, 255, 0, 95) : color.rgb(0, 255, 0, 100))
fill(PlotShortPosPrice, PlotShortTakeProfit, color = InShortTrade ? color.rgb(0, 255, 0, 95) : color.rgb(0, 255, 0, 100))

fill(PlotLongPosPrice, PlotLongStopLoss, color = InLongTrade ? color.rgb(255, 0, 0, 95) : color.rgb(255, 0, 0, 100))
fill(PlotShortPosPrice, PlotShortStopLoss, color = InShortTrade ? color.rgb(255, 0, 0, 95) : color.rgb(255, 0, 0, 100))

Plus de