Stratégie de trading multi-périodes basée sur le RSI et les moyennes mobiles


Date de création: 2024-01-22 11:00:20 Dernière modification: 2024-01-22 11:00:20
Copier: 0 Nombre de clics: 700
1
Suivre
1617
Abonnés

Stratégie de trading multi-périodes basée sur le RSI et les moyennes mobiles

Aperçu

Cette stratégie combine les indicateurs aléatoires RSI, SMA et WMA pour trouver des signaux d’achat et de vente. Elle détermine simultanément la direction de la tendance sur les périodes de 5 minutes et 1 heure.

Principe de stratégie

La stratégie commence par calculer une moyenne mobile pondérée de 144 cycles WMA et une moyenne mobile simple de 5 cycles SMA, respectivement, sur les deux périodes de 1 heure et 5 minutes. La stratégie ne considère un marché à plusieurs têtes que lorsque le SMA de 5 minutes est au-dessus de la WMA. Ensuite, la stratégie calcule l’indicateur polyvalent du RSI, ainsi que les lignes K et D correspondantes.

Analyse des avantages

Il s’agit d’une stratégie de suivi de tendance très efficace. Elle combine deux tendances de jugement de périodes de temps simultanées, ce qui réduit très efficacement les signaux erronés. De plus, elle combine plusieurs indicateurs pour filtrer, y compris le RSI, le SMA et le WMA, ce qui rend le signal plus fiable. En permettant au RSI de conduire le KDJ, elle modifie également les problèmes de faux signaux qui peuvent facilement survenir dans une stratégie de KDJ ordinaire.

Analyse des risques

Le risque le plus important de cette stratégie est l’erreur de jugement de la tendance. En cas de retournement de tendance, les moyennes à court et à long terme peuvent se déplacer simultanément vers le haut ou vers le bas, ce qui génère un signal erroné. En outre, en cas de choc, le RSI peut également générer plus de signaux de négociation confus.

Direction d’optimisation

Cette stratégie peut être optimisée dans les domaines suivants: 1) Tester les SMA, WMA et RSI de différentes longueurs pour trouver la meilleure combinaison de paramètres 2) ajouter d’autres critères de jugement, tels que MACD, Brinline, etc. pour vérifier la fiabilité du signal 3) Optimiser les stratégies de stop loss, tester les méthodes de stop loss à taux fixe, de stop loss au point de glissement équivalent et de stop loss suivi 4) Adhésion à un module de gestion de fonds pour contrôler la taille d’un investissement individuel et l’ouverture de risque globale 5) Augmenter les algorithmes d’apprentissage automatique pour trouver les paramètres les plus performants grâce à un grand nombre de répétitions

Résumer

La stratégie exploite pleinement les avantages des moyennes mobiles et des indicateurs aléatoires pour créer un système de suivi de tendance plus fiable. Grâce à la vérification de plusieurs périodes et indicateurs, elle capte facilement la direction de la tendance de la ligne moyenne et longue.

Code source de la stratégie
/*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)