Cette stratégie combine une moyenne mobile double, un indice de force relative (RSI) et un SAR parabolique (PSAR) pour identifier les points d'inversion des prix et prendre des décisions d'achat et de vente en conséquence.
La stratégie utilise principalement les indicateurs techniques suivants pour déterminer les points d'inversion des prix:
La moyenne mobile double: Calcule la moyenne mobile rapide (ligne rapide MA) et la moyenne mobile lente (ligne lente MA). Lorsque la ligne rapide traverse au-dessus de la ligne lente, elle indique un marché haussier et va long. Lorsque la ligne rapide traverse en dessous de la ligne lente, elle indique un marché baissier et va court.
Indicateur RSI: L'indicateur RSI évalue les conditions de surachat et de survente en calculant le gain de clôture moyen et la perte de clôture moyenne sur une période donnée.
Indicateur PSAR: SAR parabolique indique la direction de la tendance. Les points SAR inférieurs au prix indiquent un marché haussier et supérieurs au prix indiquent un marché baissier.
Indicateur ADX: ADX mesure la force d'une tendance en calculant le mouvement directionnel.
La logique des signaux d'achat et de vente est la suivante:
Signal d'achat: le MA rapide dépasse le MA lent, le RSI est inférieur à 30 (survente), les points SAR sont supérieurs au prix, l'ADX est supérieur à 20.
Signal de vente: le MA rapide est inférieur au MA lent, le RSI est supérieur à 70 (suracheté), les points SAR sont inférieurs au prix, l'ADX est supérieur à 20.
Lorsque le signal d'achat ou de vente se produit, prenez une position avec respectivement 10% du capital. Fermez la position en temps opportun lorsque le signal d'inversion échoue.
Les doubles MAs déterminent la direction de la tendance majeure, le RSI et le SAR filtrant les faux signaux, ce qui permet d'identifier avec précision les points d'inversion.
La combinaison de plusieurs indicateurs empêche les signaux erronés d'un seul indicateur.
Le stop loss évite les risques excessifs.
La logique simple et claire le rend facile à mettre en œuvre.
Il fonctionne à la fois pour la tendance haussière et la tendance baissière.
Il est possible que les MAs doubles aient une fausse rupture.
Le RSI peut générer des signaux erronés s'il n'est pas correctement réglé.
Suspendez les transactions lorsque l'ADX est inférieur à 20 pour éviter les transactions inversées sur les marchés sans direction.
La valeur de l'offre est calculée en fonction de la volatilité du marché.
La fréquence de négociation est élevée, les périodes de négociation sont ajustées à une fréquence de négociation inférieure.
Testez différentes périodes d'AM pour trouver la combinaison optimale.
Testez différents paramètres de l'indice de volatilité pour mieux évaluer le taux de surachat/de survente.
Ajoutez d'autres indicateurs comme les bandes de Bollinger, KDJ pour enrichir la logique.
Définir un stop loss dynamique basé sur différents produits et marchés.
Ajoutez le dimensionnement des positions pour mieux suivre les tendances.
Testez différents paramètres ADX pour trouver la meilleure valeur pour déterminer la force de la tendance.
Ajouter une fonction de perte d'arrêt automatique.
Cette stratégie identifie la direction de la tendance majeure en utilisant des MAs doubles, et utilise RSI, SAR pour un filtrage supplémentaire des signaux. Elle peut déterminer efficacement les points de renversement après l'optimisation des paramètres et capturer les tendances autour des renversements.
/*backtest start: 2023-10-10 00:00:00 end: 2023-11-09 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 //Based on Senpai BO 3 strategy(title="Senpai_Strat_3", shorttitle="Senpai_Strat_3", overlay=false, default_qty_type=strategy.percent_of_equity, default_qty_value=100) src = close //psar start = input(0.02) increment = input(0.02) maximum = input(0.2) psar = sar(start, increment, maximum) //ADX Init adxlen = input(30, title="ADX Smoothing") dilen = input(30, title="DI Length") dirmov(len) => up = change(high) down = -change(low) truerange = rma(tr, len) plus = fixnan(100 * rma(up > down and up > 0 ? up : 0, len) / truerange) minus = fixnan(100 * rma(down > up and down > 0 ? down : 0, len) / truerange) [plus, minus] adx(dilen, adxlen) => [plus, minus] = dirmov(dilen) sum = plus + minus adx = 100 * rma(abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen) [adx, plus, minus] [sig, up, down] = adx(dilen, adxlen) // BB Init source = close length = input(50, minval=1) mult = input(0.5, title="Mult Factor", minval=0.001, maxval=50) alertLevel=input(0.1) impulseLevel=input(0.75) showRange = input(false, type=bool) //RSI CODE up1 = rma(max(change(src), 0), 14) down1 = rma(-min(change(src), 0), 14) rsi = down1 == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up1 / down1)) //BB CODE basis = sma(source, length) dev = mult * stdev(source, length) upper = basis + dev lower = basis - dev bbr = source>upper?(((source-upper)/(upper-lower))/10): source<lower?(((source-lower)/(upper-lower))/10) : 0.05 bbi = bbr - nz(bbr[1]) //////////////////// Algo //if (rsi>50 and n1>n2) //strategy.exit("Close", "Short") // strategy.entry("Long", strategy.long) //if (rsi<50 and n2>n1) //strategy.exit("Close", "Long") // strategy.entry("Short", strategy.short) //col = ma30 > ma50 > ma200 and rsi <=53?lime: ma50 < ma200 and rsi >= 60?red : silver //short1 = sig<18.5 and high>=upper and rsi>=70 and psar<close = 100% //long1 = sig<18.5 and low<=lower and rsi<=30 and psar>close = 100% short1 = sig<18.5 and high>=upper and rsi>=70 and psar<close long1 = sig<18.5 and low<=lower and rsi<=30 and psar>close //Entry long = long1[1] == 0 and long1 == 1 short = short1[1] == 0 and short1 == 1 longclose = long[3] == 1 shortclose = short[3] == 1 strategy.entry("short", strategy.short,qty = 10, when=short) strategy.entry("long", strategy.long,qty=10, when=long) strategy.close("long",when=longclose) strategy.close("short",when=shortclose) ///////////////////// ///PLOT plot(long,"long",color=green,linewidth=1) plot(short,"short",color=red,linewidth=1) plot(longclose,"close",color=blue,linewidth=1) plot(shortclose,"close",color=orange,linewidth=1) //plot(short,"short",color=red,linewidth=1) // //strategy.exit(id="long",qty = 100000,when=longclose) //strategy.exit(id="short",qty = 100000,when=shortclose) //strategy.exit(id="Stop", profit = 20, loss = 100)