
Die Strategie nennt sich “Multiple Average Line Trading Strategy”. Die Strategie nutzt die MACD-Indikator-Kreuzung mit der Multiple Average Line als Handelssignal, kombiniert mit ZLSMA-Indikator-Hilfsbeurteilung der Tendenz, setzt Stop Loss Exiting Logik und ermöglicht automatischen Handel.
Berechnen Sie die MACD-Indikatoren für die Schnelllinie, die Langstrecke und die MACD-Säule.
Berechnen Sie die vier Durchschnittslinien 5, 25, 45 und 100. Je länger die Durchschnittslinie ist, desto stärker ist die Trendbeständigkeit.
Berechnen Sie die Entfernung zwischen zwei Gruppen von Durchschnittslinien. Wenn die Entfernung einen bestimmten Wert überschreitet, kann dies als Handelssignal eingestellt werden, um die Ausbreitung der Durchschnittslinie zu zeigen.
Der ZLSMA-Indikator, der die Richtung der mittleren langen Trendlinie des Preises anzeigt. ZLSMA kann bei der Bildung eines Wendepunkts eine Trendwende beurteilen.
In Kombination mit MACD-Kreuzung, Mittellinienstreuung und ZLSMA-Trendbeurteilung wird eine Strategie für den Mehrstreckenhandel festgelegt.
Setzen Sie die Stop-Loss-Punkte, um die Exiting-Logik zu automatisieren.
Multiple Filter-Signal verbessert die Effizienz der Strategie. MACD-Indikatoren und lineare Streuungssignale können gegenseitig verifiziert werden, um falsche Durchbrüche zu vermeiden.
Der ZLSMA-Indikator hilft bei der Bestimmung der mittleren und langfristigen Trendrichtung und vermeidet den Gegenhandel.
Automatisierte Exiting setzt die Stop-Loss-Punkte ein und reduziert die Häufigkeit menschlicher Eingriffe.
Die falsche Einstellung der Parameter kann zu übermäßigen Transaktionen oder fehlenden Anweisungen führen. Die Parameter müssen optimiert werden, um die beste Wirkung zu erzielen.
Ein fester Stop-Loss-Punkt kann den Gewinnspielraum einschränken oder den Verlust vergrößern.
Die Gleichgewichtsstrategie wirkt bei Erschütterungssituationen nicht so gut, dass andere Indikatoren oder künstliche Interventionen in Betracht gezogen werden können.
Optimieren Sie die Kombination von Mittellinienparametern und testen Sie die Wirkung von Mittellinien unterschiedlicher Länge.
Die Tests umfassen weitere Indikatoren wie KDJ, BOLL und andere, um den Kauf- und Verkaufspunkt zu bestimmen.
Versuchen Sie eine dynamische Stop-Strategie, indem Sie die Stop-Position entsprechend der Volatilität einstellen.
Das System kann automatisch die optimalen Parameter ausfindig machen, indem es sich an einem maschinellen Lernmodell beteiligt.
Diese Strategie integriert MACD-Indikatoren, Multiple Average Lines und ZLSMA-Trendbeurteilungen, um den Handel zu automatisieren. Die Strategie wird durch die Filterung mehrerer Signale verbessert. Die Einstellung der Exiting-Logik verringert das Risiko und hat einen gewissen Einsatzwert.
/*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)