Stratégie de trading à limite de temps Double MA


Date de création: 2023-11-14 16:45:03 Dernière modification: 2023-11-14 16:45:03
Copier: 0 Nombre de clics: 654
1
Suivre
1617
Abonnés

Stratégie de trading à limite de temps Double MA

Aperçu

Cette stratégie est basée sur la stratégie de trading bi-parallèle d’origine, avec l’ajout d’un module de limitation de temps pour contrôler le temps de démarrage de la stratégie. Ce module permet de gérer efficacement le temps de fonctionnement de la stratégie et de réduire le risque de trading dans des conditions de marché non idéales.

Le principe

La stratégie utilise la MA rapide et la MA lente pour construire des signaux de négociation. La MA rapide a un paramètre de 14 jours et la MA lente de 21 jours. Elle génère un signal d’achat lorsqu’elle traverse la MA lente au-dessus de la MA rapide et un signal de vente lorsqu’elle traverse la MA lente en dessous de la MA rapide.

La stratégie a également introduit une option de retournement de transaction qui permet de renverser la direction du signal de transaction original.

Le module de limitation de temps compare l’heure actuelle à l’heure de démarrage définie par la barre de temps et renvoie la valeur vraie pour contrôler si la stratégie est lancée. Le module doit définir l’année, le mois, la journée, l’heure et l’heure de démarrage. La stratégie ne sera lancée que si l’heure actuelle dépasse l’heure de démarrage.

Les avantages

  • L’utilisation de la double MA pour former des signaux de négociation permet de capturer efficacement les tendances à court et moyen terme.
  • Ajout d’un module de limitation de temps permettant un contrôle plus précis du temps de fonctionnement de la stratégie et évitant les transactions inutiles dans des conditions de marché non idéales
  • L’option de renversement de transaction accroît la flexibilité de la stratégie

Risques et solutions

  • Les stratégies de double MA peuvent générer plusieurs signaux de transaction, entraînant une fréquence de transaction et des coûts de transaction plus élevés.
  • Une mauvaise configuration du module de limitation de temps peut entraîner des opportunités de trading manquées
  • Une mauvaise sélection d’un renversement de transaction peut entraîner une erreur de signal

Il est possible d’optimiser de manière appropriée les paramètres du cycle MA, de réduire la fréquence des transactions. En même temps, il est possible de définir raisonnablement le temps de démarrage du module, afin d’éviter de manquer une occasion. Enfin, selon les différentes conditions du marché, il est judicieux de choisir s’il est nécessaire d’inverser la direction du signal de négociation.

Direction d’optimisation

  • L’ajout d’un module de stop loss permet de mieux contrôler le risque d’une seule transaction
  • Augmentation du suivi des arrêts mobiles, permettant de déplacer progressivement les arrêts en fonction de la tendance et d’obtenir un suivi des gains
  • La combinaison de signaux d’exploitation de plusieurs normes améliore la qualité du signal et réduit les faux signaux
  • Développer un module d’optimisation des paramètres permettant de trouver automatiquement la meilleure combinaison de paramètres

Résumer

Cette stratégie permet de capturer efficacement les tendances, tout en évitant les risques dans des conditions de marché non idéales. La stratégie peut également être améliorée par des moyens tels que l’optimisation des paramètres, l’arrêt des modules de perte et l’exploitation de cross-paramètres, ce qui améliore la stabilité et la rentabilité de chaque transaction tout en réduisant la fréquence des transactions.

Code source de la stratégie
/*backtest
start: 2023-11-06 00:00:00
end: 2023-11-13 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2

strategy(title = "Strategy Code Example", shorttitle = "Strategy Code Example", overlay = true)

// Revision:        1
// Author:          @JayRogers
//
// *** THIS IS JUST AN EXAMPLE OF STRATEGY TIME LIMITING ***
//
//  This is a follow up to my previous strategy example for risk management, extended to include a time limiting factor.

// === GENERAL INPUTS ===
// short ma
maFastSource   = input(defval = open, title = "Fast MA Source")
maFastLength   = input(defval = 14, title = "Fast MA Period", minval = 1)
// long ma
maSlowSource   = input(defval = open, title = "Slow MA Source")
maSlowLength   = input(defval = 21, title = "Slow MA Period", minval = 1)

// === STRATEGY RELATED INPUTS ===
tradeInvert     = input(defval = false, title = "Invert Trade Direction?")
// Risk management
inpTakeProfit   = input(defval = 1000, title = "Take Profit", minval = 0)
inpStopLoss     = input(defval = 200, title = "Stop Loss", minval = 0)
inpTrailStop    = input(defval = 200, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)
// *** FOCUS OF EXAMPLE ***
// Time limiting
// a toggle for enabling/disabling
useTimeLimit    = input(defval = true, title = "Use Start Time Limiter?")
// set up where we want to run from
startYear       = input(defval = 2016, title = "Start From Year",  minval = 0, step = 1)
startMonth      = input(defval = 05, title = "Start From Month",  minval = 0,step = 1)
startDay        = input(defval = 01, title = "Start From Day",  minval = 0,step = 1)
startHour       = input(defval = 00, title = "Start From Hour",  minval = 0,step = 1)
startMinute     = input(defval = 00, title = "Start From Minute",  minval = 0,step = 1)

// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

// *** FOCUS OF EXAMPLE ***
// === TIME LIMITER CHECKING FUNCTION ===
// using a multi line function to return true or false depending on our input selection
// multi line function logic must be indented.
startTimeOk() =>
    // get our input time together
    inputTime   = timestamp(syminfo.timezone, startYear, startMonth, startDay, startHour, startMinute)
    // check the current time is greater than the input time and assign true or false
    timeOk      = time > inputTime ? true : false
    // last line is the return value, we want the strategy to execute if..
    // ..we are using the limiter, and the time is ok -OR- we are not using the limiter
    r = (useTimeLimit and timeOk) or not useTimeLimit

// === SERIES SETUP ===
/// a couple of ma's..
maFast = ema(maFastSource, maFastLength)
maSlow = ema(maSlowSource, maSlowLength)

// === PLOTTING ===
fast = plot(maFast, title = "Fast MA", color = green, linewidth = 2, style = line, transp = 50)
slow = plot(maSlow, title = "Slow MA", color = red, linewidth = 2, style = line, transp = 50)

// === LOGIC ===
// is fast ma above slow ma?
aboveBelow = maFast >= maSlow ? true : false
// are we inverting our trade direction?
tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? true : false

// *** FOCUS OF EXAMPLE ***
// wrap our strategy execution in an if statement which calls the time checking function to validate entry
// like the function logic, content to be included in the if statement must be indented.
if( startTimeOk() )
    // === STRATEGY - LONG POSITION EXECUTION ===
    enterLong = not tradeDirection[1] and tradeDirection
    exitLong = tradeDirection[1] and not tradeDirection
    strategy.entry( id = "Long", long = true, when = enterLong )
    strategy.close( id = "Long", when = exitLong )
    
    // === STRATEGY - SHORT POSITION EXECUTION ===
    enterShort = tradeDirection[1] and not tradeDirection
    exitShort = not tradeDirection[1] and tradeDirection
    strategy.entry( id = "Short", long = false, when = enterShort )
    strategy.close( id = "Short", when = exitShort )
    
    // === STRATEGY RISK MANAGEMENT EXECUTION ===
    strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
    strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)