
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.
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.
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.
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.
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
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.
/*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)