Stratégie de trading de croisement de l'indicateur JMA et de l'indicateur RSI


Date de création: 2023-09-18 21:42:50 Dernière modification: 2023-09-18 21:42:50
Copier: 0 Nombre de clics: 1340
1
Suivre
1617
Abonnés

Aperçu

La stratégie génère des signaux d’achat et de vente par la croisée de la moyenne mobile de Jurik (JMA) et de l’indicateur RSI. La stratégie tente d’utiliser la combinaison des deux indicateurs pour filtrer les faux signaux et de négocier lorsque la tendance est plus évidente.

Le principe

La stratégie utilise principalement deux indicateurs combinés:

  1. Indicateur JMA: une moyenne mobile lisse utilisant le multiplicateur de couches, avec moins de retard et capte plus rapidement les variations de prix.

  2. RSI: Indicateur de force et de faiblesse plus courant, qui reflète les forces d’achat et de vente du marché.

Lorsque le JMA traverse le RSI, cela indique que l’élan de hausse des prix à court terme est plus fort que la tendance à long terme, générant un signal d’achat; lorsque le JMA traverse le RSI, cela indique un signal de rupture.

Après l’émission du signal de croisement, le commerce ouvre une position dans la direction correspondante. Les conditions de placement sont que le prix dépasse le pourcentage de la cible spécifiée ou que l’indicateur se croise à nouveau.

Les avantages

  1. Les paramètres de l’indicateur JMA sont réglables et peuvent être optimisés pour différents cycles.

  2. L’indicateur RSI peut filtrer les fausses ruptures.

  3. La combinaison de deux indicateurs permet de réduire le nombre de faux signaux.

  4. Le blocage intégré permet de limiter les pertes.

  5. Le taux de profit personnalisable pour atteindre les objectifs de profit.

Risques et solutions

  1. La combinaison de deux indicateurs inating, la fréquence de production du signal peut être trop faible. Les paramètres peuvent être ajustés pour rendre l’indicateur plus sensible.

  2. L’indicateur JMA présente des problèmes de retard et peut manquer des points de basculement. Il peut être optimisé en combinaison avec d’autres indicateurs pionniers.

  3. Une mauvaise configuration du point de rupture peut être détectée et entraîner une expansion des pertes. Le point de rupture approprié doit être déterminé en fonction d’un test de données historiques.

  4. Il est possible d’ajouter des indicateurs de volume ou de volatilité pour filtrer les signaux.

Optimiser les idées

  1. Les paramètres JMA sont testés pour trouver la combinaison optimale.

  2. Essayez différents paramètres RSI pour optimiser l’effet de l’indicateur.

  3. L’ajout d’un mécanisme mobile d’arrêt des pertes rend l’arrêt des pertes plus adaptable.

  4. Optimiser la logique de gestion des emplacements d’entrepôt, comme l’ajout de conditions d’ajout et de construction par lots.

  5. Étudier d’autres indicateurs tels que le KD, le MACD, etc.

Résumer

La stratégie est basée sur le suivi de la tendance des deux indicateurs croisés JMA et RSI, les arrêts peuvent être configurés pour limiter le risque. Cependant, il existe encore une certaine probabilité de faux signaux, il est nécessaire de continuer à optimiser les paramètres de l’indicateur et les conditions de filtrage pour réduire les erreurs de trading.

Code source de la stratégie
/*backtest
start: 2023-01-01 00:00:00
end: 2023-03-15 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// Stratégie marche le mieux sur du 2 jours
strategy("JMA(7,50,RSI) crossing RSI(14,close)", overlay=false, currency=currency.EUR, default_qty_type=strategy.cash, default_qty_value=5000)

// Strategy Tester Start Time
sYear = input(2019, title = "Start Year")
sMonth = input(06, title = "Start Month", minval = 01, maxval = 12)
sDay = input(01, title = "Start Day", minval = 01, maxval = 31)
sHour = input(00, title = "Start Hour", minval = 00, maxval = 23)
sMinute = input(00, title = "Start Minute", minval = 00, maxval = 59)
startTime = true

// Strategy Tester End Time
eYear = input(2019, title = "End Year")
eMonth = input(12, title = "End Month", minval = 01, maxval = 12)
eDay = input(01, title = "End Day", minval = 01, maxval = 31)
eHour = input(00, title = "End Hour", minval = 00, maxval = 23)
eMinute = input(00, title = "End Minute", minval = 00, maxval = 59)
endTime = true

// === RSI ===
src = close, len = input(14, minval=1, title="Length")
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
plot(rsi, color=color.purple)
band1 = hline(70)
band0 = hline(30)

// === JMA ===
_length = input(7, title="Length")
_phase = input(50, title="Phase")
_power = input(2, title="Power")
highlightMovements = input(true, title="Highlight Movements ?")

// srcJMA = input(rsi, title="Source")
srcJMA = rsi

phaseRatio = _phase < -100 ? 0.5 : _phase > 100 ? 2.5 : _phase / 100 + 1.5
beta = 0.45 * (_length - 1) / (0.45 * (_length - 1) + 2)
alpha = pow(beta, _power)
jma = 0.0
e0 = 0.0
e0 := (1 - alpha) * srcJMA + alpha * nz(e0[1])
e1 = 0.0
e1 := (srcJMA - e0) * (1 - beta) + beta * nz(e1[1])
e2 = 0.0
e2 := (e0 + phaseRatio * e1 - nz(jma[1])) * pow(1 - alpha, 2) + pow(alpha, 2) * nz(e2[1])
jma := e2 + nz(jma[1])
// === End of JMA def ===

jmaColor = highlightMovements ? (jma > jma[1] ? color.green : color.red) : #6d1e7f
plot(jma, title="JMA switch", linewidth=2, color=jmaColor, transp=0)

// === Inputs ===
// risk management
useStop = input(true, title = "Use Initial Stop Loss?")

goLong() => crossover(rsi, jma)
killLong() => crossunder(rsi, jma)

// ======= DEBUGGGGGGGG ============
long_price = 0.0
short_price = 0.0

if(startTime and endTime)
    if(goLong())
        long_price := close
    strategy.entry("Buy", strategy.long, when = goLong())
    strategy.close("Buy", when = killLong() and close > long_price)

// Shorting if using
goShort() => killLong()
killShort() => goLong()

if(startTime and endTime)
    if(goShort())
        short_price := close
    strategy.entry("Sell", strategy.short, when = goShort() and close < short_price)
    strategy.close("Sell", when = killShort())
// =========================

if (useStop)
    strategy.exit("XLS", from_entry ="Buy", stop = strategy.position_avg_price / 1.08)
    strategy.exit("XSS", from_entry ="Sell", stop = strategy.position_avg_price * 1.08)