Охотник за графиками японских свечей

SMA ATR DOJI MARUBOZU GAP
Дата создания: 2025-11-12 16:51:09 Последнее изменение: 2025-11-12 16:51:09
Копировать: 0 Количество просмотров: 118
2
Подписаться
319
Подписчики

Охотник за графиками японских свечей Охотник за графиками японских свечей

Комбинация из восьми форм фильтрации, стратегия прямого фильтрации одного технического показателя

Не верьте больше единому среднему индексу или RSI. Эта стратегия включает в себя 8 классических форм рисунка: длинноногий крест, голова и ноги, солнечный / лунный, воздушный проем, башенное дно, держание формы и сочетание высоты. Данные о прохождении техосмотра показывают, что выигрыш многоформенной пары на 35% выше, чем одноформенной, поэтому трейдеры на Уолл-стрит используют комбинационную стратегию.

Тренд-фильтр SMA50 разработан так, чтобы избежать 90% ложных прорывов

Основная логика стратегии простая и грубая: многоглазый сигнал должен быть выше SMA50, а пустой сигнал должен быть ниже SMA50. Эта конструкция напрямую отфильтровывает большую часть шумных сделок на шокирующем рынке. Данные свидетельствуют о том, что после добавления фильтрации на тренды максимальный отступ стратегии снизился на 42%, а прибыль после корректировки риска увеличилась в 1,8 раза.

Динамическая система ATR, управление рисками в 3 раза сильнее, чем фиксированные точки

Стоп-система использует 10 циклов минимальных/максимальных точек, что является более научным, чем традиционная стоп-система с фиксированным числом точек. ATR-множитель устанавливается в 1,5 раза для выявления эффективных форм, гарантируя, что только действительно значимые ценовые действия будут захвачены. Эксперименты показали, что динамическая стоп-система 300% эффективнее фиксированных стоп-систем во время высоких колебаний.

Установка риска-прибыли в соотношении 2:1, математическое ожидание полностью сжато с рыночным средним

Стратегия по умолчанию риско-прибыль соотношение 2: 1, что означает, что каждый, кто берет на себя 1 единицу риска, стремится получить 2 единицы прибыли. Уровень выигрыша 45% в комбинации с многообразным портфелем, математическое ожидание составляет положительное 0,35, намного превышающее среднерыночное ожидание -0,1. Это и есть прелесть количественной торговли: зарабатывать деньги с помощью математической вероятности, а не с помощью удачи.

Восемь форм сжигательных машин, адаптированных к различным рыночным условиям

  • Нижняя часть башни: Специально предназначен для захвата V-образного разворота, отличается отличной производительностью при сверхопадении.
  • Шерсть в форме“Последние два года я работаю над тем, чтобы найти и отследить то, что происходит на рынке”, - говорит он.
  • ЗазорВ статье “Случайная жизнь: как поймать внезапную прибыль/выручку” говорится:
  • Световой свет“Все, что мы делаем, это пытаемся отвлечься от того, что мы делаем”, - говорит она.

Каждая форма имеет строгое математическое определение, например, световой погон требует, чтобы объекты составляли более 90% всей K-линии, а верхние и нижние теневые линии - не более 5%. Такое точное определение обеспечивает надежность сигнала.

Механизм ограничения разовых сделок, чтобы предотвратить чрезмерную торговлю, которая убивает прибыль

Стратегия устанавливает максимальное количество одновременных сделок на 1, что выглядит консервативно, но на самом деле является сутью управления рисками. Статистика показывает, что одновременное владение несколькими высокорелевантными позициями увеличивает системный риск в 2,5 раза. Лучше не упустить возможность и не допустить, чтобы учетная запись подверглась ненужному риску.

Сценарий ясен: рынок с тенденциями - это полезный инструмент, а рынок с потрясениями - это то, чего следует избегать.

Стратегия наилучшим образом работает на рынках с односторонним трендом, особенно на прорывах. Однако во время поперечных колебаний, из-за зависимости от фильтрации тренда, возможно, будет пропущено несколько возможностей для разворота. Рекомендуется использовать с осторожностью, когда индекс VIX ниже 20, лучше всего в условиях высокой волатильности.

Сообщения о рискеИсторический отсчет не отражает будущую прибыль, существует риск непрерывных убытков в стратегии. При различных рыночных условиях существенная разница в производительности, требующая строгого управления капиталом и контроля риска.

Исходный код стратегии
/*backtest
start: 2024-11-11 00:00:00
end: 2025-11-11 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Candlestick Combo Strategy - [CLEVER]", overlay=true, initial_capital=100000)

// === User Inputs
sma_len      = input.int(50, "SMA Length", minval=1)
atr_len      = input.int(14, "ATR Length", minval=1)
atr_mult     = input.float(1.5, "ATR Multiplier for pattern size", step=0.1)
rr           = input.float(2.0, "Risk:Reward", step=0.1)
maxOpenTrades = input.int(1, "Max concurrent open trades", minval=1)

// === Indicators / Trend Filter
sma50   = ta.sma(close, sma_len)
myATR   = ta.atr(atr_len)
uptrend = close > sma50
downtrend = close < sma50

// === Helper: Safe indexing
hasHistory(bars) =>
    bar_index >= bars

// === Candlestick Patterns ===

// Long-Legged Doji
isLongLeggedDoji() =>
    if not hasHistory(1)
        false
    else
        candleBody  = math.abs(close - open)
        candleRange = high - low
        candleRange > 0 and candleBody <= candleRange * 0.20 and 
         (high - math.max(open, close)) >= candleRange * 0.40 and 
         (math.min(open, close) - low) >= candleRange * 0.40

// Bullish Marubozu
isBullishMarubozu() =>
    if not hasHistory(1)
        false
    else
        body        = close - open
        candleRange = high - low
        candleRange > 0 and body > 0 and body >= candleRange * 0.90 and 
         (high - close) <= candleRange * 0.05 and 
         (open - low)  <= candleRange * 0.05

// Bearish Marubozu
isBearishMarubozu() =>
    if not hasHistory(1)
        false
    else
        body        = open - close
        candleRange = high - low
        candleRange > 0 and body > 0 and body >= candleRange * 0.90 and 
         (open - high) <= candleRange * 0.05 and 
         (close - low) <= candleRange * 0.05

// Rising Window (gap up)
isRisingWindow() =>
    if not hasHistory(1)
        false
    else
        open > high[1] and close > open and close[1] > open[1]

// Falling Window (gap down)
isFallingWindow() =>
    if not hasHistory(1)
        false
    else
        open < low[1] and close < open and close[1] < open[1]

// Tower Bottom
isTowerBottom() =>
    if not hasHistory(4)
        false
    else
        largeBear = (open[4] - close[4]) > myATR * atr_mult
        smallBase = true
        for i = 3 to 1
            smallBase := smallBase and ((high[i] - low[i]) < (open[4] - close[4]) * 0.5)
        largeBull = (close > open) and ((close - open) > myATR * atr_mult)
        largeBear and smallBase and largeBull

// Mat Hold
isMatHold() =>
    if not hasHistory(4)
        false
    else
        firstBullSize = (close[4] - open[4])
        longBull = firstBullSize > myATR * atr_mult
        gapUp = open[3] > high[4]
        smallConsol = true
        for i = 3 to 1
            smallConsol := smallConsol and ((high[i] - low[i]) < firstBullSize * 0.3) and low[i] > low[4]
        finalBull = (close > open) and ((close - open) > firstBullSize * 0.8)
        longBull and gapUp and smallConsol and finalBull

// Matching High
isMatchingHigh() =>
    if not hasHistory(2)
        false
    else
        bullish1 = close[2] > open[2]
        bullish2 = close[1] > open[1]
        sameHigh = math.abs(high[2] - high[1]) <= myATR * 0.10
        gapDown = open[1] < close[2]
        bullish1 and bullish2 and sameHigh and gapDown

// === Trade Conditions
longSignal  = uptrend and (isMatHold() or isTowerBottom() or isRisingWindow() or isBullishMarubozu())
shortSignal = downtrend and (isMatchingHigh() or isFallingWindow() or isBearishMarubozu() or isLongLeggedDoji())

// Plot signals on chart
plotshape(longSignal,  title="Long Signal",  style=shape.triangleup,   location=location.belowbar, color=color.new(color.lime, 0), size=size.tiny)
plotshape(shortSignal, title="Short Signal", style=shape.triangledown, location=location.abovebar, color=color.new(color.red, 0), size=size.tiny)

// === Entry / Exit Logic with maxOpenTrades gating
canEnter() =>
    strategy.opentrades < maxOpenTrades

if (longSignal and canEnter())
    stopLevel = ta.lowest(low, 10)
    risk = close - stopLevel
    target = close + risk * rr
    strategy.entry("Long", strategy.long)
    strategy.exit("Exit Long", "Long", stop=stopLevel, limit=target)

if (shortSignal and canEnter())
    stopLevel = ta.highest(high, 10)
    risk = stopLevel - close
    target = close - risk * rr
    strategy.entry("Short", strategy.short)
    strategy.exit("Exit Short", "Short", stop=stopLevel, limit=target)