Stratégie de moyenne mobile double

Auteur:ChaoZhang est là., Date: le 21 février 2024 à 14h43
Les étiquettes:

img

Résumé

Cette stratégie utilise des moyennes mobiles doubles pour former un canal et capturer la direction de la tendance. Les signaux de trading sont générés lorsque le prix traverse le canal. L'indicateur RSI est également incorporé pour filtrer les fausses ruptures.

La logique de la stratégie

La stratégie utilise deux moyennes mobiles de longueur 5, l'une calculée à partir du prix le plus élevé et l'autre à partir du prix le plus bas, pour former un canal de prix.

Pour éviter une fausse rupture, l'indicateur RSI est ajouté pour mesurer les niveaux de surachat/survente.

En outre, la stratégie n'est négociée que pendant la session de Londres (3h à 11h), avec un maximum de 5 ordres par jour et une perte maximale de 2% du capital par jour.

Analyse des avantages

Prends la tendance

Le canal double MA peut détecter efficacement la direction de la tendance des prix.

Réduire la fausse éruption

L'utilisation d'un filtre RSI suracheté/survendu réduit certains faux signaux de rupture causés par les fluctuations de prix.

Contrôle efficace des risques

La tolérance au risque est également définie par une perte quotidienne maximale de 2%.

Analyse des risques

Fausse rupture avec volatilité

Les paramètres peuvent être optimisés et plus de filtres ajoutés pour réduire ce risque.

Risque fixe SL/TP

L'utilisation de pips fixes pour SL/TP risque d'être arrêtée/de manquer des bénéfices sur un marché volatil.

Risque limité de session de négociation

L'ouverture de positions uniquement pendant les sessions fixes présente le risque de manquer des transactions potentielles à d'autres heures.

Directions d'optimisation

Réglage des paramètres

Optimiser les paramètres tels que la longueur MA, les chiffres RSI, les points SL/TP fixes, etc. pour trouver la meilleure combinaison.

Filtres supplémentaires

Ajouter plus d'indicateurs ou de conditions pour vérifier les signaux, par exemple un volume plus élevé, une largeur BB réduite, etc., afin d'éviter de fausses ruptures.

Dynamique SL/TP

Utilisez un stop loss/take profit basé sur le pourcentage ou dynamique au lieu de pips fixes pour mieux gérer les mouvements unilatéraux du marché.

Révision manuelle

Vérifiez manuellement les signaux, ou entrez uniquement à l'évasion confirmée pour éviter d'être pris au piège.

Conclusion

La stratégie est assez simple et pratique dans l'ensemble, en utilisant le double canal MA pour déterminer la tendance et le RSI pour filtrer les fausses ruptures.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-16 23:59:59
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/
// © SoftKill21
//@version=4
strategy(title="Moving Average", shorttitle="MA", overlay=true)
timeinrange(res, sess) => time(res, sess) != 0
len = input(5, minval=1, title="Length")
src = input(high, title="Source")
offset = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500)
out = sma(src, len)
plot(out, color=color.white, title="MA", offset=offset)

len2 = input(5, minval=1, title="Length")
src2 = input(low, title="Source")
offset2 = input(title="Offset", type=input.integer, defval=0, minval=-500, maxval=500)
out2 = sma(src2, len2)
plot(out2, color=color.white, title="MA", offset=offset2)

length = input( 5 )
overSold = input( 10 )
overBought = input( 80 )
price = input(close, title="Source RSI")

vrsi = rsi(price, length)

longcond= close > out and close > out2 and vrsi > overBought
shortcont = close < out and close < out2 and vrsi < overSold
tp=input(150,title="tp")
sl=input(80,title="sl")


strategy.entry("long",1,when=longcond)
//strategy.close("long",when= close < out2)
strategy.exit("long_exit","long",profit=tp,loss=sl)

strategy.entry("short",1,when=shortcont)
//strategy.close("short",when=close >out)
strategy.exit("short_exit","short",profit=tp,loss=sl)

// maxOrder = input(6, title="max trades per day")
// maxRisk = input(2,type=input.float, title="maxrisk per day")
// strategy.risk.max_intraday_filled_orders(maxOrder)

// strategy.risk.max_intraday_loss(maxRisk, strategy.percent_of_equity)


// strategy.close_all(when =not timeinrange(timeframe.period, "0300-1100"))






Plus de