Stratégie de croisement des cours de clôture mensuels et des moyennes mobiles


Date de création: 2023-11-23 17:09:01 Dernière modification: 2023-11-23 17:09:01
Copier: 0 Nombre de clics: 570
1
Suivre
1617
Abonnés

Stratégie de croisement des cours de clôture mensuels et des moyennes mobiles

Aperçu

Cette stratégie utilise le croisement de la clôture de la lune avec la moyenne mobile pour générer un signal de négociation. Lorsque la clôture de la lune est au-dessus de la moyenne mobile, faites plus; lorsque la clôture de la lune est au-dessous de la moyenne mobile, faites moins.

Principe de stratégie

La logique de cette stratégie est la suivante:

  1. Entrez le paramètre de périodicité de la moyenne mobile et sélectionnez SMA ou EMA
  2. Vous pouvez choisir d’afficher la moyenne mobile
  3. Le prix de clôture d’une autre action peut être choisi comme signal
  4. Signal de négociation basé sur la relation entre la clôture du mois et la moyenne mobile
    • Le prix de clôture est en moyenne mobile, faites plus
    • Moyenne mobile au-dessous du prix de clôture, plage

Cette stratégie utilise la caractéristique de l’aplatissement de la moyenne mobile pour filtrer une partie du bruit des prix et capturer le renversement de la tendance à moyen terme des actions. Lorsque le cours d’une action est au-dessus de la moyenne, cela indique que le cours de l’action est en train de se former une tendance haussière; lorsque le cours d’une action est en dessous de la moyenne, cela indique que la tendance des actions est en train de se transformer en un marché baissier.

Avantages stratégiques

La stratégie présente les principaux avantages suivants:

  1. L’utilisation de données lunaires pour filtrer efficacement le bruit de la nuit et capturer les tendances à moyen et long terme des cours
  2. Période de moyenne mobile personnalisable, paramètres optimisés pour s’adapter à différentes actions
  3. Le choix d’une autre action comme source de signal contribue à la stabilité
  4. La technologie anti-repainting avancée est utilisée pour empêcher le retour en arrière
  5. On peut entrer des périodes de temps de rétro-mesure aléatoires pour une optimisation des tests

Dans l’ensemble, le cadre de la stratégie est simple et pratique et peut être appliqué à la plupart des actions grâce à l’optimisation des paramètres, en particulier pour les investisseurs de taille moyenne et longue.

Risque stratégique

Cette stratégie comporte également des risques, principalement liés aux aspects suivants:

  1. Les données mensuelles sont plus lentes et ne reflètent pas les variations des prix en temps réel.
  2. Il y a un certain retard et des opportunités de transactions courtes peuvent être manquées.
  3. Les moyennes mobiles sont retardées et ne peuvent pas être contrôlées au moment de la production du signal.
  4. Une mauvaise sélection de paramètres peut entraîner une surconservation ou un manque d’opportunité

Pour réduire les risques, il est possible d’optimiser les choses de la manière suivante:

  1. Indicateurs techniques associés à des délais plus courts pour un jugement auxiliaire
  2. Ajustez le cycle de la moyenne mobile pour trouver la meilleure combinaison de paramètres
  3. Utilisation d’un indicateur plus stable comme source de signal
  4. Adaptation appropriée de la taille de la position pour contrôler les pertes ponctuelles

Orientation de l’optimisation de la stratégie

La stratégie a également beaucoup de marge d’optimisation, principalement dans les domaines suivants:

  1. Augmentation des stratégies de stop-loss afin de bloquer les bénéfices et de contrôler les risques
  2. En combinaison avec d’autres indicateurs, tels que KD, MACD, etc., améliorer la précision des signaux de négociation
  3. Optimisation dynamique des paramètres de moyenne mobile à l’aide de l’apprentissage automatique
  4. Ajout d’un module de gestion des positions pour que les positions changent avec la tendance allocatorsize
  5. Fonctionnalité de conversion multicouche ajoutée, flexible en fonction des conditions du marché
  6. joining des lignes K avec des délais plus courts pour des transactions plus sensibles

Résumer

L’idée générale de la stratégie de croisement de la ligne de clôture mensuelle et de la ligne de la moyenne mobile est claire et facile à mettre en œuvre. Elle peut s’appliquer à différentes actions en ajustant les paramètres. Elle convient particulièrement aux investisseurs de moyenne et longue ligne.

Code source de la stratégie
/*backtest
start: 2022-11-16 00:00:00
end: 2023-11-22 00:00:00
period: 1d
basePeriod: 1h
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/
// © universique

//@version=4
strategy("Monthly MA Close ", shorttitle="MMAC", overlay=true, default_qty_type =  strategy.percent_of_equity, default_qty_value = 100)
//MAY 6 2020 18:00

// No repaint function 
// Function to securely and simply call `security()` so that it never repaints and never looks ahead.
f_secureSecurity(_symbol, _res, _src) => security(_symbol, _res, _src[1], lookahead = barmerge.lookahead_on)
//sec10 = f_secureSecurity(syminfo.tickerid, higherTf, data)

// ————— Converts current chart resolution into a float minutes value.
f_resInMinutes() => 
    _resInMinutes = timeframe.multiplier * (
      timeframe.isseconds ? 1. / 60             :
      timeframe.isminutes ? 1.                  :
      timeframe.isdaily   ? 60. * 24            :
      timeframe.isweekly  ? 60. * 24 * 7        :
      timeframe.ismonthly ? 60. * 24 * 30.4375  : na)
// ————— Returns the float minutes value of the string _res.
f_tfResInMinutes(_res) =>
    // _res: resolution of any TF (in "timeframe.period" string format).
    // Dependency: f_resInMinutes().
    security(syminfo.tickerid, _res, f_resInMinutes())

// —————————— Determine if current timeframe is smaller that higher timeframe selected in Inputs.
// Get higher timeframe in minutes.
//higherTfInMinutes = f_tfResInMinutes(higherTf)
// Get current timeframe in minutes.
currentTfInMinutes = f_resInMinutes()
// Compare current TF to higher TF to make sure it is smaller, otherwise our plots don't make sense.
//chartOnLowerTf = currentTfInMinutes < higherTfInMinutes

// Input
switch1=input(true, title="Show MA")
exponential = input(true, title="Exponential MA")
ticker = input(false, title="Other ticker MA")

tic_ma = input(title="Ticker MA", type=input.symbol, defval="BTC_USDT:swap")
res_ma = input(title="Time MA (W, D, [min])", type=input.string, defval="M")
len_ma = input(8, minval=1, title="Period MA")

ma_cus = exponential?f_secureSecurity(tic_ma, res_ma, ema(close,len_ma)) : f_secureSecurity(tic_ma, res_ma, sma(close,len_ma))
ma_long = exponential?f_secureSecurity(syminfo.tickerid, res_ma, ema(close,len_ma)) : f_secureSecurity(syminfo.tickerid, res_ma, sma(close,len_ma))

cl1 = f_secureSecurity(syminfo.tickerid, 'M', close)
cl2 = f_secureSecurity(tic_ma, 'M', close)

// Input Backtest Range
showDate  = input(defval = false, title = "Show Date Range", type = input.bool)
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 1995, title = "From Year",       type = input.integer, minval = 1850)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1850)

// Funcion Example
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false       // create function "within window of time"

// Calculation
bullish_cross = ticker?cl2>ma_cus : cl1>ma_long
bearish_cross = ticker?cl2<ma_cus : cl1<ma_long

MAColor = bullish_cross ? color.green : bearish_cross ? color.red : color.orange

// Strategy
strategy.entry("long", strategy.long, when = window() and bullish_cross)
strategy.close("long", when = window() and bearish_cross)

// Output
plot(switch1?ma_long:na,color = MAColor,linewidth=4)

// Alerts
alertcondition(bullish_cross, title='Bullish', message='Bullish')
alertcondition(bearish_cross, title='Bearish', message='Bearish')