리버모어 롱 키 가격 돌파 양적 거래 전략

ATR Pivot Points Trend Analysis JESSE LIVERMORE risk management
생성 날짜: 2025-07-16 11:24:22 마지막으로 수정됨: 2025-08-07 10:07:04
복사: 0 클릭수: 326
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

리버모어 롱 키 가격 돌파 양적 거래 전략 리버모어 롱 키 가격 돌파 양적 거래 전략

개요

리버모어 다수점 핵심 가격 돌파량 거래 전략은 제시 리버모어 거래 철학에 기반한 체계화된 거래 방법이다. 이 전략은 시장의 주요 추세, 자연 회귀 및 하위 회귀를 식별하여 가격의 핵심 지지점과 저항점을 돌파하는 시점을 정확하게 포착한다. 전략의 핵심은 비율 또는 ATR 지표로 정의된 핵심 축점을 사용하여 트렌드 전환을 확인하고 주요 상승 추세를 확인 할 때 다수점 포지션을 구축하고 주요 하향 추세를 확인 할 때 평점 포지션을 구축하여 시장의 변동에 대한 지능적인 추적과 자금 관리를 구현한다.

전략 원칙

이 전략은 제시 리버모어 (Jesse Livermore) 의 거래 철학에 기반하여 시장 추세를 6가지 상태로 분류합니다. 주요 상승 추세 (MAIN_UP), 주요 하향 추세 (MAIN_DOWN), 자연 반동 (NATURAL_REBOUND), 자연 회귀 (NATURAL_RETRACEMENT), 하위 반동 (SECONDARY_REBOUND) 및 하위 회귀 (SECONDARY_RETRACEMENT).

전략은 현재 가격과 역사적인 핵심 포인트의 관계를 계산하여 기본 축 거리의 비율 ((이 고정된 비율이거나 ATR의 동적 계산을 기반으로 할 수 있습니다) 을 결합하여 시장의 경향 상태를 결정합니다. 구체적인 논리는 다음과 같습니다.

  1. 주요 상승 추세에서, 가격이 지속적으로 상승하거나 회귀의 폭이 주요 축배수의 정의된 하위치를 초과하지 않을 때, 상승 추세 상태를 유지하고 최고점을 업데이트합니다. 회귀가 하위치를 초과할 때, 자연 회귀 상태로 전환합니다.

  2. 주요 하향 추세에서, 가격이 계속 하락하거나 반발폭이 주요 축배수의 정의된 절벽을 초과하지 않을 때, 하향 추세 상태를 유지하고 최저 지점을 업데이트합니다. 반발이 절벽을 초과할 때, 자연 반발 상태로 전환합니다.

  3. 자연 반동/회복과 하위 반동/회복 사이에, 가격과 역사적인 하위/고위점의 관계와 기본 주요 및 하위 축 곱셈에 따라 추세 전환을 판단한다.

거래 신호 생성 논리는 다음과 같습니다: 트렌드가 2 회 연속으로 주요 상승 트렌드를 확인 할 때 다단위 포지션을 설정합니다. 트렌드가 2 회 연속으로 주요 하향 트렌드를 확인 할 때 평위 포지션을 종료합니다.

전략적 이점

  1. 체계화 추세 판단전략: 리버모어의 거래 개념을 체계화하여 명확한 수학적 모델을 통해 다양한 트렌드 상태를 정의하고 주관적 판단으로 인한 불확실성을 제거합니다.

  2. 매우 적응력이 좋다: 기하급수적인 축 거리의 비율과 ATR 옵션을 통해, 전략은 다양한 시장 환경과 변동률 조건에 적응할 수 있으며, 전략의 유연성을 강화합니다.

  3. 확인 메커니즘: 전략은 트렌드가 2회 연속 확인된 후에 거래가 실행되는 것을 요구하며, 가짜 브레이크로 인한 손실을 효과적으로 줄여줍니다.

  4. 자금 관리 통합전략: 계정 지분 비율을 사용하여 포지션을 관리하여 다양한 계정 크기에 따라 일관된 리스크 을 보장합니다.

  5. 장기적인 트렌드 포착주요 동향과 하위 동향을 구분함으로써 전략은 대주기 동향을 효과적으로 포착하여 단기간의 소음으로 인해 방해를 받지 않습니다.

전략적 위험

  1. 지연 위험: 전략이 두 사이클의 트렌드 상태를 확인하는 것이 필요하기 때문에 거래를 실행하기 전에, 트렌드 초기에 수익의 일부를 놓칠 수 있습니다. 또는 트렌드가 역전될 때 더 큰 회수를 견뎌낼 수 있습니다.

  2. 매개변수 민감도전략 성능은 축 거리의 비율, 주요 및 하위 축 곱수 등의 파라미터 설정에 크게 의존합니다. 부적절한 파라미터는 과도한 거래 또는 중요한 신호를 놓칠 수 있습니다.

  3. 한방 거래 제한이 전략은 단지 다단계 거래만 수행하도록 설계되어 있으며, 장기적인 하락 시장에서 장기간의 자금 유예에 직면할 수 있으며, 전체 수익률에 영향을 미칩니다.

  4. 트렌드 정의의 복잡성: 6가지 트렌드 상태 사이의 전환 논리는 더 복잡하며, 시장의 격렬한 변동이 있을 때, 거래 비용을 증가시키는 빈번한 상태 전환을 초래할 수 있다.

  5. 손해 방지 장치의 부재: 코드에 명확한 중지 손실 설정이 없으며, 시장이 급격히 역전되면 큰 손실이 발생할 수 있습니다.

전략 최적화 방향

  1. 손해 방지 장치: ATR 또는 고정 비율 기반의 손실 전략을 도입하여 트렌드 반전 전에 단일 거래 위험을 제어하십시오. 구체적으로 구현하면 다중 포지션을 구축하면서 손실 가격을 설정하여 자금을 보호 할 수 있습니다.

  2. 트렌드 확인을 최적화합니다.: 현재 전략은 2개의 연속적인 주기 확인 트렌드를 필요로 하며, 트렌드 확인을 위해 트래픽 또는 다른 기술 지표를 조합하여 신호 품질을 향상시킬 수 있습니다.

  3. 공백기 기능을 추가전략 확장: 공중 거래를 지원하기 위한 전략 확장, 하향 추세에서 수익을 창출하는 기회를 최대한 활용하고 전략의 온천 성능을 향상시키는 전략

  4. 동적 변수 조정: 역사적인 변동률이나 시장 상태에 기반한 동적 변수 조정 메커니즘을 도입하여 전략이 다른 시장 환경에 더 잘 적응할 수 있도록 한다.

  5. 필터링 조건을 추가: 시장의 주기, 계절 또는 기본 필터를 결합하여, 불리한 조건에서 입장을 개설하는 것을 피하고, 승률을 높여라.

  6. 을 세분화: 분단 입출장 제도를 구현하고, 시기를 선택하는 위험을 줄이고, 자금 사용 효율을 최적화한다.

요약하다

리버모어 다수자 핵심 가격위치 돌파량 거래 전략은 제시 리버모어의 고전 거래 개념을 수치적으로 실행되는 알고리즘 시스템으로 성공적으로 변환합니다. 시장의 6 가지 트렌드 상태를 정확하게 정의하고 전환 조건으로 전략은 주요 상승 추세를 효과적으로 식별하고 추적하여 확인된 추세에 따라 다수자 거래를 수행 할 수 있습니다.

전략은 체계화, 적응력 강하고 내장된 확인 메커니즘과 같은 장점을 가지고 있지만, 지연성, 변수 민감성 및 중지 손실 등의 위험이 있습니다. 중지 메커니즘을 추가하고, 트렌드 확인을 최적화하고, 공백 기능을 확장하고, 동적 변수 조정 등을 구현하는 방향으로 최적화를 통해 전략의 안정성과 수익성을 더욱 향상시킬 수 있습니다.

전반적으로, 이 전략은 Livermore 거래 철학을 체계적으로 구현하려는 투자자에게 견고한 틀을 제공하며, 적절한 변수 조정과 위험 관리 최적화를 통해 실제 거래에서 안정적인 장기 수익을 얻을 수 있습니다.

전략 소스 코드
/*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