Неудачная стратегия "высоко-низко"

Автор:Чао ЧжанДата: 22-12-2023 12:59:43
Тэги:

img

Обзор

Стратегия Broken High/Low - это стратегия, следующая за трендом, которая отслеживает прорыв цены за пределами максимума или минимума предыдущей свечи.

Логика стратегии

Основными условиями въезда и выезда, определяемыми этой стратегией, являются:

  1. Определить, если свеча зеленый или красный, чтобы определить, если это свеча вверх или свеча вниз
  2. Проверьте, если текущая свеча нарушает высокий или низкий предыдущей свечи
  3. Используйте быстрые и медленные скользящие средние для определения направления тренда
  4. Идите длинный, когда вверх свеча ломается выше высоты предыдущей вниз свечи, идти короткий, когда вниз свеча ломается ниже низкого предыдущей вверх свечи
  5. Условия выхода запускаются путем остановки потерь или остановки задержки; также может выйти немедленно, если появляется свеча обратного движения

Стратегия также использует фильтры на основе второй обратной свечи для предотвращения ложных прорывов и обеспечения надежности сигнала.

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

  • Ясная стратегическая ориентация, легкое понимание операций прорыва
  • Обеспечивает правильную оценку тренда путем сочетания двойных скользящих средних
  • Остановка задержки помогает получить больше прибыли
  • Фильтры с обратными свечами помогают избежать погони за максимумами и уничтожения минимумов

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

  • Неудачный прорыв может привести к потерям от сверхкороткосрочных операций
  • Больший риск ложного прорыва на рынках с диапазоном
  • Двойные скользящие средние могут отставать, что приводит к ошибкам в оценке

Меры по контролю риска:

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

Руководство по оптимизации

Эта стратегия может быть оптимизирована в следующих аспектах:

  1. Испытать различные комбинации параметров скользящей средней
  2. Испытание, включающее другие технические показатели для суждения о комбинации
  3. Оптимизировать параметры уровней входа и остановки потерь
  4. Добавить правила количественной фильтрации для выбора высококачественного базового
  5. Включить алгоритмы машинного обучения для адаптивной оптимизации параметров

Резюме

Стратегия Broken High/Low в целом является зрелой стратегией, следующей за трендом. С помощью скользящих средних для вспомогательного суждения, она может улавливать определенную степень трендов. Механизмы остановки потерь и остановки отслеживания также помогают блокировать прибыль. Благодаря постоянному тестированию и оптимизации параметры и производительность этой стратегии могут стать более выдающимися.


/*backtest
start: 2022-12-15 00:00:00
end: 2023-12-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Broken High/Low Strategy", overlay=true, initial_capital = 5000, default_qty_value = 25, pyramiding = 10, default_qty_type= strategy.percent_of_equity)

useEMAForStop = input.bool(false, 'Use trail stop EMA', group = 'Exit strategy')
trailStopMALength = input(8, 'Trail stop EMA length', group = 'Exit strategy')

fastMALength = input(5 , 'Fast MA length', group = 'Trend strength')
fastEMAEnabled = input.bool(false, 'Fast EMA enabled (default is SMA)', group = 'Trend strength')

slowMALength = input(10, 'Slow MA length', group = 'Trend strength')
slowEMAEnabled = input.bool(false, 'Slow EMA enabled (default is SMA)', group = 'Trend strength')

ignoreSlowMA = input.bool(false, 'Use fast MA for trend ignoring slow MA', group = 'Trend strength')

useOpposingBarAsExit = input.bool(false, 'Using opposing bar as exit', group = 'Exit strategy')
secondEntryEnabled = input.bool(false, 'Second bar that eliminates opposing bar for entry', group = 'Trend strength')

longsEnabled = input.bool(true, 'Enable longs', group = 'Trade settings')
shortsEnabled = input.bool(true, 'Enable shorts', group = 'Trade settings')

fastMA = fastEMAEnabled ? ta.ema(close, fastMALength) : ta.sma(close, fastMALength)
slowMA = slowEMAEnabled ? ta.ema(close, slowMALength) : ta.sma(close, slowMALength)

FromMonth=input.int(defval=1,title="FromMonth",minval=1,maxval=12, group = 'Time filters')
FromDay=input.int(defval=1,title="FromDay",minval=1,maxval=31, group = 'Time filters')
FromYear=input.int(defval=1990,title="FromYear",minval=1900, group = 'Time filters')
ToMonth=input.int(defval=1,title="ToMonth",minval=1,maxval=12, group = 'Time filters')
ToDay=input.int(defval=1,title="ToDay",minval=1,maxval=31, group = 'Time filters')
ToYear=input.int(defval=9999,title="ToYear",minval=2017, group = 'Time filters')
start=timestamp(FromYear,FromMonth,FromDay,00,00)
finish=timestamp(ToYear,ToMonth,ToDay,23,59)
window()=>time>=start and time<=finish?true:false
afterStartDate = time >= start and time<=finish?true:false
closeTradesEOD = input.bool(false, 'Close trades end of day', group = 'Time filters')

trailStopMA = ta.ema(close, trailStopMALength)

isGreenCandle = close > open
isRedCandle = close < open
isBrokenHigh = close > open[1]
isPriorCandleRed = close[1] < open[1]
isPriorPriorCandleRed = close[2] < open[2]
isPriorPriorCandleGreen = close[2] > open[2]
isPriorCandleGreen = close[1] > open[1]
isBrokenLow = close < open[1]

isPriorRedCandleBroken = isGreenCandle and isPriorCandleRed and isBrokenHigh
isPriorGreenCandleBroken = isRedCandle and isPriorCandleGreen and isBrokenLow

isPriorPriorRedCandleBroken = secondEntryEnabled and not isPriorRedCandleBroken and isGreenCandle and isPriorPriorCandleRed ? close > open[2] : false
isPriorPriorGreenCandleBroken = secondEntryEnabled and not isPriorGreenCandleBroken and isRedCandle and isPriorPriorCandleGreen ? close < open[2] : false

longOpenCondition = (isPriorRedCandleBroken or isPriorPriorRedCandleBroken) and afterStartDate and (ignoreSlowMA ? close > fastMA : fastMA > slowMA) and longsEnabled
longCloseCondition = useOpposingBarAsExit ? isRedCandle : ta.crossunder(close, fastMA)
longCloseCondition := useEMAForStop ? ta.crossunder(close, trailStopMA) : longCloseCondition

shortOpenCondition = (isPriorGreenCandleBroken or isPriorPriorGreenCandleBroken) and afterStartDate and (ignoreSlowMA ? close < fastMA : fastMA < slowMA) and shortsEnabled
shortCloseCondition = useOpposingBarAsExit ? isGreenCandle : ta.crossover(close, fastMA)
shortCloseCondition := useEMAForStop ? ta.crossover(close, trailStopMA) : shortCloseCondition

if (longOpenCondition)
    strategy.entry("Long Entry", strategy.long)

if (longCloseCondition)
    strategy.close('Long Entry', 'Long Exit')

if (shortOpenCondition)
    strategy.entry("Short Entry", strategy.long)

if (shortCloseCondition)
    strategy.close('Short Entry', 'Short Exit')

if (closeTradesEOD and hour >= 14 and minute >= 30)
    strategy.close_all("EOD")

plot(useEMAForStop ? trailStopMA : na, linewidth = 2, color = color.red)
plot(fastMA)
plot(ignoreSlowMA ? na : slowMA, linewidth = 4)

Больше