Стратегия торговли с множественными скользящими средними


Дата создания: 2024-02-29 14:32:29 Последнее изменение: 2024-02-29 14:32:29
Копировать: 3 Количество просмотров: 881
1
Подписаться
1617
Подписчики

Стратегия торговли с множественными скользящими средними

Обзор

Эта стратегия называется стратегии торговли множественной средней линией . Эта стратегия использует MACD-индикатор с перекрестным множественной средней линией в качестве торгового сигнала, в сочетании с ZLSMA-индикатором, который помогает судить о тенденции, устанавливает логику Stop Stop Exiting и автоматизирует торговлю.

Стратегический принцип

  1. Вычислить показатели MACD в виде быстрой линии, медленной линии и столбца MACD. Настроить золотую вилку на лишнюю, мертвую - на пустую.

  2. Вычислите четыре средние линии на 5-й, 25-й, 45-й и 100-й день. Чем длиннее средняя линия, тем сильнее устойчивость тренда.

  3. Расчет расстояния между двумя группами средних линий, если расстояние превышает определенное пороговое значение, указывает на рассеяние средних линий, которое может быть установлено в качестве торгового сигнала.

  4. Расчет ZLSMA, который показывает направление средне-длинной линии тренда. ZLSMA формирует поворотный момент, чтобы определить обратный тренд.

  5. В сочетании с перекрестным MACD-индикатором, среднелинейным сигналом рассеяния и ZLSMA-тенденционным суждением, устанавливается стратегия многорыночной торговли.

  6. Настройка точки остановки и автоматизация логики Exiting.

Анализ преимуществ

  1. Многочисленные фильтрованные сигналы повышают эффективность стратегии. MACD-показатели и сигналы рассеивания средней линии могут быть взаимно проверены, чтобы избежать ложных прорывов.

  2. Индекс ZLSMA помогает определить направление среднесрочной и долгосрочной тенденции, избегая противоположной торговли.

  3. Автоматизированный Exiting устанавливает точку остановки, снижая частоту вмешательства человека.

Анализ рисков

  1. Неправильная настройка параметров может привести к чрезмерной торговле или пропуску счетов. Для достижения оптимального эффекта необходимо оптимизировать параметры.

  2. Фиксированная стоп-стоп-стоп ограничивает пространство для получения прибыли или увеличивает убытки. Динамическая стоп-стоп может быть установлена в сочетании с показателем ATR.

  3. Неэффективная для сейсмических явлений стратегия равномерности может быть использована в качестве вспомогательного инструмента для других показателей или для вмешательства человека.

Направление оптимизации

  1. Оптимизировать комбинацию средних параметров, чтобы проверить эффективность средних линий разной длины.

  2. Тест включает в себя другие показатели, такие как KDJ, BOLL и т. д., чтобы определить точку купли-продажи.

  3. Попытайтесь использовать динамическую стратегию остановки, устанавливая позиции остановки в зависимости от волатильности.

  4. Присоединяйтесь к модели машинного обучения, чтобы автоматически найти оптимальные параметры.

Подвести итог

Эта стратегия объединяет индикаторы MACD, множественные средние линии и ZLSMA для определения тенденции, позволяя автоматизировать торговлю. Улучшение стабильности стратегии с помощью фильтрации множественных сигналов, установка логики Exiting для снижения риска, имеет некоторую боевую ценность. Впоследствии можно дополнительно повысить эффективность стратегии с помощью оптимизации параметров, расширения индикатора и остановки динамики убытков.

Исходный код стратегии
/*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)