Stratégie de trading de suivi de tendance basée sur l'indicateur MACD


Date de création: 2023-09-27 16:46:38 Dernière modification: 2023-09-27 16:46:38
Copier: 1 Nombre de clics: 651
1
Suivre
1617
Abonnés

Aperçu

Cette stratégie est basée sur la direction de la tendance de l’indicateur MACD et est combinée à l’indicateur Stoch pour effectuer des opérations de vente et d’achat spécifiques. La stratégie utilise le MACD à plus long terme pour déterminer la tendance générale et l’introduction en bourse de Stoch à plus court terme.

Principe de stratégie

  1. Utilisation de l’indicateur MACD pour déterminer la direction des grandes tendances

    • Calculer les courbes EMA à longue période, les courbes EMA à courbe lente et les courbes MACD à courbe longue

    • Comparer les variations du MACD à différentes périodes pour déterminer la direction de la tendance

  2. Utilisation de l’indicateur Stoch pour déterminer les points d’achat et de vente spécifiques

    • Calculer les lignes %K et %D

    • Stoch s’est détourné près de la zone de survente et s’est retourné pour faire un signal d’achat et de vente.

  3. Opérations d’achat et de vente combinées avec la direction de la tendance et les signaux de Stoch

    • Lorsque le MACD grand périodique est en hausse, Stoch achète un signal et fait plus

    • Lorsque le MACD à grande périodicité est en baisse, Stoch vend des signaux et fait un short.

  4. Régler les arrêts de perte et optimiser la gestion des fonds

Analyse des avantages

  • Cette stratégie, combinée au suivi de la tendance et à l’indicateur de survente, permet de saisir efficacement les tendances de la ligne moyenne et longue.

  • Le MACD détermine la direction générale, Stoch effectue les détails de la transaction et maîtrise efficacement les risques

  • Utiliser les combinaisons entre les indicateurs pour former une stratégie d’indicateurs

  • Mise en place d’un mécanisme de coupe-stop pour gérer le risque de transaction

  • Les paramètres de la stratégie peuvent être optimisés pour différents environnements de marché

Analyse des risques

  • Il est possible qu’il y ait des erreurs dans le calcul de la courbe moyenne et longue, ce qui entraîne des pertes de transactions négatives.

  • Stoch génère de faux signaux, ce qui entraîne des profits insuffisants ou des pertes

  • Les points d’arrêt peuvent être franchis en cas de changement de tendance, ce qui élargit les pertes.

  • Les objectifs trop grands ou trop petits peuvent affecter l’efficacité de la stratégie

  • Les paramètres inappropriés et l’incapacité à s’adapter aux changements de l’environnement du marché peuvent entraîner l’échec de la stratégie

  • Le risque peut être réduit par l’optimisation des méthodes de jugement de tendance, la vérification des signaux de Stoch, l’ajustement des positions de stop loss

Direction d’optimisation

  • Optimiser les combinaisons de paramètres MACD pour améliorer la précision de jugement des tendances

  • Prendre en compte les indicateurs de Stoch sur plusieurs périodes afin d’éviter les faux signaux

  • Adaptation dynamique du stop loss à la volatilité du marché

  • En combinaison avec d’autres signaux d’indicateurs, les verifies améliorent l’efficacité du signal

  • Optimisation des paramètres en fonction des caractéristiques des différentes variétés et des périodes de négociation

  • Ajout d’algorithmes d’apprentissage automatique pour aider à déterminer les tendances

  • Indicateur de la quantité combinée, afin d’éviter un suivi insuffisant ou excessif des baisses

Résumer

La stratégie intègre les avantages des deux indicateurs MACD et Stoch, en prenant en compte les risques, en saisissant les tendances de la ligne moyenne et longue. L’effet de la stratégie est renforcé par l’optimisation des paramètres, la configuration des arrêts de perte, la vérification des signaux, etc. Elle peut s’adapter à une variété d’environnements de marché et a une valeur de négociation réelle.

Code source de la stratégie
/*backtest
start: 2023-09-19 00:00:00
end: 2023-09-26 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

// strategy(title="自用策略v0.2",calc_on_order_fills=false,calc_on_every_tick =false, initial_capital=10000,commission_type=strategy.commission.percent, commission_value=0.00,overlay = true,default_qty_type = strategy.cash, default_qty_value = 10000)



//STOCH
periodD = input(3, title="%D Smoothing", minval=1)
periodK = input(14, title="%K Length", minval=1)
periodK2 = input(42, title="%K2 Length", minval=1)
periodK3 = input(126, title="%K3 Length", minval=1)
periodK4 = input(378, title="%K4 Length", minval=1)
periodK5 = input(14, title="%K5 Length", minval=1)
periodK6 = input(30, title="%K6 Length", minval=1)
smoothK = input(1, title="%K Smoothing", minval=1)
k = sma(stoch(close, high, low, periodK), smoothK)
k2 = sma(stoch(close, high, low, periodK2), smoothK*3)
k3 = sma(stoch(close, high, low, periodK3), smoothK*3*3)
k4 = sma(stoch(close, high, low, periodK4), smoothK*3*3*3)
d = sma(k, periodD)
all = (k+k2*3+k3*9+k4*18)/31
allp = sma(all, periodK6)



buffer = input(title="buffer", type=input.float, defval=0.3, minval = 0, step = 0.1)
b1 = close[1]* (1+buffer/100)
b2 = close[1]* (1-buffer/100)

//MACD
fast_length = input(title="Fast Length", defval=144)
slow_length = input(title="Slow Length", defval=312)

src = input(title="Source", defval=close)
signal_length = input(title="Signal Smoothing",  minval = 1, maxval = 200, defval = 108)
sma_source = input(title="Oscillator MA Type",  defval="EMA", options=["SMA", "EMA"])
sma_signal = input(title="Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])

// Calculating
fast_ma = sma_source == "SMA" ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source == "SMA" ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal
MACDCHA = input(title="MACDCHA步长", defval=30)
MACDCHA2 = input(title="MACDCHA步长2", defval=20)
MACDCHA3 = input(title="MACDCHA步长3", defval=10)
MACDCHA4 = input(title="MACDCHA步长4", defval=5)
MACDCHA5 = input(title="MACDCHA步长5", defval=3)
MACDCHA6 = input(title="MACDCHA步长6", defval=1)
HISTCHA = input(title="hist步长", defval=50)
macdcha = hist - hist[MACDCHA]
macdcha2 = hist - hist[MACDCHA2]
macdcha3 = hist - hist[MACDCHA3]
macdcha4 = hist - hist[MACDCHA4]
macdcha5 = hist - hist[MACDCHA5]
macdcha6 = hist - hist[MACDCHA6]
histcha = hist[HISTCHA]
var true2 = 0
var true2_1 = 0
var true2_2 = 0
var true2_3 = 0
var true2_4 = 0//延伸
var fangxiang =0
//确认方向
if(macdcha>=0 and macdcha2>=0 and macdcha3>=0 and macdcha4>=0 and macdcha5>=0 and macdcha6>=0)
    fangxiang := 1
    true2_2 := 0
if(macdcha<=0 and macdcha2<=0 and macdcha3<=0 and macdcha4<=0 and macdcha5<=0 and macdcha6<=0)
    fangxiang :=-1
    true2_1 := 1
//k3min = min(k3,k3[1],k3[2],k3[3],k3[4],k3[5],k3[6],k3[7],k3[8],k3[9],k3[10],k3[11],k3[12],k3[13],k3[14],k3[15],k3[16],k3[17],k3[18],k3[19],k3[20],k3[21],k3[22],k3[23],k3[24],k3[25],k3[26],k3[27],k3[28],k3[29],k3[30],k3[31],k3[32],k3[33],k3[34],k3[35],k3[36],k3[37],k3[38],k3[39],k3[40],k3[41],k3[42],k3[43],k3[44],k3[45],k3[46],k3[47],k3[48],k3[49],k3[50])
//k3max = max(k3,k3[1],k3[2],k3[3],k3[4],k3[5],k3[6],k3[7],k3[8],k3[9],k3[10],k3[11],k3[12],k3[13],k3[14],k3[15],k3[16],k3[17],k3[18],k3[19],k3[20],k3[21],k3[22],k3[23],k3[24],k3[25],k3[26],k3[27],k3[28],k3[29],k3[30],k3[31],k3[32],k3[33],k3[34],k3[35],k3[36],k3[37],k3[38],k3[39],k3[40],k3[41],k3[42],k3[43],k3[44],k3[45],k3[46],k3[47],k3[48],k3[49],k3[50])
allpmax = max(allp[1],allp[2],allp[3],allp[4],allp[5],allp[6])
allpmin = min(allp[1],allp[2],allp[3],allp[4],allp[5],allp[6])
if(histcha < 0 and macdcha>=0 and macdcha2>=0 and macdcha3>=0 and macdcha4>=0 and macdcha5>=0 and macdcha6>=0 and d < 20 and volume > volume[1] and true2_1 == 1 and allp>allp[1] and allp <80)//and k3max < 80  //and k3min < 30 and k3 >20 and k2<50
    strategy.entry("开多", true, comment = "开多") // and close > close[1] and cci1> MEA1
    true2_1 :=0
if(d >80)
    strategy.close( "开多", comment = "平多")
    true2_1 :=1

stop_loss=input(4, "做多止损 %", minval = 1, step = 1)
sl = strategy.position_avg_price * (1-stop_loss/100)
close_Stop = close < sl
if(close_Stop or(allp<20 and allp[1]>20))
    strategy.close( "开多", comment = "做多止损")
    true2_1 :=1
Target_profit=input(10, "做多止盈 %", minval = 1, step = 1)
tp = strategy.position_avg_price * (1+Target_profit/100)
close_Target = close > tp
strategy.close("开多", when = close_Target, comment ="做多盈利")


//空
if(histcha > 0 and macdcha<=0 and macdcha2<=0 and macdcha3<=0 and macdcha4<=0 and macdcha5<=0 and macdcha6<=0 and d > 80 and volume > volume[1] and true2_2 == 1 and allp<allp[1] and allp >20) // and k3max>70 and k3<80
    //strategy.entry("开空", comment = "开空") 
    strategy.entry("开空", strategy.short,comment ="开空")
    true2_2 := 0
if( d <20)
   // strategy.close(  comment = "平空")
    strategy.close("开空",  comment = "平空")
    true2_2 := 1

stop_loss2=input(4, "做空止损 %", minval = 1, step = 1)
sl2 = strategy.position_avg_price * (1+stop_loss2/100)
close_Stop2 = close > sl2
if(close_Stop2 or(allp>80 and allp[1]<80))
    strategy.close( "开空", comment = "做空止损")
    true2_2 == 1
Target_profit2=input(10, "做空止盈 %", minval = 1, step = 1)
tp2 = strategy.position_avg_price * (1-Target_profit2/100)
close_Target2 = close < tp2
strategy.close("开空", when = close_Target2, comment ="做空盈利")