Stratégie de suivi des oscillations en bande libre


Date de création: 2024-02-04 10:28:24 Dernière modification: 2024-02-04 10:28:24
Copier: 0 Nombre de clics: 614
1
Suivre
1617
Abonnés

Stratégie de suivi des oscillations en bande libre

Aperçu

L’idée principale de cette stratégie est de calculer des points de perte pour les lignes longues et courtes sur la base de l’indicateur ATR, et de générer un signal de transaction lorsque le prix franchit ces lignes de perte. Il a à la fois la fonction de suivi de la tendance et de capture des secousses.

Principe de stratégie

La stratégie utilise l’indicateur ATR de période N ATR multiplié par un facteur pour calculer la ligne de stop longue et longue de chaque côté. La formule de calcul est la suivante:

长线止损 = 最高价 - ATR * 系数
短线止损 = 最低价 + ATR * 系数

Il est possible de faire une prise de plus lorsque la hausse du prix dépasse la limite de la ligne longue, et une prise de plus lorsque la baisse du prix dépasse la limite de la ligne courte. Une prise de plus permet de suivre en temps réel les fluctuations du prix pour déplacer la limite de la ligne courte.

Cette méthode, qui utilise la bande ATR comme point d’arrêt, permet de capturer pleinement les tendances des prix, tout en garantissant le risque d’arrêt des pertes. La génération d’un signal lorsque les prix se produisent des ruptures plus importantes peut éliminer efficacement les fausses ruptures.

Analyse des avantages

Le plus grand avantage de cette stratégie réside dans la possibilité d’ajuster automatiquement le stop loss et de contrôler le risque tout en capturant la tendance des prix. Les avantages spécifiques sont les suivants:

  1. Le paramètre de stop-loss flottant basé sur l’indicateur ATR permet d’ajuster l’amplitude de stop-loss en fonction de la volatilité du marché et de contrôler efficacement les pertes individuelles.

  2. Le signal est généré par une méthode de percée qui permet d’éliminer une partie du bruit et d’éviter le recoupement et le recoupement.

  3. La ligne de stop-loss est ajustée en temps réel pour suivre les fluctuations des prix, empêcher les stop-loss d’être trop lâches et verrouiller plus de profits.

Analyse des risques

Cette stratégie comporte également des risques, principalement liés à la configuration des points de perte et à la manière dont les signaux sont générés. Les points de risque spécifiques sont les suivants:

  1. Des cycles et des coefficients ATR inappropriés peuvent entraîner un arrêt trop large ou trop étroit.

  2. La méthode de signal de rupture peut manquer l’occasion au début de la tendance.

  3. Le suivi de la perte de fin de tendance peut être retardé et ne peut pas être parfait.

La contre-mesure consiste principalement à ajuster les paramètres pour rendre le stop loss plus raisonnable, ou à aider d’autres indicateurs à juger des tendances et des signaux.

Direction d’optimisation

Cette stratégie peut être optimisée de plusieurs façons:

  1. La mise en place d’une deuxième couche de stop-loss pour une plus grande maîtrise des risques.

  2. La qualité du signal est améliorée en combinant les tendances avec d’autres indicateurs.

  3. Ajouter des stratégies de stop-loss mobiles pour augmenter les bénéfices si la tendance se poursuit.

  4. Optimiser les paramètres ATR cycliques et facteurs afin de rapprocher les arrêts aux fluctuations réelles des prix.

Résumer

Cette stratégie est très pratique dans l’ensemble, car elle permet d’ajuster automatiquement le stop loss pour contrôler efficacement le risque, tout en obtenant de bons profits grâce au suivi des tendances. Nous pouvons optimiser et améliorer la stratégie en intégrant d’autres méthodes d’analyse sur la base originale, pour la rendre plus stable et plus intelligente.

Code source de la stratégie
/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 00:00:00
period: 1h
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/
// © melihtuna
//@version=4
strategy("Chandelier Exit - Strategy",shorttitle="CE-STG" , overlay=true, default_qty_type=strategy.cash, default_qty_value=10000, initial_capital=10000, currency=currency.USD, commission_value=0.03, commission_type=strategy.commission.percent)

length = input(title="ATR Period", type=input.integer, defval=22)
mult = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
showLabels = input(title="Show Buy/Sell Labels ?", type=input.bool, defval=false)
useClose = input(title="Use Close Price for Extremums ?", type=input.bool, defval=true)
highlightState = input(title="Highlight State ?", type=input.bool, defval=true)

atr = mult * atr(length)

longStop = (useClose ? highest(close, length) : highest(length)) - atr
longStopPrev = nz(longStop[1], longStop) 
longStop := close[1] > longStopPrev ? max(longStop, longStopPrev) : longStop

shortStop = (useClose ? lowest(close, length) : lowest(length)) + atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := close[1] < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop

var int dir = 1
dir := close > shortStopPrev ? 1 : close < longStopPrev ? -1 : dir

var color longColor = color.green
var color shortColor = color.red

longStopPlot = plot(dir == 1 ? longStop : na, title="Long Stop", style=plot.style_linebr, linewidth=2, color=longColor)
buySignal = dir == 1 and dir[1] == -1
plotshape(buySignal ? longStop : na, title="Long Stop Start", location=location.absolute, style=shape.circle, size=size.tiny, color=longColor, transp=0)
plotshape(buySignal and showLabels ? longStop : na, title="Buy Label", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=longColor, textcolor=color.white, transp=0)

shortStopPlot = plot(dir == 1 ? na : shortStop, title="Short Stop", style=plot.style_linebr, linewidth=2, color=shortColor)
sellSignal = dir == -1 and dir[1] == 1
plotshape(sellSignal ? shortStop : na, title="Short Stop Start", location=location.absolute, style=shape.circle, size=size.tiny, color=shortColor, transp=0)
plotshape(sellSignal and showLabels ? shortStop : na, title="Sell Label", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=shortColor, textcolor=color.white, transp=0)

midPricePlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0, display=display.none, editable=false)

longFillColor = highlightState ? (dir == 1 ? longColor : na) : na
shortFillColor = highlightState ? (dir == -1 ? shortColor : na) : na
fill(midPricePlot, longStopPlot, title="Long State Filling", color=longFillColor)
fill(midPricePlot, shortStopPlot, title="Short State Filling", color=shortFillColor)


long_short = input(true, "Long-Short",type=input.bool, group="Strategy Settings")

start     = input(timestamp("2019-01-01"), "Date", type=input.time, group="Strategy Settings")
finish    = input(timestamp("2025-01-01"), "Date", type=input.time, group="Strategy Settings")   
window()  => true

slRatio=input(5, "Manuel Stop Loss Ratio", type=input.float, minval=0, group="Strategy Settings")
tpRatio=input(20, "Take Profit Ratio", type=input.float, minval=0, group="Strategy Settings")
tsStartRatio=input(10, "Trailing Stop Start Ratio", type=input.float, minval=0, group="Strategy Settings")
tsRatio=input(5, "Trailing Stop Ratio", type=input.float, minval=1, group="Strategy Settings")

lastBuyPrice = strategy.position_avg_price

diffHiPriceRatio = (high-lastBuyPrice)/lastBuyPrice*100
diffLoPriceRatio = (close-lastBuyPrice)/lastBuyPrice*100
posHiRatio=0.0
posHiRatio:= strategy.position_size > 0 ? diffHiPriceRatio > posHiRatio[1] ? diffHiPriceRatio : posHiRatio[1] : 0

s_diffHiPriceRatio = (low-lastBuyPrice)/lastBuyPrice*100
s_diffLoPriceRatio = (close-lastBuyPrice)/lastBuyPrice*100
s_posHiRatio=0.0
s_posHiRatio:= strategy.position_size < 0 ? s_diffLoPriceRatio < s_posHiRatio[1] ? s_diffLoPriceRatio : s_posHiRatio[1] : 0

strategy.entry("LONG", strategy.long, when = window() and buySignal)
strategy.close("LONG", when = window() and sellSignal)
strategy.close("LONG", when = diffLoPriceRatio<(slRatio*(-1)), comment="STOP-LONG")
strategy.close("LONG", when = diffHiPriceRatio>tpRatio, comment="TAKE-PROFIT-LONG")
strategy.close("LONG", when = ((posHiRatio[1]>tsStartRatio) and (posHiRatio[1]-diffHiPriceRatio)>tsRatio), comment="TRAILING-STOP-LONG")

if long_short
    strategy.entry("SHORT", strategy.short, when = window() and sellSignal)
    strategy.close("SHORT", when = window() and buySignal)
    strategy.close("SHORT", when = s_diffLoPriceRatio>(slRatio), comment="STOP-SHORT")
    strategy.close("SHORT", when = s_diffHiPriceRatio<(tpRatio*(-1)), comment="TAKE-PROFIT-SHORT")
    strategy.close("SHORT", when = ((s_posHiRatio[1]*(-1)>tsStartRatio) and ((s_posHiRatio[1]-s_diffLoPriceRatio))*(-1)>tsRatio), comment="TRAILING-STOP-SHORT")