Стратегия называется
Вычислить быструю линию, медленную линию и гистограмму MACD индикатора. Установите длинную, когда вы видите золотой крест, и короткую, когда вы видите смертельный крест.
Вычислите 5-дневные, 25-дневные, 45-дневные и 100-дневные скользящие средние. Чем дольше скользящий средний, тем сильнее устойчивость тренда, которую он представляет.
Если расстояние превышает определенный порог, это означает дивергенцию скользящих средних, которые могут быть установлены как торговые сигналы.
Вычислить индикатор ZLSMA, который представляет собой средне- и долгосрочное направление тренда цены.
Комбинируйте кроссовер MACD, сигналы дивергенции скользящей средней и суждение о тренде ZLSMA для установления длинной и короткой торговых стратегий.
Установите точки получения прибыли и остановки потери для реализации автоматической логики выхода.
Сигналы с несколькими фильтрами повышают эффективность стратегии.
ZLSMA оказывает содействие в определении средне- и долгосрочного направления тренда, чтобы избежать торговли против тренда.
Автоматизированный выход путем установки точек получения прибыли и остановки убытков уменьшает частоту вмешательства человека.
Неправильное настройка параметров может привести к чрезмерной торговле или отсутствию заказов.
Фиксированные точки получения прибыли и остановки потери ограничивают потенциал прибыли или увеличивают потери.
Стратегии скользящей средней плохо работают на рынках с ограниченным диапазоном.
Оптимизировать комбинации параметров скользящих средних путем тестирования скользящих средних различной длины.
Испытание с добавлением других показателей, таких как KDJ и BOLL, для определения точек входа и выхода.
Попробуйте динамические стратегии стоп-лосса на основе показателей волатильности.
Добавьте модели машинного обучения, чтобы найти оптимальные параметры автоматически.
Эта стратегия объединяет MACD, множественные скользящие средние и определение тренда ZLSMA для достижения автоматизированной торговли. Фильтрация с несколькими сигналами улучшает стабильность стратегии; установка логики выхода снижает риски. Для реальной торговли есть определенная практическая ценность. Последующая оптимизация параметров, расширение индикатора, динамические остановки и т. Д. могут еще больше улучшить эффективность стратегии.
/*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)