Стратегия многомерной интеграции ценового поведения

EMA HULL MACD SWING PINBAR
Дата создания: 2025-11-25 14:02:09 Последнее изменение: 2025-11-25 14:02:09
Копировать: 0 Количество просмотров: 60
2
Подписаться
319
Подписчики

Стратегия многомерной интеграции ценового поведения Стратегия многомерной интеграции ценового поведения

Это не обычная стратегия ценового поведения, это идеальное сочетание технических показателей.

Не обманывайтесь простым названием “Price Action”. Эта стратегия объединяет 6 технических измерений: 34-циклический канал EMA, 89-циклический Hull MA, MACD-полиграммы, колеблющиеся высокие и низкие точки, формы Pin Bar и Fakey Breakthrough Mode.Настоящий многомерный механизм подтверждения, а не слепое следование за одним показателем.

Основная логика стратегии была прямой: EMA-каналы определяют направление тренда, Hull MA обеспечивает гладкое подтверждение тренда, MACD-полюсная диаграмма идентифицирует динамические изменения, волатильные точки обеспечивают ключевую поддерживающую сопротивление, Pin Bar и Fakey-формы служат входными триггерами.Каждый сигнал требует многократного подтверждения, поэтому он более надежен, чем традиционная стратегия с одним показателем.

50:20 прибыль/убыток по сравнению с дизайном, риск-контроль более строг, чем у большинства стратегий

Стоп-лист 50 пунктов, стоп-лост 20 пунктов, риск-прибыль соотношение достигает 1:2.5 .Эта настройка говорит вам о жестоком факте: даже если вы выиграете с вероятностью 40%, в долгосрочной перспективе вы будете иметь прибыль.Но реальность такова, что многомерные механизмы подтверждения обычно способны повысить шансы на победу до 55-65%.

Особого внимания заслуживает 89-циклическая настройка Hull MA. В отличие от традиционных скользящих средних, Hull MA практически устраняет задержку путем вторичного вычисления взвешенных скользящих средних.Когда Hull MA меняет цвет, вероятность перехода тренда превышает 70%, что является одним из основных преимуществ стратегии.

Pin Bar распознает логику лучше, чем в учебниках

Условия идентификации Pin Bar в стратегии крайне строгие: сущности должны быть меньше, чем 13 всей линии K, и должны преодолевать высокие и низкие колебания.Не все продольные линии называются “пиновыми”, только те, которые пробиваются через ключевые позиции, имеют ценность для торговли.

Посмотрите на эту логику:(close - open < (high - low) / 3)Я думаю, что это будет очень полезно.high > swinghigh and high > high[1]Обеспечить эффективность прорыва.Это означает более высокое качество сигнала, чем у 90% других систем, работающих на рынке.

Фейки - самая недооцененная модель прорыва

Идентификация формы Фейки является скрытым убийцей этой стратегии. Фальшивые прорывы после внутристрочной линии и обратный ход обычно имеют успех в пределах 65-75%. Двойной Фейки в коде стратегии:fakeyИдентифицируйте ложные прорывы вверхfakey1Выявление ложных прорывов вниз.

Ключ в установке пропорции 0.75close - low > 0.75 * (high - low)Убедитесь, что обратная сила достаточно сильна. Этот параметр был оптимизирован с помощью большого количества обратных испытаний. Успех снизился ниже 0,75, а выше 0,75 было недостаточно сигналов.Параметры, точно следующие за двумя цифрами после запятой, не могут быть настроены случайным образом.

Система окрашивания столбцов MACD, визуализация динамических изменений

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

hisupиhisdownПеременные отслеживают последовательное изменение MACD-постной диаграммы. Когда постная диаграмма продолжает расти и находится над нулевой осью, подтверждается многоголовая динамика; наоборот, подтверждается пустая динамика.Это на 1-2 цикла раньше, чем просто смотреть на MACD.

Система высокого и низкого колебания, автоматически идентифицирующая ключевое сопротивление поддержки

Опознание пяти циклических колебаний:high <= high[2] and high[1] <= high[2] and high[3] <= high[2] and high[4] <= high[2]Эта логика гарантирует, что выявленные вершины являются истинными локальными вершинами, а не случайными колебаниями.

Ценность точки колебания заключается в предоставлении объективных уровней поддержки и сопротивления.Нет необходимости в субъективной чертежной линии, система автоматически идентифицирует и постоянно обновляет. Когда цена пробивает эти ключевые позиции, это обычно означает истинное начало тренда.

Анализ применимости: не универсальное лекарство, но достаточно широкий охват

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

Осторожность в использовании:Высокочастотные колебания рынка и криптовалюты в условиях экстремальных колебаний. Формы Pin Bar и Fakey легко создают ложные сигналы при чрезмерном колебании.

Полностью избегайте:Сниженный объем продаж малочисленных сортов и интенсивность новостных событий. Технический анализ в этих случаях имеет высокую вероятность неудачи.

Пространство для оптимизации параметров: потенциал для улучшения

34-циклическая EMA может быть скорректирована в диапазон 30-40 в зависимости от торгуемой разновидности, 89-циклическая Hull MA может быть протестирована в диапазоне 80-100.Однако не рекомендуется отклоняться от этих параметров в значительной степени, поскольку они проверены на рынке на протяжении длительного времени.

Степень остановки и потери может быть скорректирована в зависимости от волатильности сорта. Высоко волатильные сорта могут быть расширены до 60:25, низко волатильные сорта могут быть сжаты до 40:15.Ключ в том, чтобы соотношение риска и прибыли было более чем 2:1.

Риск: исторические воспоминания не означают будущие выгоды

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

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

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

//@version=6
strategy("Price Action", shorttitle="Price Action", overlay=true)

// --- Inputs ---
onlybuy    = input.bool(false, "Only Buy")
onlysell   = input.bool(false, "Only Sell")
SL_input   = input.float(50.00, title="Chốt lời (Pip)", step=1)
rr_input   = input.float(20.00, title="Cắt lỗ (Pip)", step=1)
useTPandSL = input.bool(true, title="Sử dụng chốt lời và cắt lỗ?")

// --- EMAs ---
HiLoLen = 34
pacL = ta.ema(low, HiLoLen)
pacC = ta.ema(close, HiLoLen)
pacH = ta.ema(high, HiLoLen)
signalMA = ta.ema(close, 89)

col1 = pacC > signalMA ? color.lime : pacC < signalMA ? color.red : color.yellow
plot(signalMA, color=col1, title="SignalMA")

// --- Hull MA ---
n = 89
n2ma = 2 * ta.wma(close, int(math.round(n / 2)))
nma = ta.wma(close, n)
diff = n2ma - nma
sqn = int(math.round(math.sqrt(n)))

n2ma1 = 2 * ta.wma(close[1], int(math.round(n / 2)))
nma1 = ta.wma(close[1], n)
diff1 = n2ma1 - nma1
sqn1 = int(math.round(math.sqrt(n)))

n1 = ta.wma(diff, sqn)
n2 = ta.wma(diff1, sqn)

condDown = n2 >= n1
condUp = condDown != true
col = condUp ? color.lime : condDown ? color.red : color.yellow
plot(n1, title="Hull MA", color=col, linewidth=1)

// --- MACD Barcolor ---
fastlength = 12
slowlength = 26
MACDLength = 9
MACD = ta.ema(close, fastlength) - ta.ema(close, slowlength)
aMACD = ta.ema(MACD, MACDLength)
delta = MACD - aMACD

hisup = 0
hisup := delta > delta[1] and delta > 0 ? 1 : delta < delta[1] ? -1 : nz(hisup[1], 0)

hisdown = 0
hisdown := delta < delta[1] and delta < 0 ? 1 : delta > delta[1] ? -1 : nz(hisdown[1], 0)

// --- Swing High/Low ---
// Logic updated for v6 strict comparisons
ktswinghigh = (high <= high[2] and high[1] <= high[2] and high[3] <= high[2] and high[4] <= high[2])
sh = ktswinghigh ? high[2] : na

// Replacement for fixnan using var
var float swinghigh = na
if not na(sh)
    swinghigh := sh

colorsh = swinghigh == swinghigh[1] ? color.white : na
plot(swinghigh, color=colorsh, title="Swing High", style=plot.style_line, offset=-2)

ktswinglow = (low >= low[2] and low[1] >= low[2] and low[3] >= low[2] and low[4] >= low[2])
sl = ktswinglow ? low[2] : na

// Replacement for fixnan using var
var float swinglow = na
if not na(sl)
    swinglow := sl

colorsl = swinglow == swinglow[1] ? color.white : na
plot(swinglow, title="Swing Low", color=colorsl, style=plot.style_line, offset=-2)

// --- Pinbar & Patterns ---
ema21 = ta.ema(close, 13)
beariskpinbar = (close - open < (high - low) / 3 and open - close < (high - low) / 3) and ((high > swinghigh and high > high[1] and high > high[2] and high > high[3] and close < swinghigh))
bullishpibar  = (close - open < (high - low) / 3 and open - close < (high - low) / 3) and ((low < swinglow and low < low[1] and low < low[2] and low < low[3] and close > swinglow))

// Helper function for Inside Bar
Inside(pos) => high <= high[pos] and low >= low[pos]

outsidebar = (high >= high[1] and low <= low[1])
barcolor((high <= high[1] and low >= low[1]) ? color.white : na)

// MACD Color Logic
barcolor(hisup == 1 and MACD > 0 ? color.lime : hisdown == 1 and MACD < 0 ? color.red : hisup == -1 and MACD > 0 ? color.green : color.orange)
barcolor(bullishpibar or beariskpinbar ? color.white : na)

secLast = 1
fakey = (high[1] <= high[2] and low[1] >= low[2] and high > high[2] and close >= low[2] and close < high[2]) or (high[2] <= high[3] and low[2] >= low[3] and high[1] > high[2] and close < high[2] and close > low[3] and high - close > 0.75 * (high - low))
fakey1 = (high[1] <= high[2] and low[1] >= low[2] and low < low[2] and close > low[2] and close <= high[1]) or (high[2] <= high[3] and low[2] >= low[3] and low[1] < low[2] and close > low[2] and close < high[3] and close - low > 0.75 * (high - low))
barcolor(fakey or fakey1 ? color.white : na)

// Soldiers and Crows
onewhitesoliderbear = close < open and high[1] - close > 0.5 * (high[1] - low[1]) and (open - close) > 2.0 / 3.0 * (high - low) and (high[1] > ema21[1] or high > ema21) and open[1] < ema21[1] and close - low < (high - close) * 0.3 and (open[2] < ema21[2] or close[2] < ema21[2]) and close < ema21 and low[2] < low[1] and low[3] < low[2]
onewwhitesoliderbull = close > open and close - low[1] > 0.5 * (high[1] - low[1]) and (close - open) > 2.0 / 3.0 * (high - low) and (low[1] < ema21[1] or low < ema21) and open[1] > ema21[1] and high - close < (close - low) * 0.3 and (open[2] > ema21[2] or close[2] > ema21[2]) and close > ema21 and high[2] > high[1] and high[3] > high[2]

insidebar = ((high[1] <= high[2] and low[1] >= low[2]) and not outsidebar)
barcolor(outsidebar and high[1] <= high[2] and low[1] >= low[2] ? color.white : na)
bearishibbf = (insidebar and (high > high[1] and close < high[1]))
bullishibbf = (insidebar and (low < low[1] and close > low[1]))

barcolor((onewwhitesoliderbull or onewhitesoliderbear) and not insidebar ? color.white : na)

whitesoldierreversal = ((low[1] < low[2] and low[2] < low[3]) or (high[1] < high[2] and high[2] < high[3])) and low[3] < low[8] and low[8] < ema21[8] and high[2] < ema21[2] and high[1] < ema21[1] and high[3] < ema21[3] and close - low[1] > (high[1] - close) and (open < close[1] or open < open[1]) and close - open > 0.3 * (high - low) and high - close < 0.5 * (close - open)
blackcrowreversal = ((high[1] > high[2] and high[2] > high[3]) or (low[1] > low[2] and low[2] > low[3])) and high[3] > high[8] and high[8] > ema21[8] and low[2] > ema21[2] and low[1] > ema21[1] and low[3] > ema21[3] and close - low[1] < (high[1] - close) and (open > close[1] or open > open[1]) and open - close > 0.3 * (high - low) and close - low < 0.5 * (open - close)

barcolor(blackcrowreversal or whitesoldierreversal ? color.white : na)

pinbarreversalbull = ((low[1] < low[2] and low[2] < low[3]) or (high[1] < high[2] and high[2] < high[3])) and low[3] < low[8] and low[8] < ema21[8] and high[2] < ema21[2] and high[1] < ema21[1] and high[3] < ema21[3] and close - open < (high - low) / 3 and open - close < (high - low) / 3 and high - close < close - low and low < low[1]
pinbarreversalbear = ((high[1] > high[2] and high[2] > high[3]) or (low[1] > low[2] and low[2] > low[3])) and high[3] > high[8] and high[8] > ema21[8] and low[2] > ema21[2] and low[1] > ema21[1] and low[3] > ema21[3] and close - open < (high - low) / 3 and open - close < (high - low) / 3 and high - close > close - low and high > high[1]

barcolor(pinbarreversalbear or pinbarreversalbull ? color.white : na)

plotshape(fakey and (not outsidebar or not (high[1] <= high[2] and low[1] >= low[2])) and not blackcrowreversal, title="Fakey Bearish", location=location.abovebar, color=color.white, style=shape.arrowdown, text="Fakey", size=size.tiny)
plotshape(fakey1 and (not outsidebar or not (high[1] <= high[2] and low[1] >= low[2])) and not whitesoldierreversal, title="Fakey Bullish", location=location.belowbar, color=color.white, style=shape.arrowup, text="Fakey", size=size.tiny)

// --- Strategy Logic ---
conmua = 0
conmua := hisup == 1 and MACD > 0 ? 1 : (hisdown[1] == 1 and MACD[1] < 0 and pacC[1] > signalMA[1]) or (n1[2] < n1[3] and pacC[1] > signalMA[1]) ? -1 : nz(conmua[1], 1)

conmua1 = 0
conmua1 := conmua == 1 and (hisdown == 1 and MACD < 0 and pacC > signalMA) or (n1[1] < n1[2] and pacC > signalMA) ? 1 : (close[1] > n1[1] and pacC[1] > signalMA[1] and open[1] < n1[1] and close[1] > pacC[1]) or ta.crossunder(pacC, signalMA) ? -1 : nz(conmua1[1], 1)

conmua2 = 0
conmua2 := conmua1 == 1 and hisup == 1 and MACD > 0 and close > n1 ? 1 : high[1] < high[3] and high[2] < high[3] ? -1 : nz(conmua2[1], 1)

conmua3 = 0
conmua3 := conmua2 == 1 and high < high[2] and high[1] < high[2] ? 1 : (close[1] > swinghigh[1] and hisup[1] == 1 and MACD[1] > 0) or (MACD < 0) ? -1 : nz(conmua3[1], 1)

mua = conmua3 == 1 and hisup == 1 and MACD > 0 and conmua2 == -1 and conmua1 == -1
mua2 = conmua1 == 1 and (close > n1 and pacC > signalMA and open < n1 and close > pacC) and conmua[1] == -1

// ENTRY BUY
if (mua2 and not onlysell)
    strategy.entry("Buy", strategy.long)

conban = 0
conban := hisdown == 1 and MACD < 0 ? 1 : (hisup[1] == 1 and MACD[1] > 0 and pacC[1] < signalMA[1]) or (n1[2] > n1[3] and pacC[1] < signalMA[1]) ? -1 : nz(conban[1], 1)

conban1 = 0
conban1 := conban == 1 and (hisup == 1 and MACD > 0 and pacC < signalMA) or (n1[1] > n1[2] and pacC < signalMA) ? 1 : (close[1] < n1[1] and pacC[1] < signalMA[1] and open[1] > n1[1] and close[1] < pacC[1]) or ta.crossover(pacC, signalMA) ? -1 : nz(conban1[1], 1)

conban2 = 0
conban2 := conban1 == 1 and hisdown == 1 and MACD < 0 and close < n1 ? 1 : low[1] > low[3] and low[2] > low[3] ? -1 : nz(conban2[1], 1)

conban3 = 0
conban3 := conban2 == 1 and low[1] > low[2] and low > low[2] ? 1 : (close[1] < swinglow[1] and hisdown[1] == 1 and MACD[1] < 0) or (MACD > 0) ? -1 : nz(conban3[1], 1)

ban = conban3 == 1 and hisdown == 1 and MACD < 0 and conban2 == -1
ban2 = conban1 == 1 and (close < n1 and pacC < signalMA and open > n1 and close < pacC) and conban[1] == -1

// ENTRY SELL
if (ban2 and not onlybuy)
    strategy.entry("Sell", strategy.short)

plotshape(conmua1 == 1 and conmua[1] == -1, style=shape.triangleup, color=color.lime, location=location.bottom, size=size.tiny)
plotshape(conban1 == 1 and conban[1] == -1, style=shape.triangledown, color=color.red, location=location.bottom, size=size.tiny)
plotshape(mua2, style=shape.labelup, color=color.lime, location=location.bottom, size=size.tiny)
plotshape(ban2, style=shape.labeldown, color=color.red, location=location.bottom, size=size.tiny)

// --- TP and SL ---
Stop = rr_input * 10
Take = SL_input * 10

if (useTPandSL)
    strategy.exit("ExitBuy", "Buy", 1, profit=Take, loss=Stop)
    strategy.exit("ExitSell", "Sell", 1, profit=Take, loss=Stop)