Stratégie de suivi de la moyenne mobile de percée oscillante


Date de création: 2023-10-30 11:39:31 Dernière modification: 2023-10-30 11:39:31
Copier: 1 Nombre de clics: 629
1
Suivre
1617
Abonnés

Stratégie de suivi de la moyenne mobile de percée oscillante

Cette stratégie permet d’obtenir des bénéfices durables dans les marchés en crise en suivant les ruptures de la courbe.

Principe de stratégie

Cette stratégie est basée sur le principe de la rupture de la moyenne, en utilisant la MA pour former la moyenne principale. Un signal de transaction est généré lorsque le prix franchit la moyenne principale.

Plus précisément, la stratégie utilise une moyenne mobile WMA double à 60 cycles comme principale moyenne. En même temps, la portée réelle des fluctuations des prix est calculée et un canal ascendant et descendant est tracé. Les prix sont positifs lorsqu’ils franchissent la trajectoire ascendante et sont négatifs lorsqu’ils franchissent la trajectoire descendante.

Sur la base de la rupture, la stratégie introduit également l’indicateur RSI et l’indicateur EMA pour un jugement auxiliaire, demandant un plus lorsque le RSI est supérieur à 50 et le prix est supérieur à l’EMA, et un vide lorsque le RSI est inférieur à 50 et le prix est inférieur à l’EMA, afin d’éviter une fausse rupture.

En outre, la stratégie utilise la forte ou la faible tendance de la triple moyenne pour juger de la position de fin. Lorsque les formations de la triple moyenne sont faibles, le point de sortie est choisi comme chemin de rupture inverse.

Avantages stratégiques

  • Utilisation de la moyenne multiple des MA, permettant d’aplanir efficacement les variations de prix et d’identifier la direction de la tendance
  • Des transactions basées sur le canal permettent de gagner de l’argent en cas de choc
  • Les signaux de fausse rupture peuvent être filtrés en combinaison avec le RSI et l’EMA pour un jugement auxiliaire.
  • L’utilisation de l’état de triple équilibre pour déterminer le point de sortie approprié permet d’éviter une défaillance.

Risque stratégique

  • Dans une tendance à la forte oscillation, la moyenne moyenne dominante peut produire plus de fausses ruptures.
  • Le timing de la sortie du jugement de la Triple Equivalence peut ne pas être précis
  • Une mauvaise configuration des paramètres RSI peut entraîner une fréquence de négociation excessive

Le risque peut être réduit par des méthodes telles que l’optimisation des paramètres cycliques de l’AM, l’ajustement des réglages de la triple moyenne et l’utilisation prudente des paramètres du RSI.

Orientation de l’optimisation de la stratégie

  • Optimiser les paramètres de la période MA pour trouver la période de la moyenne principale la plus appropriée
  • Essayez différents indicateurs auxiliaires pour remplacer le RSI, tels que KDJ, MACD, etc.
  • Ajustez les paramètres de la triple moyenne pour trouver un moment de retour plus précis
  • Ajout d’une stratégie de stop loss pour contrôler le risque d’une seule transaction

Résumer

Cette stratégie est une stratégie de rupture qui convient parfaitement aux conditions de choc. L’idée centrale est de construire une position de rupture basée sur la MA, complétée par un filtre d’indicateur de tendance, pour maintenir un profit dans les conditions de choc.

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



//@version=5

//exapple bot
strategy('RIPO BOT', shorttitle='RIPO BOT', overlay=true, process_orders_on_close=true, calc_on_order_fills=false, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
sl_inp = input(0.1, title='Stop Loss %') / 100
tp_inp = input(0.33, title='Take Profit %') / 100

length = input(defval=21)
upper = ta.highest(length)
lower = ta.lowest(length)

lengthChop = input.int(14, minval=1)
ci = 100 * math.log10(math.sum(ta.atr(1), lengthChop) / (ta.highest(lengthChop) - ta.lowest(lengthChop))) / math.log10(lengthChop)
offset = input.int(0, "Offset",  minval = -500, maxval = 500)
plot(ci, "CHOP", color=#2962FF, offset = offset)
band1 = hline(61.8, "Upper Band", color=#787B86, linestyle=hline.style_dashed)
hline(50, "Middle Band", color=color.new(#787B86, 50))
band0 = hline(38.2, "Lower Band", color=#787B86, linestyle=hline.style_dashed)
fill(band1, band0, color = color.rgb(33, 150, 243, 90), title = "Background")

rsi = ta.rsi(close, 14)

var float entry_price = na

output = 100 * (close - upper) / (upper - lower)
ema = ta.ema(output, input(defval=13, title='EMA'))

ma(src, len) =>
    ta.wma(2 * ta.wma(src, len / 2) - ta.wma(src, len), math.round(math.sqrt(len)))
BBMC = ma(close, 60)
rangema = ta.ema(ta.tr, 60)
upperk = BBMC + rangema * 0.2
lowerk = BBMC - rangema * 0.2
color_bar = close > upperk ? color.blue : close < lowerk ? color.fuchsia : color.gray

ExitHigh = ma(high, 15)
ExitLow = ma(low, 15)
Hlv3 = int(na)
Hlv3 := close > ExitHigh ? 1 : close < ExitLow ? -1 : Hlv3[1]
sslExit = Hlv3 < 0 ? ExitHigh : ExitLow
base_cross_Long = ta.crossover(close, sslExit)
base_cross_Short = ta.crossover(sslExit, close)
codiff = base_cross_Long ? 1 : base_cross_Short ? -1 : na
entry_long = false

entry_short = false

    
if ta.crossover(close, BBMC) and output > ema
    entry_long := true
    
if ta.crossunder(close, BBMC) and output < ema
    entry_short := true

if entry_long and strategy.position_size == 0
    entry_price := close
    strategy.entry('enter long', strategy.long, comment='ENTER-LONG_BYBIT_MATICUSDT_BOT-NAME_1M_85915e4dc80fb663')
if strategy.position_size > 0
    strategy.exit('Stop Loss/TP long', 'enter long', limit=entry_price * (1 + tp_inp), stop = color_bar == color.fuchsia ? BBMC : na, comment='EXIT-LONG_BYBIT_MATICUSDT_BOT-NAME_1M_85915e4dc80fb663')
plot(entry_price * (1 + tp_inp), color=color.new(color.green, 0))


//if entry_short and strategy.position_size == 0
    //entry_price := close
    //strategy.entry('enter short', strategy.short, comment='ENTER-SHORT_BYBIT_MATICUSDT_BOT-NAME_1M_85915e4dc80fb663')
if strategy.position_size < 0
    strategy.exit('Stop Loss/TP short', 'enter short', limit=entry_price * (1 - tp_inp), stop = color_bar == color.blue ? BBMC : na, comment='EXIT-SHORT_BYBIT_MATICUSDT_BOT-NAME_1M_85915e4dc80fb663')
plot(entry_price * (1 + tp_inp), color=color.new(color.green, 0))
// plot(entry_price * (1 - sl_inp), color=color.new(color.red, 0))

plot(rsi, color=color.yellow)

plot(output, title='%R', color=color.new(color.yellow, 0), linewidth=2)
plot(ema, title='EMA', color=color.new(color.aqua, 0), linewidth=2)

plotarrow(codiff, colorup=color.new(color.blue, 35), colordown=color.new(color.fuchsia, 35), title='Exit Arrows', maxheight=20, offset=0)
plot(BBMC, color=color_bar, linewidth=4, title='MA Trendline')