Stratégie de capture inversée


Date de création: 2023-11-24 16:43:25 Dernière modification: 2023-11-24 16:43:25
Copier: 0 Nombre de clics: 676
1
Suivre
1617
Abonnés

Stratégie de capture inversée

Aperçu

La stratégie de capture de revers est une stratégie de revers qui utilise la ligne de Brin de l’indicateur de volatilité combinée à l’indicateur de dynamique RSI. Elle définit le canal de Brin et la ligne de surachat et de survente du RSI comme signaux pour rechercher des opportunités de revers lorsque la direction de la tendance change.

Principe de stratégie

La stratégie utilise la ligne de Brill comme indicateur technique principal, en plus d’indicateurs dynamiques tels que le RSI pour vérifier les signaux de trading. La logique est la suivante:

  1. Pour déterminer la direction de la tendance du grand cycle, il est nécessaire de déterminer s’il s’agit d’une hausse ou d’une baisse. L’EMA du 50e jour et la fourche dorée de l’EMA du 21e jour sont utilisées.
  2. Dans une tendance baissière, lorsque la hausse des prix a brisé la trajectoire de Brin, et que le RSI vient de rebondir de la zone de survente, une forme de fourche apparaît, indiquant que la zone de survente a atteint son fond, et est considérée comme un signal d’achat.
  3. Dans une tendance haussière, une forme de fourche morte apparaît lorsque la baisse des prix a brisé la trajectoire de Brin et que l’indicateur RSI vient de se retirer de la zone de surachat, indiquant que la zone de surachat a commencé à se rétracter et est considérée comme un signal de vente.
  4. Les signaux d’achat et de vente ci-dessus doivent être satisfaits simultanément pour éviter les faux signaux.

Analyse des avantages

Cette stratégie présente les avantages suivants:

  1. La combinaison de l’indicateur de fluctuation et de l’indicateur de dynamique donne un signal plus fiable.
  2. Le risque de transaction inverse est faible et convient aux opérations sur courte ligne.
  3. Les règles de programmation sont claires et il est facile de réaliser des transactions automatiques.
  4. Les traders tradent en fonction des tendances et évitent de prendre des positions désordonnées sur des marchés en pleine effervescence.

Analyse des risques

La stratégie présente également les risques suivants:

  1. Le risque de fausses signaux de rupture du canal de la ligne de broyage nécessite le filtrage de l’indicateur RSI
  2. Le risque d’échec de l’inversion doit être évité en temps opportun.
  3. Il est possible de ne pas savoir exactement à quel moment il faut faire un virage, ce qui peut entraîner une entrée anticipée ou un passage à côté des meilleurs endroits.

Pour les risques ci-dessus, il est possible de régler la position de stop-loss pour contrôler l’ouverture de risque, tout en optimisant les paramètres, en ajustant la période de la ligne de boulonnage ou le paramètre RSI.

Direction d’optimisation

Cette stratégie peut être optimisée principalement dans les directions suivantes:

  1. Optimiser les paramètres de la bande de Bryn, ajuster la longueur des cycles et la taille de l’écart-type pour trouver la meilleure combinaison de paramètres.
  2. Optimiser les cycles des moyennes mobiles pour déterminer la durée optimale des cycles pour juger des tendances.
  3. Ajustez les paramètres du RSI pour trouver la meilleure zone de surachat et de survente
  4. L’ajout d’autres combinaisons d’indicateurs, tels que KDJ, MACD, etc., enrichit les raisons d’entrée dans le système.
  5. L’ajout d’algorithmes d’apprentissage automatique pour trouver automatiquement les meilleurs paramètres grâce à l’IA.

Résumer

La stratégie de capture de retournement est une stratégie de trading en ligne courte qui est plus efficace dans l’ensemble. Elle combine le jugement de la tendance et les signaux de retournement. Elle permet de filtrer les faux signaux des marchés en mouvement, d’éviter la couverture des marchés en tendance et de contrôler les risques.

Code source de la stratégie
/*backtest
start: 2023-10-24 00:00:00
end: 2023-11-23 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This is an Open source work. Please do acknowledge in case you want to reuse whole or part of this code.
// Please see the documentation to know the details about this.

//@version=5
strategy('Strategy:Reversal-Catcher', shorttitle="Reversal-Catcher", overlay=true , currency=currency.NONE, initial_capital=100000)

// Inputs
src = input(close, title="Source (close, high, low, open etc.")

BBlength = input.int(defval=20, minval=1,title="Bollinger Period Length, default 20")
BBmult = input.float(defval=1.5, minval=1.0, maxval=4, step=0.1, title="Bollinger Bands Standard Deviation, default is 1.5")

fastMovingAvg = input.int(defval=21, minval=5,title="Fast Exponential Moving Average, default 21", group = "Trends")
slowMovingAvg = input.int(defval=50, minval=8,title="Slow Exponential Moving Average, default 50", group = "Trends")

rsiLenght = input.int(defval=14, title="RSI Lenght, default 14", group = "Momentum")
overbought = input.int(defval=70, title="Overbought limit (RSI), default 70", group = "Momentum")
oversold = input.int(defval=30, title="Oversold limit (RSI), default 30", group = "Momentum")

hide = input.bool(defval=true, title="Hide all plots and legends from the chart (default: true)")


// Trade related
tradeType = input.string(defval='Both', group="Trade settings", title="Trade Type", options=['Both', 'TrendFollowing', 'Reversal'], tooltip="Consider all types of trades? Or only Trend Following or only Reversal? (default: Both).")
endOfDay = input.int(defval=1500, title="Close all trades, default is 3:00 PM, 1500 hours (integer)", group="Trade settings")
mktAlwaysOn = input.bool(defval=false, title="Markets that never closed (Crypto, Forex, Commodity)", tooltip="Some markers never closes. For those cases, make this checked. (Default: off)", group="Trade settings")


// Utils
annotatePlots(txt, val, hide) => 
    if (not hide)
        var l1 = label.new(bar_index, val, txt, style=label.style_label_left, size = size.tiny, textcolor = color.white, tooltip = txt)
        label.set_xy(l1, bar_index, val)

/////////////////////////////// Indicators /////////////////////
vwap = ta.vwap(src)
plot(hide ? na : vwap, color=color.purple, title="VWAP", style = plot.style_line)
annotatePlots('VWAP', vwap, hide)

// Bollinger Band of present time frame
[BBbasis, BBupper, BBlower] = ta.bb(src, BBlength, BBmult)
p1 = plot(hide ? na : BBupper, color=color.blue,title="Bollinger Bands Upper Line")
p2 = plot(hide ? na : BBlower, color=color.blue,title="Bollinger Bands Lower Line")
p3 = plot(hide ? na : BBbasis, color=color.maroon,title="Bollinger Bands Width", style=plot.style_circles, linewidth = 1)
annotatePlots('BB-Upper', BBupper, hide)
annotatePlots('BB-Lower', BBlower, hide)
annotatePlots('BB-Base(20-SMA)', BBbasis, hide)

// RSI
rsi = ta.rsi(src, rsiLenght)

// Trend following
ema50 = ta.ema(src, slowMovingAvg)
ema21 = ta.ema(src, fastMovingAvg)
annotatePlots('21-EMA', ema21, hide)
annotatePlots('50-EMA', ema50, hide)


// Trend conditions
upTrend = ema21 > ema50 
downTrend = ema21 < ema50


// Condition to check Special Entry: HH_LL
// Long side:
hhLLong = barstate.isconfirmed and (low > low[1]) and (high > high[1]) and (close > high[1])
hhLLShort = barstate.isconfirmed and (low < low[1]) and (high < high[1]) and (close < low[1])

longCond =  barstate.isconfirmed and (high[1] < BBlower[1]) and (close > BBlower) and (close < BBupper) and hhLLong and ta.crossover(rsi, oversold) and downTrend
shortCond = barstate.isconfirmed and (low[1] > BBupper[1]) and (close < BBupper) and (close > BBlower) and hhLLShort and ta.crossunder(rsi, overbought) and upTrend

// Trade execute
h = hour(time('1'), syminfo.timezone)
m = minute(time('1'), syminfo.timezone)
hourVal = h * 100 + m
totalTrades = strategy.opentrades + strategy.closedtrades
if (mktAlwaysOn or (hourVal < endOfDay))
    // Entry
    var float sl = na
    var float target = na
    if (longCond)
        strategy.entry("enter long", strategy.long, 1, limit=na, stop=na, comment="Long[E]")
        sl := low[1]
        target := high >= BBbasis ? BBupper : BBbasis
        alert('Buy:' + syminfo.ticker + ' ,SL:' + str.tostring(math.floor(sl)) + ', Target:' + str.tostring(target), alert.freq_once_per_bar)
    if (shortCond)
        strategy.entry("enter short", strategy.short, 1, limit=na, stop=na, comment="Short[E]")
        sl := high[1]
        target := low <= BBbasis ? BBlower : BBbasis
        alert('Sell:' + syminfo.ticker + ' ,SL:' + str.tostring(math.floor(sl)) + ', Target:' + str.tostring(target), alert.freq_once_per_bar)

    // Exit: target or SL
    if ((close >= target) or (close <= sl))
        strategy.close("enter long", comment=close < sl ? "Long[SL]" : "Long[T]")
    if ((close <= target) or (close >= sl))
        strategy.close("enter short", comment=close > sl ? "Short[SL]" : "Short[T]")
else if (not mktAlwaysOn)
    // Close all open position at the end if Day
    strategy.close_all(comment = "EoD[Exit]", alert_message = "EoD Exit", immediately = true)