Стратегия перекрестного движения двойных скользящих средних - это стратегия, следующая за трендом, которая использует перекрестное движение двух скользящих средних различных периодов в качестве торговых сигналов. Она входит в длинные или короткие позиции, когда быстрый MA пересекает выше или ниже медленного MA и определяет направление тренда после перекрестного движения. Она может улавливать среднесрочные тенденции, сокращая при этом ненужную частоту торговли от чрезмерных колебаний.
Стратегия использует два скользящих средних: быстрый MA с более коротким периодом (например, 15 периодов) для улавливания краткосрочных движений цен и медленный MA с более длительным периодом (например, 21 период) для определения основного направления тренда.
С помощью настройки комбинаций периодов MA, стратегия может регулировать временные рамки тенденций для захвата.
Стратегия также включает в себя модули управления рисками, включая получение прибыли, остановку потери и остановку потери.
Стратегия двойного маркетинга имеет следующие преимущества:
Также следует учитывать некоторые риски:
Эти недостатки можно уменьшить с помощью оптимизации, такой как фильтрация сигналов, отслеживание стоп-лосса и т.д.
Стратегия может быть улучшена в таких аспектах, как:
От этих увеличений ожидается значительное повышение показателя выигрыша, корректированная по риску доходность.
В целом, стратегия перекрестного использования двойной скользящей средней предлагает простоту, гибкость и контролируемые риски.
/*backtest start: 2022-12-10 00:00:00 end: 2023-06-16 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy(title = "Silent Trader Strategy", shorttitle = "Silent Trader", overlay = true, pyramiding = 0, default_qty_type = strategy.cash, default_qty_value = 1000, commission_value = 0.0675, initial_capital = 1000, currency = currency.USD, calc_on_order_fills = true, calc_on_every_tick = true) maFastSource = input(defval = ohlc4, title = "Fast MA Source") maFastLength = input(defval = 15, title = "Fast MA Period", minval = 1) maSlowSource = input(defval = ohlc4, title = "Slow MA Source") maSlowLength = input(defval = 21, title = "Slow MA Period", minval = 1) tradeInvert = input(defval = false, title = "Invert Trade Direction?") inpTakeProfit = input(defval = 100, title = "Take Profit percentage(0.1%)", minval = 0) inpStopLoss = input(defval = 100, title = "Stop Loss", minval = 0) inpTrailStop = input(defval = 0, title = "Trailing Stop Loss", minval = 0) inpTrailOffset = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0) useTakeProfit = inpTakeProfit >= 1 ? inpTakeProfit : na useStopLoss = inpStopLoss >= 1 ? inpStopLoss : na useTrailStop = inpTrailStop >= 1 ? inpTrailStop : na useTrailOffset = inpTrailOffset >= 1 ? inpTrailOffset : na useTimeLimit = input(defval = true, title = "Use Start Time Limiter?") startYear = input(defval = 2018, title = "Start From Year", minval = 0, step = 1) startMonth = input(defval = 05, title = "Start From Month", minval = 0,step = 1) startDay = input(defval = 01, title = "Start From Day", minval = 0,step = 1) startHour = input(defval = 00, title = "Start From Hour", minval = 0,step = 1) startMinute = input(defval = 00, title = "Start From Minute", minval = 0,step = 1) startTimeOk() => inputTime = timestamp(syminfo.timezone, startYear, startMonth, startDay, startHour, startMinute) timeOk = time > inputTime ? true : false r = (useTimeLimit and timeOk) or not useTimeLimit maFast = ema(maFastSource, maFastLength) maSlow = sma(maSlowSource, maSlowLength) fast = plot(maFast, title = "Fast MA", color = #26A69A, linewidth = 1, style = line, transp = 50) slow = plot(maSlow, title = "Slow MA", color = #EF5350, linewidth = 1, style = line, transp = 50) aboveBelow = maFast >= maSlow ? true : false tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? true : false if( startTimeOk() ) enterLong = not tradeDirection[1] and tradeDirection exitLong = tradeDirection[1] and not tradeDirection strategy.entry( id = "Long", long = true, when = enterLong ) //strategy.close( id = "Long", when = exitLong ) enterShort = tradeDirection[1] and not tradeDirection exitShort = not tradeDirection[1] and tradeDirection strategy.entry( id = "Short", long = false, when = enterShort ) //strategy.close( id = "Short", when = exitShort ) strategy.exit("Exit Long", from_entry = "Long", profit = close * useTakeProfit / 1000 / syminfo.mintick, loss = close * useStopLoss / 1000 / syminfo.mintick, trail_points = close * useTrailStop / 1000 / syminfo.mintick, trail_offset = close * useTrailOffset / 1000 / syminfo.mintick) strategy.exit("Exit Short", from_entry = "Short", profit = close * useTakeProfit / 1000 / syminfo.mintick, loss = close * useStopLoss / 1000 / syminfo.mintick, trail_points = close * useTrailStop / 1000 / syminfo.mintick, trail_offset = close * useTrailOffset / 1000 / syminfo.mintick)