Ливерморская стратегия количественной торговли по ключевому ценовому прорыву

ATR Pivot Points Trend Analysis JESSE LIVERMORE risk management
Дата создания: 2025-07-16 11:24:22 Последнее изменение: 2025-08-07 10:07:04
Копировать: 0 Количество просмотров: 326
2
Подписаться
319
Подписчики

Ливерморская стратегия количественной торговли по ключевому ценовому прорыву Ливерморская стратегия количественной торговли по ключевому ценовому прорыву

Обзор

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

Стратегический принцип

Стратегия основана на торговой философии Джесси Ливермора и подразделяет рыночные тенденции на шесть состояний: основной восходящий тренд (MAIN_UP), основной нисходящий тренд (MAIN_DOWN), естественный откат (NATURAL_REBOUND), естественный откат (NATURAL_RETRACEMENT), вторичный откат (SECONDARY_REBOUND) и вторичный откат (SECONDARY_RETRACEMENT).

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

  1. В основном восходящем тренде, когда цена продолжает расти или резко снижается, но не превышает пороговой величины, определенной основным коэффициентом, сохраняется состояние восходящего тренда и обновляется максимальная точка; когда регресс превышает пороговое значение, переходит в состояние естественного регресса.

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

  3. Между естественным и вторичным отскоком/отказом следует определить переход тренда в зависимости от отношения цены к историческим максимумам и минимумам, а также от заданного множителя основных и вторичных осей.

Логика генерирования торговых сигналов заключается в следующем: создание позиции с множеством голов, когда тренд два последовательных цикла подтверждает основную восходящую тенденцию; выход из позиции с равным положением, когда тренд два последовательных цикла подтверждает основную нисходящую тенденцию.

Стратегические преимущества

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

  2. Высокая степень адаптацииПовышенная гибкость стратегии благодаря возможности адаптации стратегии к различным рыночным условиям и колебаниям, благодаря параметризации процентов расстояния от центральной оси и опций ATR.

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

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

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

Стратегический риск

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

  2. Параметр Чувствительность: эффективность стратегии сильно зависит от параметров, таких как процент расстояния от центральной оси, умножение на основную и второстепенную оси, неправильные параметры могут привести к чрезмерной торговле или пропуску важных сигналов.

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

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

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

Направление оптимизации стратегии

  1. Увеличение убыточностиВнедрение стратегии остановки убытков, основанной на ATR или фиксированном процентном соотношении, для контроля риска одной сделки до обратного тренда. Конкретная реализация может быть установлена при установлении многоочередных позиций, в то же время устанавливая цену остановки убытков, защищая безопасность средств.

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

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

  4. Изменение динамических параметровВведение механизмов динамической корректировки параметров, основанных на исторической волатильности или состоянии рынка, чтобы стратегия могла лучше адаптироваться к различным рыночным условиям.

  5. Добавить условия фильтрацииПовышение выигрышных коэффициентов в сочетании с рыночными циклами, сезонными или базовыми фильтрами, избегая открытия позиций в неблагоприятных условиях.

  6. Строительство складов и складовВ частности: реализация механизма распределенного ввода и вывода, снижение риска выбора времени, оптимизация эффективности использования средств.

Подвести итог

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

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

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

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

// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © bozhang_ox

//@version=6
strategy("Trading strategy Jesse Livermore", overlay=true)

// Input parameters
pivot_distance_percentage = input.float(0.5, title="Pivot Distance Percentage")
major_pivot_multiplier = input.int(6, title="Major Pivot Multiplier")
minor_pivot_multiplier = input.int(3, title="Minor Pivot Multiplier")
use_atr_pivot_distance = input.bool(false, title="Use ATR for Pivot Distance")
atr_period = input.int(14, title="ATR Period")
atr_pivot_multiplier = input.float(1, title="ATR Pivot Multiplier")

// Calculate ATR
atr = ta.atr(atr_period)

// Helper function to calculate pivot distance ratio
pivot_distance_ratio = use_atr_pivot_distance ? (atr * atr_pivot_multiplier) / close : pivot_distance_percentage / 100

// Trend states
NONE = 0
MAIN_UP = 6
MAIN_DOWN = 1
NATURAL_REBOUND = 2
NATURAL_RETRACEMENT = 5
SECONDARY_REBOUND = 4
SECONDARY_RETRACEMENT = 3

// Variables to track trends
var float main_up_max = na
var float main_down_min = na
var float natural_rebound_max = na
var float natural_retracement_min = na
var int trend = NONE
var int prev_trend = NONE
var int prev_prev_trend = NONE


// Initialize variables
if na(main_up_max)
    main_up_max := -1e10
if na(main_down_min)
    main_down_min := 1e10
if na(natural_rebound_max)
    natural_rebound_max := -1e10
if na(natural_retracement_min)
    natural_retracement_min := 1e10

// Trend logic
if trend == NONE
    if close > close[1]
        trend := MAIN_UP
        main_up_max := close
    else
        trend := MAIN_DOWN
        main_down_min := close
else if trend == MAIN_UP
    if close > close[1] or (main_up_max - close < close[1] * pivot_distance_ratio * major_pivot_multiplier)
        trend := MAIN_UP
        main_up_max := math.max(main_up_max, close)
    else
        trend := NATURAL_RETRACEMENT
        natural_retracement_min := close
else if trend == MAIN_DOWN
    if close < close[1] or (close - main_down_min < close[1] * pivot_distance_ratio * major_pivot_multiplier)
        trend := MAIN_DOWN
        main_down_min := math.min(main_down_min, close)
    else
        trend := NATURAL_REBOUND
        natural_rebound_max := close
else if trend == NATURAL_REBOUND
    if close > close[1]
        if close <= main_up_max
            if close - natural_rebound_max <= close[1] * pivot_distance_ratio * minor_pivot_multiplier
                trend := NATURAL_REBOUND
                natural_rebound_max := math.max(natural_rebound_max, close)
            else
                trend := MAIN_UP
                main_up_max := close
        else
            trend := MAIN_UP
            main_up_max := close
    else
        if natural_rebound_max - close <= close[1] * pivot_distance_ratio * major_pivot_multiplier
            trend := NATURAL_REBOUND
        else if close < natural_retracement_min
            trend := NATURAL_RETRACEMENT
            natural_retracement_min := close
        else
            trend := SECONDARY_RETRACEMENT
else if trend == NATURAL_RETRACEMENT
    if close < close[1]
        if close >= main_down_min
            if natural_retracement_min - close <= close[1] * pivot_distance_ratio * minor_pivot_multiplier
                trend := NATURAL_RETRACEMENT
                natural_retracement_min := math.min(natural_retracement_min, close)
            else
                trend := MAIN_DOWN
                main_down_min := close
        else
            trend := MAIN_DOWN
            main_down_min := close
    else
        if close - natural_retracement_min <= close[1] * pivot_distance_ratio * major_pivot_multiplier
            trend := NATURAL_RETRACEMENT
        else if close > natural_rebound_max
            trend := NATURAL_REBOUND
            natural_rebound_max := close
        else
            trend := SECONDARY_REBOUND
else if trend == SECONDARY_REBOUND
    if close <= natural_rebound_max and close >= natural_retracement_min
        trend := SECONDARY_REBOUND
    else if close < natural_retracement_min
        trend := NATURAL_RETRACEMENT
        natural_retracement_min := close
    else
        trend := NATURAL_REBOUND
        natural_rebound_max := close
else if trend == SECONDARY_RETRACEMENT
    if close >= natural_retracement_min and close <= natural_rebound_max
        trend := SECONDARY_RETRACEMENT
    else if close > natural_rebound_max
        trend := NATURAL_REBOUND
        natural_rebound_max := close
    else
        trend := NATURAL_RETRACEMENT
        natural_retracement_min := close


// Execute trades based on trend changes
if prev_trend != prev_prev_trend
    if trend == MAIN_UP and prev_trend == MAIN_UP
        strategy.entry("Long Entry", strategy.long, comment="Long Entry")
    else if trend == MAIN_DOWN and prev_trend == MAIN_DOWN
        strategy.close("Long Entry", comment = "Long Close")

// Update previous trend
prev_prev_trend := prev_trend
prev_trend := trend