Le système de négociation en quantités doubles

Auteur:ChaoZhang est là., Date: 2024-02-26 14:30:54 Je vous en prie.
Les étiquettes:

img

Cette stratégie combine l'indicateur CCI, l'indicateur RSI et deux moyennes mobiles dans un système de trading composé.

Principe de stratégie

La stratégie utilise principalement l'indicateur CCI pour déterminer la direction de la tendance. Les lectures CCI supérieures à 100 indiquent un marché haussier, tandis que celles inférieures à -100 indiquent un marché baissier.

Après avoir déterminé la tendance haussière ou baissière, le système utilise ensuite le croisement de deux RSI avec des longueurs de paramètres différentes comme vérification d'entrée. Par exemple, dans un marché haussier, si le RSI à court terme dépasse le RSI à long terme, c'est le signal d'achat final.

La stratégie n'ouvre des positions que pendant la session de négociation spécifiée, fermant activement toutes les positions 15 minutes avant la clôture pour éviter le risque du jour au lendemain.

Analyse des avantages

  • La combinaison du jugement de tendance et des croisements d'indicateurs permet d'identifier efficacement les tendances et de filtrer le bruit pour des entrées précises
  • Utiliser des arrêts de trail pour contrôler activement les risques évite d'être arrêté en raison de crashs flash
  • Seule l'ouverture de positions au cours de séances de négociation spécifiées permet d'éviter le risque de déficit du jour au lendemain
  • Les paramètres RSI réglables peuvent s'adapter de manière flexible à différents environnements de marché

Analyse des risques

  • La CCI affiche de mauvaises performances sur des marchés exceptionnellement volatils
  • Les conditions croisées du double RSI sont relativement strictes, ce qui peut entraîner une perte de certaines opportunités
  • Les arrêts de traînée pourraient être trop subjectifs, nécessitant une optimisation des paramètres
  • Des sessions de négociation spécifiées peuvent manquer de grandes nouveautés de nuit

Suggestions d'optimisation

  • Testez différentes combinaisons de paramètres CCI pour trouver les paramètres optimaux
  • Test supprimant la condition de croisement RSI et en entrant directement en fonction de l'ICC
  • Test de retour et optimisation des paramètres d'arrêt de trail pour trouver les paramètres optimaux
  • Testez en supprimant la logique de fermeture de position forcée et suivez les bénéfices avec des arrêts de suivi pendant les positions pour maximiser les bénéfices

Résumé

Cette stratégie prend en compte de manière exhaustive la détermination de la tendance et la validation croisée des indicateurs pour assurer la validité du signal tout en contrôlant le risque.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 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/
// © rwestbrookjr

//@version=5
strategy("EMA with RSI Cross Strategy", overlay=true)

//EMA
fastLen = input(title='Fast EMA Length', defval=9)
slowLen = input(title='Slow EMA Length', defval=20)

fastEMA = ta.ema(close, fastLen)
slowEMA = ta.ema(close, slowLen)

fema = plot(fastEMA, title='FastEMA', color=color.new(color.green, 0), linewidth=1, style=plot.style_line)
sema = plot(slowEMA, title='SlowEMA', color=color.new(color.red, 0), linewidth=1, style=plot.style_line)

fill(fema, sema, color=fastEMA > slowEMA ? color.new(#417505, 50) : color.new(#890101, 50), title='Cloud')

// Bull and Bear Alerts
//Bull = ta.crossover(fastEMA, slowEMA)
Bull = fastEMA > slowEMA
//Bear = ta.crossunder(fastEMA, slowEMA)
Bear = fastEMA < slowEMA

//RSIs
rsiLength1Input = input.int(9, minval=1, title="RSI Length", group="RSI Settings")
rsiSource1Input = input.source(close, "Source", group="RSI Settings")
rsiLength2Input = input.int(20, minval=1, title="RSI Length", group="RSI Settings")
rsiSource2Input = input.source(close, "Source", group="RSI Settings")

up1 = ta.rma(math.max(ta.change(rsiSource1Input), 0), rsiLength1Input)
down1 = ta.rma(-math.min(ta.change(rsiSource1Input), 0), rsiLength1Input)
rsi = down1 == 0 ? 100 : up1 == 0 ? 0 : 100 - (100 / (1 + up1 / down1))
up2 = ta.rma(math.max(ta.change(rsiSource2Input), 0), rsiLength2Input)
down2 = ta.rma(-math.min(ta.change(rsiSource2Input), 0), rsiLength2Input)
rsi2 = down2 == 0 ? 100 : up2 == 0 ? 0 : 100 - (100 / (1 + up2 / down2))

//CCI
cciLength = input.int(20, minval=1)
src = input(hlc3, title="Source")
ma = ta.sma(src, cciLength)
cci = (src - ma) / (0.015 * ta.dev(src, cciLength))

//Trail Stop Setup
trstp = input.float(title="Trail Loss($)", minval = 0.0, step = 0.01, defval = 0.5)

longStop = 0.0, shortStop = 0.0

longStop := if Bull
    stopValue = close - trstp
    math.max(stopValue, longStop[1])
else
    0.0

shortStop := if Bear
    stopValue = close + trstp
    math.min(stopValue, shortStop[1])
else
    999999


//Session Setup
open_session=input(defval="0930-1545")
session = time("1", open_session)
validSession=(na(session) ? 0 : 1)

//Trade Signals
longCondition = Bull and cci > 100 and ta.crossover(rsi,rsi2) and validSession
if (longCondition)
    strategy.entry("Long", strategy.long, 1)
    
//longExit = close > strategy.opentrades.entry_price(0) + 1.5 or close < strategy.opentrades.entry_price(0) - 0.75
longExit = close < longStop or not validSession
if (longExit)
    strategy.close("Long")

shortCondition = Bear and cci < 100 and ta.crossunder(rsi,rsi2) and validSession
if (shortCondition)
    strategy.entry("Short", strategy.short, 1)

//shortExit = close < strategy.opentrades.entry_price(0) - 1.5 or close > strategy.opentrades.entry_price(0) + 0.75
shortExit = close > shortStop or not validSession
if (shortExit)
    strategy.close("Short")


Plus de