Stratégie de trading Golden Cross à trois moyennes mobiles


Date de création: 2024-01-16 18:18:02 Dernière modification: 2024-01-16 18:18:02
Copier: 0 Nombre de clics: 724
1
Suivre
1617
Abonnés

Stratégie de trading Golden Cross à trois moyennes mobiles

Aperçu

La stratégie de croisement triangulaire de l’or est une stratégie d’analyse technique typique. Elle utilise trois moyennes mobiles de différentes longueurs de temps pour capturer la tendance et réaliser des transactions à faible risque. Elle génère un signal d’achat lorsque la moyenne mobile à court terme est traversée par la moyenne mobile à moyen terme et que la moyenne mobile à moyen terme est supérieure à la moyenne mobile à long terme.

Principe de stratégie

La stratégie de croisement triangulaire en or s’appuie principalement sur trois moyennes mobiles pour déterminer la direction de la tendance. Les moyennes mobiles à court terme sont sensibles aux variations de prix; les moyennes mobiles à moyen terme offrent une meilleure clarté de jugement de la tendance; les moyennes mobiles à long terme filtrent le bruit du marché et déterminent la direction de la tendance à long terme.

Lorsque la moyenne mobile à court terme traverse la moyenne mobile à moyen terme, cela indique que le prix commence à rebondir vers le haut; si la moyenne mobile à moyen terme est supérieure à la moyenne mobile à long terme, cela indique qu’elle est actuellement en hausse et génère donc un signal d’achat.

En revanche, lorsque la moyenne mobile à court terme passe sous la moyenne mobile à moyen terme, cela signifie que le prix a commencé à faire une percée vers le bas; à ce moment-là, si la moyenne mobile à moyen terme est inférieure à la moyenne mobile à long terme, cela indique qu’elle est actuellement en baisse, donc un signal de vente est généré.

La stratégie définit simultanément un stop loss et un stop stop. Après la transaction, le stop loss et le stop price sont calculés en fonction du ratio de stop loss et de stop stop que vous avez défini. Si le prix atteint le stop loss ou le stop stop, vous quittez la position.

Avantages stratégiques

  • Utiliser trois moyennes mobiles pour évaluer les tendances de manière plus précise
  • La mise en place d’un stop-loss permet de contrôler efficacement le risque d’une seule transaction
  • Paramètres de moyenne mobile personnalisables pour différentes variétés
  • Sélectionnez parmi sept types de moyennes mobiles, avec de nombreuses stratégies

Risques stratégiques et solutions

  • Les triangles peuvent produire des signaux erronés lorsqu’ils sont alignés.

Solution: Ajustez les paramètres de la moyenne mobile pour éviter de générer des signaux erronés

  • Réglage de l’arrêt de perte excessif

Solution: Ajustez correctement le ratio de stop-loss, pas trop grand ni trop petit

  • Paramètres mal configurés, entraînant une fréquence de transaction trop élevée ou trop faible

La solution: tester différents paramètres pour trouver la combinaison optimale

Orientation de l’optimisation de la stratégie

Les stratégies d’intersection triangulaire en or peuvent être optimisées dans les domaines suivants:

  • Tester différents types et longueurs de paramètres pour trouver le paramètre optimal

Des combinaisons de moyennes mobiles de différentes longueurs ou de différents types peuvent être testées pour obtenir les meilleures performances commerciales

  • Ajout de filtres pour d’autres indicateurs techniques

D’autres indicateurs peuvent être ajoutés à la stratégie, tels que KDJ, MACD, etc., pour effectuer une vérification multifactorielle, filtrer les signaux erronés

  • Paramètres de sélection en fonction des différentes variétés

On peut raccourcir le cycle des moyennes mobiles pour les variétés à forte oscillation; augmenter le cycle des moyennes mobiles pour les variétés à faible oscillation

  • L’apprentissage automatique pour trouver la combinaison optimale de paramètres

L’algorithme parcourt automatiquement l’espace des paramètres pour localiser rapidement les paramètres optimaux

Résumer

La stratégie de la croix d’or triangulaire est une stratégie de suivi de tendance plus simple et pratique dans l’ensemble. Elle utilise simultanément trois moyennes mobiles pour capturer la direction de la tendance, définir le risque de contrôle de stop-loss et obtenir des rendements stables. L’optimisation des paramètres et l’ajout d’autres indicateurs techniques peuvent améliorer encore l’efficacité de la stratégie.

Code source de la stratégie
/*backtest
start: 2024-01-08 00:00:00
end: 2024-01-15 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Kozlod - 3 MA strategy with SL/PT", shorttitle="kozlod_3ma", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 5)

// 
// author: Kozlod
// date: 2018-03-25
// 

////////////
// INPUTS //
////////////

ma_type        = input(title = "MA Type",            defval = "SMA", options = ['SMA', 'EMA', 'WMA', 'VWMA', 'HMA', 'SMMA', 'DEMA'])
short_ma_len   = input(title = "Short MA Length",    defval = 5,     minval = 1)
short_ma_src   = input(title = "Short MA Source",    defval = close)
medium_ma_len  = input(title = "Medium MA Length",   defval = 20,    minval = 2)
medium_ma_src  = input(title = "Medium MA Source",   defval = close)
long_ma_len    = input(title = "Long MA Length",     defval = 100,   minval = 3)
long_ma_src    = input(title = "Long MA Source",     defval = close)

sl_lev_perc    = input(title = "SL Level % (0 - Off)", type = float,   defval = 0,  minval = 0, step = 0.01)
pt_lev_perc    = input(title = "PT Level % (0 - Off)", type = float,   defval = 0,  minval = 0, step = 0.01)

// Set initial values to 0
short_ma  = 0.0
long_ma   = 0.0
medium_ma = 0.0

// Simple Moving Average (SMA)
if ma_type == 'SMA' 
    short_ma  := sma(short_ma_src,  short_ma_len)
    medium_ma := sma(medium_ma_src, medium_ma_len)
    long_ma   := sma(long_ma_src,   long_ma_len)

// Exponential Moving Average (EMA)
if ma_type == 'EMA'
    short_ma  := ema(short_ma_src,  short_ma_len)
    medium_ma := ema(medium_ma_src, medium_ma_len)
    long_ma   := ema(long_ma_src,   long_ma_len)

// Weighted Moving Average (WMA)
if ma_type == 'WMA'
    short_ma  := wma(short_ma_src,  short_ma_len)
    medium_ma := wma(medium_ma_src, medium_ma_len)
    long_ma   := wma(long_ma_src,   long_ma_len)

// Hull Moving Average (HMA)
if ma_type == 'HMA'
    short_ma  := wma(2*wma(short_ma_src,  short_ma_len  / 2) - wma(short_ma_src,  short_ma_len),  round(sqrt(short_ma_len)))
    medium_ma := wma(2*wma(medium_ma_src, medium_ma_len / 2) - wma(medium_ma_src, medium_ma_len), round(sqrt(medium_ma_len)))
    long_ma   := wma(2*wma(long_ma_src,   long_ma_len   / 2) - wma(long_ma_src,   long_ma_len),   round(sqrt(long_ma_len)))

// Volume-weighted Moving Average (VWMA)
if ma_type == 'VWMA'
    short_ma  := vwma(short_ma_src,  short_ma_len)
    medium_ma := vwma(medium_ma_src, medium_ma_len)
    long_ma   := vwma(long_ma_src,   long_ma_len)

// Smoothed Moving Average (SMMA)    
if ma_type == 'SMMA'
    short_ma  := na(short_ma[1])  ? sma(short_ma_src, short_ma_len)   : (short_ma[1]  * (short_ma_len  - 1) + short_ma_src)  / short_ma_len
    medium_ma := na(medium_ma[1]) ? sma(medium_ma_src, medium_ma_len) : (medium_ma[1] * (medium_ma_len - 1) + medium_ma_src) / medium_ma_len
    long_ma   := na(long_ma[1])   ? sma(long_ma_src,  long_ma_len)    : (long_ma[1]   * (long_ma_len   - 1) + long_ma_src)   / long_ma_len

// Double Exponential Moving Average (DEMA)
if ma_type == 'DEMA'
    e1_short  = ema(short_ma_src , short_ma_len)
    e1_medium = ema(medium_ma_src, medium_ma_len)
    e1_long   = ema(long_ma_src,   long_ma_len)
    
    short_ma  := 2 * e1_short  - ema(e1_short,  short_ma_len)
    medium_ma := 2 * e1_medium - ema(e1_medium, medium_ma_len)
    long_ma   := 2 * e1_long   - ema(e1_long,   long_ma_len)

/////////////
// SIGNALS //
/////////////

long_signal  = crossover( short_ma, medium_ma) and medium_ma > long_ma
short_signal = crossunder(short_ma, medium_ma) and medium_ma < long_ma

// Calculate PT/SL levels 
// Initial values 
last_signal    = 0
prev_tr_price  = 0.0
pt_level       = 0.0
sl_level       = 0.0

// Calculate previous trade price
prev_tr_price := (long_signal[1] and nz(last_signal[2]) != 1) or (short_signal[1] and nz(last_signal[2]) != -1) ? open : nz(last_signal[1]) != 0 ? prev_tr_price[1] : na

// Calculate SL/PT levels 
pt_level := nz(last_signal[1]) == 1 ? prev_tr_price * (1 + pt_lev_perc / 100) : nz(last_signal[1]) == -1 ? prev_tr_price * (1 - pt_lev_perc / 100)  : na
sl_level := nz(last_signal[1]) == 1 ? prev_tr_price * (1 - sl_lev_perc / 100) : nz(last_signal[1]) == -1 ? prev_tr_price * (1 + sl_lev_perc / 100)  : na

// Calculate if price hit sl/pt 
long_hit_pt = pt_lev_perc > 0 and nz(last_signal[1]) ==  1 and close >= pt_level
long_hit_sl = sl_lev_perc > 0 and nz(last_signal[1]) ==  1 and close <= sl_level

short_hit_pt = pt_lev_perc > 0 and nz(last_signal[1]) ==  -1 and close <= pt_level
short_hit_sl = sl_lev_perc > 0 and nz(last_signal[1]) ==  -1 and close >= sl_level

// What is last active trade? 
last_signal := long_signal ? 1 : short_signal ? -1 : long_hit_pt or long_hit_sl or short_hit_pt or short_hit_sl ? 0 : nz(last_signal[1])

//////////////
// PLOTTING //
//////////////

// Plot MAs
plot(short_ma,  color = red,    linewidth = 2)
plot(medium_ma, color = green,  linewidth = 2)
plot(long_ma,   color = yellow, linewidth = 2)


// Plot Levels 
plotshape(prev_tr_price, style = shape.cross, color = gray, location  = location.absolute, size = size.small)


plotshape(sl_lev_perc > 0 ? sl_level : na, style = shape.cross, color = red,   location  = location.absolute, size = size.small)
plotshape(pt_lev_perc > 0 ? pt_level : na, style = shape.cross, color = green, location  = location.absolute, size = size.small)

//////////////
// STRATEGY //
//////////////

strategy.entry("long",  true,  when = long_signal)
strategy.entry("short", false, when = short_signal)

strategy.close("long",  when = long_hit_pt  or long_hit_sl)
strategy.close("short", when = short_hit_pt or short_hit_sl)