стратегия разворота тренда


Дата создания: 2026-02-28 11:10:30 Последнее изменение: 2026-03-06 14:15:32
Копировать: 8 Количество просмотров: 135
2
Подписаться
413
Подписчики

стратегия разворота тренда стратегия разворота тренда

Trend Strategy Flip (Стандартная стратегия по развороту тренда)

ATR, L1, ADAPTIVE, BREAKEVEN, PARTIAL_TP

Это не обычная стратегия отслеживания трендов, а интеллектуальная система, которая “переворачивает лицо”.

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

L1 адаптивный фильтр: 0,6 цикла быстрее, чем традиционная подвижная средняя

В центре стратегии - L1 Proximal Filter, это не обычная средняя линия, которую вы видели.Уровень самостоятельной адаптации 0.6, ATR в 1,5 разаЭто означает, что фильтр реагирует только тогда, когда ценовые изменения превышают 200-циклический ATR в 1,5 раза. Эта конструкция распознает изменения тенденций примерно на 0,6 цикла быстрее, чем традиционная EMA, и фильтрует 60% рынка.

Традиционная скользящая средняя пассивно следит за ценой, а фильтр L1 активно прогнозирует тенденцию. Когда рынок по-настоящему меняет тенденцию, он реагирует быстрее, чем SMA на 2-3 K-линии.

Три режима входа: режим A с наибольшей вероятностью победы, режим B с наибольшей частотой, режим C с наименьшим риском

Модель A (изменение тренда): ожидание от L1 фильтра подтверждения обратного тренда, около 65%, но меньше сигналов Модель B (цены пересекаются)При входе цены пробивают фильтр, частота сигналов на 40% выше, чем в режиме A, но повышается риск ложного прорыва Модуль C (задержанное подтверждение)Второй цикл: после смены тренда, наиболее устойчивая победа, но может пропустить лучшую точку входа

Экспериментальные данные показывают, что шокирующий рынок рекомендуется использовать в модели A, а односторонний трендовый рынок лучше всего работает в подмодели B1.

Перевернутая логика - ключевая конкурентоспособность: использование средств выросло на 80%

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

  • Традиционная стратегия: многоголовая остановка→ наблюдение→ повторный вход в игру с пустыми головами ((убыток 2-3 циклов)
  • Стратегия переворота: многоголовый → прямого пустого голова ((нулевая задержка переключения)

Отзывы показывают, что этот механизм переворота на 80% эффективнее, чем традиционные методы, на рынках с ясными тенденциями.

Управление рисками: 0.5% для запуска бонуса, 2% для частичного прекращения, чтобы прибыль не превратилась в убыток

Запасный механизмСтоп-Лосс автоматически перемещается к цене открытия позиции, чтобы гарантировать, что она не превратится из прибыли в убыток, когда волатильность достигнет 0,5% Частично застой“Если мы не будем делать ставки на 2% - мы автоматически снизим ставку на 20% и не будем зарабатывать” Динамическая понижение ATRATR: 200 циклов, обеспечивающих адаптацию стратегии к волатильности различных рынков

Основная идея этой системы управления рисками:Маленький убыток, большая прибыль, никогда не отпускать полученную прибыль

Сценарий ясен: трендовые рынки отлично работают, а волатильные - с осторожностью

Наиболее эффективная среда

  • Односторонний трендовый рынок (бычий/медвежий)
  • Средние сорта с колебаниями (в день колеблется на 1-3%)
  • Мобильность основных сортов

Избегайте сцен

  • Небольшие периоды высокочастотных колебаний (< 5 минут)
  • Низкая волатильность на горизонтальном рынке
  • Малые, маломобильные породы

Рекомендации по параметрам: оптимальная конфигурация в различных рыночных условиях

Акции: ATR-множитель 1.5, самовоспроизводительность 0.6, использование модели A КриптовалютыATR-множественный коэффициент 2.0, самостоятельная адаптация 0.8, использование модели B1
Валютный рынокATR-множитель 1,2, самостоятельная адаптация 0,5, использование модели A

Поставщик рекомендует использовать корректировку в зависимости от вариативности сорта: 1% для высоковибрационных сортов и 0,3% для низковибрационных сортов.

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

Определенные риски

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

Требования к ветроуправлению

  • Одноразовый рисковый прорыв не превышает 2% от счета
  • Приостановка торговли после трех убытков
  • Регулярно проверяйте соответствие параметров
  • Строгое исполнение обязательств по ликвидации убытков без субъективного вмешательства

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

Исходный код стратегии
/*backtest
start: 2025-02-28 00:00:00
end: 2026-02-26 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BNB_USDT","balance":500000,"fee":[0,0]}]
*/

// © LuxAlgo — CC BY-NC-SA 4.0
//@version=6
strategy("Trend Strategy Flip",overlay=true)

// Colors
color BULL_COLOR = #089981
color BEAR_COLOR = #f23645

// Marker colors
color COL_LONG_ENTRY   = color.new(#00ff00, 0)
color COL_SHORT_ENTRY  = color.new(#ff0000, 0)
color COL_FLIP_LONG    = color.new(#00ff00, 0)
color COL_FLIP_SHORT   = color.new(#ff0000, 0)
color COL_TP_LONG      = color.new(#ffd700, 0)
color COL_TP_SHORT     = color.new(#ff8c00, 0)
color COL_BE           = color.new(#0066ff, 0)

// Inputs
srcInput      = input.source(close, "Source")
atrMultInput  = input.float(1.5, "ATR Multiplier")
muInput       = input.float(0.6, "Adaptation Rate (μ)")

entryMode    = input.string("A",  "Entry Mode",       options=["A","B","C"])
entrySubMode = input.string("B1", "Early Entry Type", options=["B1","B2"])

exitMode  = input.string("By Trend Change", "Exit Mode",
                         options=["By Trend Change","By Price Cross","Both"])
useLongs  = input.bool(true,  "Enable Longs")
useShorts = input.bool(true,  "Enable Shorts")

useBreakeven  = input.bool(true,  "Use Breakeven")
beTriggerPerc = input.float(0.5,  "BE Trigger %")
beOffsetPerc  = input.float(0.0,  "BE Offset %")

usePartialTP   = input.bool(true, "Use Partial TP")
tpPerc         = input.float(2.0, "TP % for Partial Close")
tpQtyPerc      = input.float(20.0, "Close % at TP")


// ---------------------------------------------------------
// L1 Filter
// ---------------------------------------------------------
float atr200    = ta.atr(200)
float threshold = atr200 * atrMultInput
var float z = na
var float v = 0.0

if bar_index == 0
    z := srcInput
else
    float zPrev = z[1]
    float vPrev = v[1]
    float zPred = zPrev + vPrev
    float zTemp = zPred + muInput * (srcInput - zPred)
    float diff  = zTemp - zPrev
    v := math.abs(diff) > threshold ? math.sign(diff)*(math.abs(diff)-threshold) : 0
    z := zPrev + v

// Trend
var int trend = 0
if z > z[1]
    trend := 1
else if z < z[1]
    trend := -1

bool upChange   = trend == 1 and trend[1] == -1
bool downChange = trend == -1 and trend[1] == 1

// ---------------------------------------------------------
// Entry logic
// ---------------------------------------------------------
bool longA  = upChange
bool shortA = downChange

bool longB1  = srcInput > z and srcInput[1] <= z[1]
bool shortB1 = srcInput < z and srcInput[1] >= z[1]

bool longB2  = v > 0 and v[1] <= 0
bool shortB2 = v < 0 and v[1] >= 0

bool longC  = upChange[1]
bool shortC = downChange[1]

bool longEntryRaw  = entryMode == "A" ? longA  : entryMode == "B" ? (entrySubMode == "B1" ? longB1  : longB2) : longC
bool shortEntryRaw = entryMode == "A" ? shortA : entryMode == "B" ? (entrySubMode == "B1" ? shortB1 : shortB2) : shortC

bool longEntry  = longEntryRaw  and useLongs
bool shortEntry = shortEntryRaw and useShorts

bool inLong  = strategy.position_size > 0
bool inShort = strategy.position_size < 0

// ---------------------------------------------------------
// Exit logic
// ---------------------------------------------------------
bool priceAbove = srcInput > z
bool priceBelow = srcInput < z

bool exitLong =
     exitMode == "By Trend Change" ? downChange :
     exitMode == "By Price Cross"  ? priceBelow :
                                     (downChange or priceBelow)

bool exitShort =
     exitMode == "By Trend Change" ? upChange :
     exitMode == "By Price Cross"  ? priceAbove :
                                     (upChange or priceAbove)

// ---------------------------------------------------------
// Breakeven levels
// ---------------------------------------------------------
float beLong  = na
float beShort = na

if useBreakeven and strategy.position_size != 0
    float entry = strategy.position_avg_price
    float profit = (close - entry) / entry * 100 * (inLong ? 1 : -1)

    if inLong and profit >= beTriggerPerc
        beLong := entry * (1 + beOffsetPerc / 100)

    if inShort and profit >= beTriggerPerc
        beShort := entry * (1 - beOffsetPerc / 100)

// ---------------------------------------------------------
// Flip logic (fixed HUD update)
// ---------------------------------------------------------
bool flipLongToShort = inLong and downChange
bool flipShortToLong = inShort and upChange

if flipLongToShort
    strategy.close("Long")
    strategy.entry("Short", strategy.short)


if flipShortToLong
    strategy.close("Short")
    strategy.entry("Long", strategy.long)


// ---------------------------------------------------------
// Entry tracking
// ---------------------------------------------------------
bool newLongEntry  = longEntry  and not inLong  and not inShort
bool newShortEntry = shortEntry and not inShort and not inLong

if newLongEntry
    strategy.entry("Long", strategy.long)


if newShortEntry
    strategy.entry("Short", strategy.short)


// ---------------------------------------------------------
// Breakeven exits
// ---------------------------------------------------------
if inLong and not na(beLong)
    strategy.exit("Long BE", from_entry="Long", stop=beLong)

if inShort and not na(beShort)
    strategy.exit("Short BE", from_entry="Short", stop=beShort)

// ---------------------------------------------------------
// Partial TP logic
// ---------------------------------------------------------
float tpLong  = na
float tpShort = na

if usePartialTP and strategy.position_size != 0
    float entry = strategy.position_avg_price
    if inLong
        tpLong := entry * (1 + tpPerc / 100)
    if inShort
        tpShort := entry * (1 - tpPerc / 100)

if usePartialTP
    if inLong and not na(tpLong)
        strategy.exit("Long TP Partial", from_entry="Long", limit=tpLong, qty_percent=tpQtyPerc)
    if inShort and not na(tpShort)
        strategy.exit("Short TP Partial", from_entry="Short", limit=tpShort, qty_percent=tpQtyPerc)

// ---------------------------------------------------------
// Previous position state
// ---------------------------------------------------------
bool wasLong  = strategy.position_size[1] > 0
bool wasShort = strategy.position_size[1] < 0

// ---------------------------------------------------------
// LuxAlgo Trend Visuals
// ---------------------------------------------------------
color zColor = trend == 1 ? BULL_COLOR : BEAR_COLOR

zPlot   = plot(z, "L1 Proximal Filter", color=zColor, linewidth=3)
srcPlot = plot(srcInput, "Source Plot", color=na)

bool showFill = (trend == 1 and srcInput > z) or (trend == -1 and srcInput < z)

color fillTopColor    = showFill ? color.new(zColor, 50)  : na
color fillBottomColor = showFill ? color.new(zColor, 100) : na

fill(srcPlot, zPlot, srcInput, z, fillTopColor, fillBottomColor, "Trend Fill")

float switchVal   = (upChange or downChange) ? z[1] : na
color switchColor = upChange ? BULL_COLOR : BEAR_COLOR

plot(switchVal, "Trend Switch Dot", color=switchColor, style=plot.style_circles, linewidth=4, offset=-1)

// ---------------------------------------------------------
// TP & BE lines (transparent, disappear when inactive)
// ---------------------------------------------------------
float tpLine = inLong ? tpLong : inShort ? tpShort : na
plot(tpLine, "TP Line", color=color.new(color.yellow, 60), style=plot.style_linebr, linewidth=2)

float beLine = inLong ? beLong : inShort ? beShort : na
plot(beLine, "BE Line", color=color.new(COL_BE, 60), style=plot.style_linebr, linewidth=2)

// ---------------------------------------------------------
// BE marker (simple & perfect)
// ---------------------------------------------------------
float beLinePrev = beLine[1]

bool beLongHit  = not na(beLinePrev) and na(beLine) and wasLong
bool beShortHit = not na(beLinePrev) and na(beLine) and wasShort

plotshape(beLongHit,  "Long BE Hit",  shape.square, location.belowbar, COL_BE, size=size.small)
plotshape(beShortHit, "Short BE Hit", shape.square, location.abovebar, COL_BE, size=size.small)

// ---------------------------------------------------------
// TP markers (only real partial exits)
// ---------------------------------------------------------
bool sizeReducedLong  = wasLong  and strategy.position_size < strategy.position_size[1] and strategy.position_size > 0
bool sizeReducedShort = wasShort and strategy.position_size > strategy.position_size[1] and strategy.position_size < 0

bool tpLongHit  = sizeReducedLong  and not na(tpLong)
bool tpShortHit = sizeReducedShort and not na(tpShort)

plotshape(tpLongHit,  "Long TP Partial Hit",  shape.circle, location.abovebar, COL_TP_LONG, size=size.small)
plotshape(tpShortHit, "Short TP Partial Hit", shape.circle, location.belowbar, COL_TP_SHORT, size=size.small)

// ---------------------------------------------------------
// Entry markers
// ---------------------------------------------------------
plotshape(longEntry,  "Long Entry",  shape.triangleup,   location.belowbar, COL_LONG_ENTRY,  size=size.small)
plotshape(shortEntry, "Short Entry", shape.triangledown, location.abovebar, COL_SHORT_ENTRY, size=size.small)

// ---------------------------------------------------------
// Flip markers
// ---------------------------------------------------------
plotshape(flipLongToShort, "Flip L→S", shape.diamond, location.abovebar, COL_FLIP_SHORT, size=size.small)
plotshape(flipShortToLong, "Flip S→L", shape.diamond, location.belowbar, COL_FLIP_LONG, size=size.small)

// ---------------------------------------------------------
// Alerts
// ---------------------------------------------------------
alertcondition(longEntry,        "Long Entry",        "TSF LONG ENTRY")
alertcondition(shortEntry,       "Short Entry",       "TSF SHORT ENTRY")
alertcondition(flipLongToShort,  "Flip Long→Short",   "TSF FLIP SHORT")
alertcondition(flipShortToLong,  "Flip Short→Long",   "TSF FLIP LONG")
alertcondition(tpLongHit,        "Long TP Partial",   "TSF LONG TP PARTIAL")
alertcondition(tpShortHit,       "Short TP Partial",  "TSF SHORT TP PARTIAL")
alertcondition(beLongHit,        "Long BE",           "TSF LONG BE")
alertcondition(beShortHit,       "Short BE",          "TSF SHORT BE")