Basé sur un système de trading quantitatif double


Date de création: 2024-02-26 14:30:54 Dernière modification: 2024-02-26 14:30:54
Copier: 5 Nombre de clics: 654
1
Suivre
1617
Abonnés

Basé sur un système de trading quantitatif double

Cette stratégie est un système de trading composé d’une combinaison de l’indicateur CCI, de l’indicateur RSI et de deux moyennes mobiles. Ce système permet de capturer les tendances conventionnelles tout en utilisant le croisement de l’indicateur RSI pour augmenter la confirmation des opportunités d’entrée afin de filtrer certains bruits.

Principe de stratégie

La stratégie est basée principalement sur l’indicateur CCI pour déterminer la direction de la tendance. Si la valeur de l’indicateur CCI est supérieure à 100, c’est un marché à plusieurs têtes, et si elle est inférieure à 100, c’est un marché à tête nue. Le système utilise deux moyennes mobiles croisées pour aider à déterminer la direction de la tendance.

Après avoir identifié une tendance à la hausse, le système utilise ensuite le croisement de deux indicateurs RSI de longueurs de paramètres différentes comme vérification d’entrée. Par exemple, dans un marché à plusieurs têtes, si l’indicateur RSI à courte période traverse l’indicateur RSI à longue période, un signal d’achat final est fourni. Cette conception est principalement conçue pour filtrer le bruit et éviter que les ajustements à court terme dans la tendance entraînent de mauvaises transactions.

Cette stratégie consiste à ouvrir une position uniquement à l’heure de la transaction indiquée et à la clôturer 15 minutes avant la clôture, afin d’éviter le risque du jour au lendemain.

Analyse des avantages

  • La combinaison d’un jugement de tendance et d’un croisement d’indicateurs permet d’identifier efficacement les tendances et de filtrer le bruit pour une entrée précise.
  • Utiliser le stop-loss mobile pour contrôler activement les risques et éviter que le stop-loss ne soit poursuivi
  • Ne vous positionnez qu’à des heures désignées pour éviter le risque de sauter en l’air la nuit
  • Les paramètres de l’indicateur RSI peuvent être ajustés pour s’adapter à différents environnements de marché

Analyse des risques

  • L’indicateur CCI est moins efficace pour juger les marchés exceptionnellement volatils
  • Les conditions de croisement du double RSI sont plus contraignantes et peuvent laisser passer certaines opportunités
  • Les paramètres d’arrêt mobile peuvent être trop subjectifs et doivent être optimisés
  • Les heures de négociation spécifiées peuvent être manquées en raison de la fuite des nouvelles importantes de la nuit

Conseils d’optimisation

  • Test des indices CCI avec différents paramètres pour trouver la meilleure combinaison de paramètres
  • Test pour voir si on peut annuler les conditions de restriction croisée RSI et se placer directement sur le CCI
  • Optimisation des paramètres de stop-loss mobiles pour trouver les paramètres optimaux
  • Tester l’élimination de la logique de placement obligatoire et le suivi des arrêts de perte mobiles pendant la période de détention pour maximiser les bénéfices

Résumer

Cette stratégie intégrée prend en compte le jugement des tendances et la vérification croisée des indicateurs, tout en contrôlant les risques et en assurant l’efficacité des signaux de négociation. Grâce à l’optimisation des paramètres et à l’ajustement logique, la stratégie peut encore augmenter l’espace de profit et réduire les chances de manquement.

Code source de la stratégie
/*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")