リバモアのロングキー価格突破定量取引戦略

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
フォロワー

リバモアのロングキー価格突破定量取引戦略 リバモアのロングキー価格突破定量取引戦略

概要

リバモアの多頭關鍵価格突破量化取引戦略は,ジェシー・リバモアの取引哲学に基づく体系化された取引方法である.この戦略は,市場の主要トレンド,自然回転,次級回転を識別し,価格が重要なサポートと抵抗点を突破するタイミングを正確に捉える.戦略の中心は,トレンド転換を決定するために,パーセントまたはATR指標で定義された重要な枢軸を使用し,主要な上昇傾向を確認する際に多頭ポジションを確立し,主要な下降傾向を確認する際に平衡ポジションを確立し,市場の波動をスマートに追跡し,資金管理を行うことである.

戦略原則

この戦略は,ジェシー・リバモアの取引理念に基づいて,市場トレンドを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サイクル間のトレンド状態を確認して取引を行う必要があるため,トレンドの初期に一部の利益を逃すか,トレンドが逆転するときにより大きな撤退を耐えることができる.

  2. パラメータ感度: 戦略のパフォーマンスは,枢軸距離のパーセント,主軸と次軸の倍数などのパラメータの設定に高度に依存し,不適切なパラメータは,過度取引や重要な信号を逃す可能性があります.

  3. 一方向取引制限: 戦略は多頭取引のみを実行するように設計されており,長期にわたる下落市場では,資金の長期の空置に直面し,全体的な収益率に影響を与える可能性があります.

  4. トレンドは複雑さを定義する: 6つのトレンド状態の間の変換の論理は複雑で,市場が急激に変動する時には,頻繁に状態の切り替えが起こり,取引コストが増加する可能性があります.

  5. リスクの抑制の欠如: コードには明瞭な止損設定がなく,市場が急激に逆転した場合,大きな損失に直面する可能性があります.

戦略最適化の方向性

  1. 損失防止の強化:ATRまたは固定パーセントに基づいたストップ・ロズ戦略を導入し,トレンドが逆転する前に単一取引のリスクを制御する.具体的には,多頭ポジションの設立と同時にストップ・ロズ価格を設定し,資金の安全性を保護する.

  2. トレンド確認の最適化:現在の戦略は2つの連続周期のトレンド確認を必要とし,交差量または他の技術指標を組み合わせてトレンド確認を考慮し,信号の質を向上させることができる.

  3. 空白機能を追加する戦略を拡張して空頭取引を支援し,下降傾向で利益を得る機会を最大限に活用し,戦略の全天候性能を向上させる.

  4. 動態参数調整: 戦略が異なる市場環境により適したように,歴史的な変動率や市場の状況に基づく動的パラメータ調整メカニズムを導入する.

  5. フィルタリング条件を追加: 市場周期,季節性,または基本的フィルターと組み合わせて,不利な条件でポジションを開くのを避け,勝率を上げる.

  6. 貯蔵庫の建設資金の利用効率を最適化するために,時間選択のリスクを減らす.

要約する

リヴァモール多頭關鍵値突破量化取引戦略は,ジェシー・リヴァモアの古典的な取引理念を,量的に実行されるアルゴリズムシステムに成功させた.市場における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