Basé sur une stratégie de trading à moyennes mobiles multiples


Date de création: 2024-02-29 14:32:29 Dernière modification: 2024-02-29 14:32:29
Copier: 3 Nombre de clics: 881
1
Suivre
1617
Abonnés

Basé sur une stratégie de trading à moyennes mobiles multiples

Aperçu

Cette stratégie est appelée la stratégie de négociation de la ligne de moyenne multiple de la courbe. Elle utilise l’indicateur MACD avec la ligne de moyenne multiple comme signal de négociation, combiné avec l’indicateur ZLSMA pour aider à juger de la tendance, définissant la logique de stop-loss Exiting, pour automatiser les transactions.

Principe de stratégie

  1. Calculer la ligne rapide, la ligne lente et la colonne MACD.

  2. Les quatre lignes de la moyenne sont calculées comme les lignes de 5, 25, 45 et 100 jours. Plus la ligne est longue, plus la tendance est continue.

  3. Calculer la distance entre deux ensembles de moyennes. Si la distance dépasse un certain seuil, la dispersion de la moyenne peut être définie comme un signal de transaction.

  4. Calculer l’indicateur ZLSMA, qui indique la direction de la tendance de la ligne longue moyenne des prix. Lorsque le ZLSMA forme un virage, le renversement de tendance peut être déterminé.

  5. Une stratégie de négociation à plusieurs aires est définie en combinant les indicateurs de croisement MACD, les signaux de dispersion de la ligne moyenne et les jugements de tendance ZLSMA.

  6. La mise en place d’un point d’arrêt et d’arrêt de perte pour l’automatisation de la logique de sortie.

Analyse des avantages

  1. Les signaux de filtrage multiples améliorent l’efficacité de la stratégie. Les indicateurs MACD et les signaux de diffusion linéaire moyenne peuvent être mutuellement vérifiés, évitant ainsi les fausses percées.

  2. L’indicateur ZLSMA aide à déterminer la direction de la tendance à moyen et long terme, en évitant les transactions à contre-courant.

  3. L’automatisation de l’exiting définit un point d’arrêt de la rupture, réduisant la fréquence d’intervention humaine.

Analyse des risques

  1. Une mauvaise configuration des paramètres peut entraîner des transactions excessives ou des fuites. Les paramètres doivent être optimisés pour obtenir des résultats optimaux.

  2. Les points d’arrêt fixes limitent l’espace de profit ou élargissent les pertes. Les paramètres d’arrêt dynamiques peuvent être combinés avec les indicateurs ATR.

  3. La stratégie de la ligne moyenne n’est pas efficace pour les tremblements de terre, il peut être envisagé d’ajouter d’autres indicateurs ou des interventions artificielles.

Direction d’optimisation

  1. Optimiser les combinaisons de paramètres de la ligne moyenne pour tester l’effet de la ligne moyenne de différentes longueurs.

  2. Le test est complété par d’autres indicateurs tels que KDJ, BOLL et autres pour déterminer le point d’achat.

  3. Essayez une stratégie d’arrêt dynamique, en réglant votre position d’arrêt en fonction de la volatilité.

  4. Les modèles d’apprentissage automatique sont utilisés pour trouver automatiquement les paramètres optimaux.

Résumer

Cette stratégie intègre l’indicateur MACD, la moyenne multiple et le jugement de tendance ZLSMA pour réaliser des transactions automatisées. Elle améliore la stabilité de la stratégie grâce au filtrage de signaux multiples, la configuration de la logique Exiting réduit le risque et a une certaine valeur de combat.

Code source de la stratégie
/*backtest
start: 2023-02-22 00:00:00
end: 2024-02-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("MACD ZLSMA_izumi⑤(4つの条件、MCDがクロスしてたら)", overlay=true)

fast_length = input(title = "Fast Length", defval = 12)
slow_length = input(title = "Slow Length", defval = 26)
src = input(title = "Source", defval = close)
signal_length = input.int(title = "Signal Smoothing",  minval = 1, maxval = 50, defval = 9)
sma_source = input.string(title = "Oscillator MA Type",  defval = "EMA", options = ["SMA", "EMA"])
sma_signal = input.string(title = "Signal Line MA Type", defval = "EMA", options = ["SMA", "EMA"])
// Calculating
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal == "SMA" ? ta.sma(macd, signal_length) : ta.ema(macd, signal_length)
hist = macd - signal

alertcondition(hist[1] >= 0 and hist < 0, title = 'Rising to falling', message = 'The MACD histogram switched from a rising to falling state')
alertcondition(hist[1] <= 0 and hist > 0, title = 'Falling to rising', message = 'The MACD histogram switched from a falling to rising state')

hline(0, "Zero Line", color = color.new(#787B86, 50))
plot(hist, title = "Histogram", style = plot.style_columns, color = (hist >= 0 ? (hist[1] < hist ? #26A69A : #B2DFDB) : (hist[1] < hist ? #FFCDD2 : #FF5252)))
plot(macd,   title = "MACD",   color = #2962FF)
plot(signal, title = "Signal", color = #FF6D00)

//MACDクロス設定
enterLong = ta.crossover(macd, signal)
enterShort = ta.crossunder(macd, signal)

//移動平均線の期間を設定
ema5 = input(5, title="ma期間5")
ema25 = input(25, title="ma期間25")
ema45 = input(45, title="ma期間45")
ema100 = input(100, title="ma期間100")

//移動平均線を計算
//sma関数で「ema25」バー分のcloseを移動平均線として「Kema」に設定
Kema5 = ta.sma(close,ema5)
Kema25 = ta.sma(close,ema25)
Kema45 = ta.sma(close,ema45)
Kema100 = ta.sma(close,ema100)



//移動平均線をプロット
plot(Kema5, color=color.rgb(82, 249, 255),title="ema5")
plot(Kema25, color=color.red,title="ema25")
plot(Kema45, color=color.blue,title="ema45")
plot(Kema100, color=color.green,title="ema100")

//ema同士の距離が30以上の時に「distancOK」にTureを返す
//distance1 = math.abs(Kema5-Kema25)
distance2 = math.abs(Kema25-Kema45)
distanceValue1 = input(0.030, title ="ema同士の乖離値") 
//distanceOk1 = distance1 > distanceValue1
distanceOk2 = distance2 > distanceValue1

//2区間のema同士の距離が30以上の時に「distanceOKK」にTrueを返す
//distanceOkK1 = distanceOk1 and distanceOk2
distanceOkK1 = distanceOk2

//5EMAとロウソクの乖離判定
//DistanceValue5ema = input(0.03, title ="5emaとロウソクの乖離率")
//emaDistance = math.abs(Kema5 - close)
//emaDistance5ema = emaDistance < DistanceValue5ema

//ZLSMA追加のコード
length = input.int(32, title="Length")
offset = input.int(0, title="offset")
src2 = input(close, title="Source")
lsma = ta.linreg(src2, length, offset)
lsma2 = ta.linreg(lsma, length, offset)
eq= lsma-lsma2
zlsma = lsma+eq
//ZLSMAのプロット
plot(zlsma, color=color.yellow, linewidth=3)

//ZLSMAの前回高値を検索
//var float zlsmaHigh = na
//var float zlsmaHighValue = na
//if ta.highest(zlsma,35) == zlsma[3]
//    zlsmaHighValue := zlsmaHigh
//    zlsmaHigh := zlsma[3]

//if (na(zlsmaHighValue))
 //   zlsmaHighValue := zlsmaHigh

//ZLSMAの前回安値を検索
//var float zlsmaLow = na
//var float zlsmaLowValue = na
//if ta.lowest(zlsma,35) == zlsma[3]
//    zlsmaLowValue := zlsmaLow
//    zlsmaLow := zlsma[3]

///if (na(zlsmaLowValue))
//    zlsmaLowValue := zlsmaLow

//利確・損切りポイントの初期化(変数の初期化)
var longProfit = 0.0
var longStop = 0.0
var shortProfit = 0.0
var shortStop = 0.0

//inputで設定画面の選択項目を設定
longProfitValue = input(0.06, title ="ロング利確pips")
shortProfitValue = input(-0.06, title ="ショート利確pips")
longStopValue = input(-0.06, title ="ロング損切pips")
shortStopValue = input(0.06, title ="ショート損切pips")

// クロスの強さを推定 
//angleThreshold = input(0.001, title = "クロスの強さ調節" )

// クロスの強さの閾値、この値を調整してクロスの強さの基準を変える 
//macdDiff = macdLine - signalLine 
//strongCross = math.abs(macdDiff) > angleThreshold 

// エントリー条件 (MACDラインとシグナルラインがクロス)
//ta.crossover(macdLine, signalLine) and strongCross 


//ロングエントリー条件
if  distanceOkK1 and enterLong
	strategy.entry("long", strategy.long, comment="long")
    longProfit := close + longProfitValue
    longStop := close + longStopValue

//    if na(strategy.position_avg_price) and close>strategy.position_avg_price + 0.05 * syminfo.mintick 
 //       longStop := strategy.position_avg_price + 10 * syminfo.mintick
  //  strategy.exit("exit", "long",stop = longStop)

strategy.exit("exit", "long", limit = longProfit,stop = longStop)


if  distanceOkK1 and enterShort
	strategy.entry("short", strategy.short, comment="short")
    shortProfit := close + shortProfitValue
    shortStop := close + shortStopValue

 //   if na(strategy.position_avg_price) and close>strategy.position_avg_price - 0.05 * syminfo.mintick 
  //      shortStop := strategy.position_avg_price - 0.1 * syminfo.mintick
  //  strategy.exit("exit", "long",stop = longStop)


strategy.exit("exit", "short", limit = shortProfit,stop = shortStop)
//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)