Stratégie de négociation de la JMA pour franchir le RSI

Auteur:ChaoZhang est là., Date: le 18 septembre 2023 à 21h52:50
Les étiquettes:

Résumé

Cette stratégie génère des signaux de trading en croisant l'indicateur JMA et l'indicateur RSI.

Principaux

La stratégie utilise principalement deux types d'indicateurs:

  1. Indicateur JMA: Moyenne mobile lissée utilisant des multiplicateurs de puissance, avec un décalage plus faible et une capture plus rapide des variations de prix.

  2. Indicateur RSI: Indicateur commun de force reflétant la dynamique d'achat/de vente.

Lorsque le JMA dépasse le RSI, il indique une tendance haussière à court terme plus forte que la tendance à long terme et génère un signal d'achat.

À la signalisation, la stratégie entre dans le commerce dans la direction correspondante.

Les avantages

  1. Paramètres JMA réglables et adaptables à différentes périodes.

  2. Le RSI filtre les fausses fuites.

  3. La combinaison de deux indicateurs réduit les faux signaux.

  4. Contrôle des pertes par arrêt intégré.

  5. Ratio de profit personnalisable pour le ciblage du profit.

Risques et atténuations

  1. Une combinaison de deux indicateurs peut générer trop peu de signaux, peut modifier les paramètres de sensibilité.

  2. JMA a encore du retard, peut manquer des points tournants, peut optimiser avec des indicateurs de pointe.

  3. Un mauvais placement de stop loss peut entraîner une plus grande perte.

  4. Une trop grande dépendance aux indicateurs peut produire de faux signaux, ajouter des filtres de volume ou de volatilité.

Des possibilités d'amélioration

  1. Testez les paramètres JMA pour trouver les paramètres optimaux.

  2. Essayez différents paramètres RSI pour une meilleure performance.

  3. Ajouter un mécanisme d'arrêt de traînée pour les arrêts adaptatifs.

  4. Optimiser la taille des positions d'entrée comme ajouter à des transactions gagnantes.

  5. Recherchez des filtres supplémentaires comme KD, MACD.

Résumé

La stratégie permet de suivre la tendance avec des croisements JMA et RSI et limite le risque via des arrêts. Mais les faux signaux restent probables, nécessitant une optimisation supplémentaire des paramètres et des filtres.


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



Plus de