Stratégie de négociation de l'indice de résistance à la hausse sur plusieurs délais et moyenne mobile

Auteur:ChaoZhang est là., Date: 2024-01-22 11h20
Les étiquettes:

img

Résumé

Cette stratégie combine l'indicateur RSI, la moyenne mobile simple (SMA) et la moyenne mobile pondérée (WMA) pour identifier les signaux de trading. Elle juge la direction de la tendance simultanément sur les délais de 5 minutes et 1 heure.

La logique de la stratégie

La stratégie calcule d'abord la WMA de 144 périodes et la SMA de 5 périodes sur les deux délais de 1 heure et 5 minutes. Un marché haussier n'est identifié que lorsque la SMA de 5 minutes est au-dessus de la WMA. La stratégie calcule ensuite l'oscillateur RSI et les lignes K et D correspondantes. Les signaux de vente sont générés lorsque la ligne K traverse en dessous de la ligne D de la zone de surachat. Les signaux d'achat sont générés lorsque la ligne K traverse la ligne D de la zone de survente.

Analyse des avantages

Il s'agit d'une stratégie très efficace de suivi des tendances. En incorporant deux délais pour déterminer la tendance, il réduit considérablement les faux signaux. En outre, il combine plusieurs filtres, y compris RSI, SMA et WMA pour rendre les signaux plus fiables. En conduisant KDJ avec RSI, il évite également certains faux signaux inhérents à la stratégie normale KDJ. En outre, des paramètres de stop loss et de prise de profit appropriés aident à verrouiller les bénéfices et à contrôler les risques.

Analyse des risques

Le plus grand risque de cette stratégie réside dans un mauvais jugement de la tendance. Aux points tournants, les moyennes mobiles à court terme et à long terme peuvent basculer à la hausse ou à la baisse, ce qui entraîne de mauvais signaux.

Directions d'optimisation

La stratégie peut être améliorée par les aspects suivants:

  1. Testez différentes longueurs de SMA, WMA et RSI pour trouver la combinaison optimale
  2. Incorporer d'autres indicateurs tels que le MACD, les bandes de Bollinger pour vérifier la fiabilité du signal
  3. Optimiser les mécanismes d'arrêt des pertes et de prise de profit en testant les arrêts de ratio fixe, les arrêts de trailing, etc.
  4. Ajouter des modules de gestion des capitaux pour contrôler la taille des transactions et l'exposition globale au risque
  5. Introduire des modèles d'apprentissage automatique pour trouver les meilleurs paramètres de performance grâce à des tests de retour à grande échelle

Résumé

La stratégie utilise pleinement les forces des moyennes mobiles et des oscillateurs pour établir un système de suivi de tendance relativement solide. En confirmant les signaux sur plusieurs délais et indicateurs, elle peut capturer en douceur les tendances à moyen et long terme. Les paramètres de stop loss et take profit lui permettent également de résister aux fluctuations normales du marché dans une certaine mesure. Cependant, il y a encore des possibilités d'amélioration, telles que le test de plus de combinaisons d'indicateurs, l'utilisation de l'apprentissage automatique pour l'optimisation des paramètres.


/*backtest
start: 2023-12-22 00:00:00
end: 2024-01-21 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/
// © bufirolas

// Works well with a wide stop with 20 bars lookback
// for the SL level and a 2:1 reward ratio Take Profit .
// These parameters can be modified in the Inputs section of the strategy panel.

// "an entry signal it's a cross down or up on
// the stochastics. if you're in a downtrend
// on the hourly time frame you
// must also be in a downtrend on the five
// minute so the five period has to be below the 144
// as long as the five period is still trading below
// the 144 period on both the hourly and the five minutes
// we are looking for these short signals crosses down
// in the overbought region of the stochastic. Viceversa for longs"

//@version=4
strategy("Stoch + WMA + SMA strat", overlay=true)

//SL & TP Inputs
i_SL=input(true, title="Use Swing Lo/Hi Stop Loss & Take Profit")
i_SwingLookback=input(20, title="Swing Lo/Hi Lookback")
i_SLExpander=input(defval=10, step=1, title="SL Expander")
i_TPExpander=input(defval=30, step=1, title="TP Expander")
i_reverse=input(false, title="Reverse Trades")
i_TStop =input(false, title="Use Trailing Stop")

//Strategy Inputs
src4 = input(close, title="RSI Source")
stochOS=input(defval=20, step=5, title="Stochastics Oversold Level")
stochOB=input(defval=80, step=5, title="Stochastics Overbought Level")

//Stoch rsi Calculations
smoothK = input(3, minval=1)
smoothD = input(3, minval=1)
lengthRSI = input(14, minval=1)
lengthStoch = input(14, minval=1)
rsi1 = rsi(src4, lengthRSI)
k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
d = sma(k, smoothD)
h0 = hline(80, linestyle=hline.style_dotted)
h1 = hline(20, linestyle=hline.style_dotted)

//MA
wmalen=input(defval=144, title="WMA Length")
WMA = security(syminfo.tickerid, "60", wma(close, wmalen))
SMA = security(syminfo.tickerid, "60", sma(close, 5))
minWMA = wma(close, wmalen)
minSMA = sma(close, 5)

//Entry Logic
stobuy = crossover(k, d) and k < stochOS
stosell = crossunder(k, d) and k > stochOB
mabuy = minSMA > minWMA
daymabuy = SMA > WMA

//SL & TP Calculations
SwingLow=lowest(i_SwingLookback)
SwingHigh=highest(i_SwingLookback)
bought=strategy.position_size != strategy.position_size[1]
LSL=valuewhen(bought, SwingLow, 0)-((valuewhen(bought, atr(14), 0)/5)*i_SLExpander)
SSL=valuewhen(bought, SwingHigh, 0)+((valuewhen(bought, atr(14), 0)/5)*i_SLExpander)
lTP=(strategy.position_avg_price + (strategy.position_avg_price-(valuewhen(bought, SwingLow, 0)))+((valuewhen(bought, atr(14), 0)/5)*i_TPExpander))
sTP=(strategy.position_avg_price - (valuewhen(bought, SwingHigh, 0) - strategy.position_avg_price))-((valuewhen(bought, atr(14), 0)/5)*i_TPExpander)
islong=strategy.position_size > 0
isshort=strategy.position_size < 0

//TrailingStop
dif=(valuewhen(strategy.position_size>0 and strategy.position_size[1]<=0, high,0))
 -strategy.position_avg_price
trailOffset     = strategy.position_avg_price - LSL
var tstop = float(na)
if strategy.position_size > 0
    tstop := high- trailOffset - dif
    if tstop<tstop[1]
        tstop:=tstop[1]
else
    tstop := na
StrailOffset     = SSL - strategy.position_avg_price
var Ststop = float(na)
Sdif=strategy.position_avg_price-(valuewhen(strategy.position_size<0 
 and strategy.position_size[1]>=0, low,0))
if strategy.position_size < 0
    Ststop := low+ StrailOffset + Sdif
    if Ststop>Ststop[1]
        Ststop:=Ststop[1]
else
    Ststop := na
    
//Stop Selector
SL= islong ? LSL : isshort ? SSL : na
if i_TStop 
    SL:= islong ? tstop : isshort ? Ststop : na
TP= islong ? lTP : isshort ? sTP : na


//Entries
if stobuy and mabuy and daymabuy
    strategy.entry("long", long=not i_reverse?true:false)
if stosell and not mabuy and not daymabuy
    strategy.entry("short", long=not i_reverse?false:true)


//Exit
if i_SL
    strategy.exit("longexit", "long", stop=SL, limit=TP)
    strategy.exit("shortexit", "short", stop=SL, limit=TP)

//Plots
plot(i_SL ? SL : na, color=color.red, style=plot.style_cross)
plot(i_SL ? TP : na, color=color.green, style=plot.style_cross)
plot(minWMA)
plot(minSMA, color=color.green)




Plus de