Стратегия перекрестного тренда двойной скользящей средней - это стратегия, следующая за трендом, которая генерирует сигналы покупки и продажи при пересечении быстрых и медленных скользящих средних линий.
Стратегия в основном использует следующие показатели для оценки:
Быстро и медленно движущиеся средние линии: золотой крест для сигнала покупки, смертельный крест для сигнала продажи.
MACD: линия MACD выше линии сигнала и повышающийся MACD низкий для бычьего сигнала.
RSI: RSI выше 50 для бычьего, ниже 50 для медвежьего.
Awesome Oscillator (AO): AO пересекает линию 0 для покупки, пересекает ниже для продажи.
Три ежедневных скользящих средних: более короткий период суточной МА пересекает более длительный период суточной МА в качестве сигнала покупки.
Стратегия сочетает в себе несколько временных рамок и индикаторов, чтобы генерировать логику покупки и продажи. Она производит заказы на покупку, когда несколько индикаторов показывают бычьи сигналы одновременно, и заказы на продажу, когда появляются медвежие сигналы, чтобы отслеживать тенденцию.
Стратегия имеет следующие преимущества:
Комбинация с несколькими индикаторами уменьшает ложные сигналы и повышает точность.
Включение нескольких временных рамок определяет более широкое направление тренда.
Настройка параметров обеспечивает хорошую рентабельность.
Принимает перемещение стоп-лосса для контроля риска и ограничения потерь.
Автоматизированное отслеживание тенденций без ручного вмешательства, сокращение затрат.
У него также есть некоторые риски:
Оптимизируйте параметры, чтобы уменьшить недействительные сигналы.
Чёрный лебедь может привести к резкому снижению.
Сложная логика покупки/продажи опирается на большие исторические данные для поиска оптимальных параметров.
Неправильное установление стоп-лосса приводит к преждевременному выходу.
Стратегия может быть улучшена в следующих аспектах:
Проверьте больше комбинаций индикаторов для более стабильных и точных сигналов, таких как индекс волатильности, OBV и т. д.
Оптимизировать параметры индикаторов с помощью машинного обучения и генетических алгоритмов, чтобы уменьшить переоценку.
Внедрение методов моделирования для интеграции сигналов из нескольких независимых стратегических моделей, повышая надежность.
Вход в торговлю в более короткие сроки, выход в более короткие сроки.
Построить модуль контроля количественного риска с строгими ограничениями на процент стоп-лосса, максимальный вывод и т.д.
Стратегия двойного движущегося среднего перекрестного тренда использует быстрые и медленные перекрестки MA в качестве торговых сигналов, наряду с MACD, RSI для оценки направления тренда для автоматического отслеживания тренда.
/*backtest start: 2023-10-22 00:00:00 end: 2023-11-21 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy('SteffVans', shorttitle='SteffVans strategy', overlay=true, process_orders_on_close = true) // Input settings macd_fast_length = input(12) macd_slow_length = input(26) macd_signal_length = input(9) // Calculate MACD values [macd_line, signal_line, _] = ta.macd(close, macd_fast_length, macd_slow_length, macd_signal_length) mg = ta.lowest(signal_line, 30) >= -0 // RSI ma(source, length, type) => switch type "SMA" => ta.sma(source, length) "Bollinger Bands" => ta.sma(source, length) "EMA" => ta.ema(source, length) "SMMA (RMA)" => ta.rma(source, length) "WMA" => ta.wma(source, length) "VWMA" => ta.vwma(source, length) rsiLengthInput = input.int(14, minval=1) rsiSourceInput = input.source(close, "Source", group="RSI Settings") maTypeInput = input.string("SMA", title="MA Type", options=["SMA", "Bollinger Bands", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA Settings") maLengthInput = input.int(14, title="MA Length", group="MA Settings") bbMultInput = input.float(2.0, minval=0.001, maxval=50, title="BB StdDev", group="MA Settings") up = ta.rma(math.max(ta.change(rsiSourceInput), 0), rsiLengthInput) down = ta.rma(-math.min(ta.change(rsiSourceInput), 0), rsiLengthInput) RSI = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down)) // AO AO = ta.sma((high + low) / 2, 5) - ta.sma((high + low) / 2, 34) crossaosell = AO < AO[1] and AO[1] < AO[2] and AO[2] > AO[3] and ta.lowest(low,3) // Uptrend sma len1 = input.int(5, minval=1) len2 = input.int(10, minval=1) len3 = input.int(20, minval=1) src = input(close) out1 = ta.sma(src, len1) out2 = ta.sma(src, len2) out3 = ta.sma(src, len3) // Timeframe macdl60 = request.security(syminfo.tickerid, "60", signal_line,lookahead = barmerge.lookahead_on) ao = request.security(syminfo.tickerid, "60", AO,lookahead = barmerge.lookahead_on) rsi = request.security(syminfo.tickerid, "60", RSI,lookahead = barmerge.lookahead_on) good = request.security(syminfo.tickerid, "60", mg,lookahead = barmerge.lookahead_on) bad = request.security(syminfo.tickerid, "60", crossaosell,lookahead = barmerge.lookahead_on) ma1 = request.security(syminfo.tickerid, "D", out1,lookahead = barmerge.lookahead_on) ma2 = request.security(syminfo.tickerid, "D", out2, lookahead = barmerge.lookahead_on) ma3 = request.security(syminfo.tickerid, "D", out3, lookahead = barmerge.lookahead_on) // Kriteria BUY and SELL uptrend1 = request.security(syminfo.tickerid, "D", close,lookahead = barmerge.lookahead_on) > ma1 and ma1 > ma3 and ma2 > ma3 uptrend2 = ta.lowest(ma1,12) > ta.lowest(ma3,12) and ta.lowest(ma2,12) > ta.lowest(ma3,12) // Triger BUY and SELL cross1 = ao > ao[1] and ao[1] < ao[2] and ao > 0 and good and rsi >= 60 and uptrend1 cross2 = ao > 0 and ao[1] < 0 and good and rsi >=50 and uptrend1 cross3 = ao > 0 and ao[1] < 0 and not good and uptrend2 and uptrend1 cross4 = ao > ao[1] and ao[1] > ao[2] and ao[2] < ao[3] and ao[3] < ao[4] and not good and uptrend2 and uptrend1 s1 = ao < ao[1] and ao[1] < ao[2] and ao[2] < ao[3] and ao > 0 and rsi < 50 and request.security(syminfo.tickerid, "D", close,lookahead = barmerge.lookahead_on) < ma1 s2 = ao < 0 and ao < ao[2] and rsi < 50 and request.security(syminfo.tickerid, "D", close,lookahead = barmerge.lookahead_on) < ma1 // Variabel Buy dan Sell buySignal = false sellSignal = false // Syarat masuk Buy buyCondition = cross1 or cross2 or cross3 or cross4 if buyCondition buySignal := true // Syarat masuk Sell sellCondition = s1 or s2 if sellCondition sellSignal := true // Reset sinyal jika ada sinyal berulang if buySignal and sellSignal sellSignal := false if sellSignal and buySignal buySignal := false // Logika perdagangan if buySignal strategy.entry("Buy", strategy.long, comment = "BUY") if sellSignal strategy.close("Buy") plotshape(cross1,title = "Stefkuy1", style = shape.labelup, location = location.belowbar, color = color.green,text = "1", textcolor = color.white,size = size.small) plotshape(cross2,title = "Stefkuy2", style = shape.labelup, location = location.belowbar, color = color.green, text = "2", textcolor= color.white, size = size.small) plotshape(cross3,title = "StefVan1", style = shape.labelup, location = location.belowbar, color = color.rgb(0, 153, 255), text = "3", textcolor= color.white,size = size.small) plotshape(cross4,title = "StefVan2", style = shape.labelup, location = location.belowbar, color = color.rgb(0, 153, 255), text = "4", textcolor= color.white,size = size.small)