
Esta estrategia se llama la estrategia de comercio de la línea media múltiple de la horquilla. Utiliza el indicador MACD con el cruce de la línea media múltiple como señal de comercio, en combinación con el indicador ZLSMA para ayudar a juzgar la tendencia, y establece la lógica de Exiting Stop Loss para automatizar el comercio.
Calcule la línea rápida, la línea lenta y la columna MACD. Configure el tenedor de oro para hacer más y el tenedor de muerto para hacer vacío.
Las líneas de 5 días, 25 días, 45 días y 100 días representan las cuatro líneas medias. La línea media más larga representa una tendencia más continua.
Calcula la distancia entre dos conjuntos de medias, si la distancia supera un determinado umbral, indica la dispersión de la mediana y se puede configurar como una señal de negociación.
Calcula el indicador ZLSMA, que indica la dirección de la tendencia de la línea media de los precios. Cuando el ZLSMA forma un punto de inflexión, se puede determinar la inversión de tendencia.
Combinando el indicador MACD de cruce, la señal de dispersión de la línea media y el juicio de la tendencia ZLSMA, se establece una estrategia de negociación en el horizonte.
Configurar el punto de parada para la automatización de la lógica de Exiting.
Las señales de filtración múltiple mejoran la eficiencia de la estrategia. Los indicadores MACD y las señales de dispersión de línea media se pueden verificar mutuamente para evitar falsas brechas.
El indicador ZLSMA ayuda a determinar la dirección de la tendencia a medio y largo plazo, evitando el comercio en contra.
Automatizado Exiting establece un punto de parada y deterioro, reduciendo la frecuencia de la intervención humana.
La configuración inadecuada de los parámetros puede causar exceso de transacciones o fugas de boletos. Para obtener el mejor resultado, es necesario optimizar los parámetros.
Los puntos de parada fijos limitan el espacio de ganancia o amplían las pérdidas. Se puede combinar con la configuración de parada dinámica del indicador ATR.
Las estrategias de línea media no son efectivas en el comportamiento sísmico, y se puede considerar el apoyo de otros indicadores o intervenciones artificiales.
Optimización de la combinación de parámetros de la línea media para probar el efecto de la línea media de diferentes longitudes.
Las pruebas se suman a otros indicadores como KDJ, BOLL y otros para determinar el punto de compra y venta.
Prueba con una estrategia de stop loss dinámica, estableciendo la posición de stop loss en función de la volatilidad.
El modelo de aprendizaje automático busca automáticamente los parámetros óptimos.
Esta estrategia integra el indicador MACD, la línea de medias múltiples y el juicio de tendencias ZLSMA para lograr operaciones automatizadas. Mejora la estabilidad de la estrategia mediante el filtrado de múltiples señales, configura la lógica de Exiting para reducir el riesgo y tiene un cierto valor de combate. Posteriormente, se puede mejorar aún más el rendimiento de la estrategia mediante la optimización de parámetros, la expansión del indicador y la detención de la dinámica de pérdidas.
/*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)