ラゲールRSI取引戦略は,RSI指標に適用されたジョン・EHLERS
この戦略の核心指標はラガーRSIである.その計算式は以下のとおりである.
L0 = (1-γ)Src + γL0 [1] L1 = -γL0 + L0[1] + γL1 [1] L2 = -γL1 + L1[1] + γL2 [1] L3 = -γL2 + L2[1] + γL3 [1]
ここで γ=1-α,αは調節可能な係数で,Srcは価格を表します.L0からL3は再帰関係を含む4つの指標です.この根拠に基づいて,現在の上積積 cuと下積積 cdを計算できます:
cu = (L0>L1? L0-L1 : 0) + (L1>L2? L1-L2 : 0) + (L2>L3? L2-L3 : 0) cd = (L0
このとき,Laguerre RSI は cu と cd を使って計算できます.
LaRSI = cu / (cu + cd)
リキュルシブフィルター構造により,ラグエールRSIはRSIのトレンド識別能力を保持し,多くのランダムなノイズをフィルタリングし,より明確でスムーズな取引信号を生成します.
取引の具体的な規則は次のとおりです. ラガーレのRSIが20を超えるとロングで ラガーレのRSIが80を超えるとショートします
ラガーレのRSI戦略の主な利点は以下の通りです.
効率的にラガーフィルター構造を通してRSIのノイズをフィルタリングし,より明確で信頼性の高い取引信号を作ります
調整可能なα係数は,より多くの市場環境に適応するために最適化のために戦略パラメータを柔軟にする
RSIの長期的有効性を保持し,フィルタリング,トレンド統合,過買い/過売のやり方でモメントを特定することができます.
シンプルで直感的な戦略ルールで,様々な市場環境で簡単に実装され,うまく機能します
この戦略の主なリスクは,
α の誤った設定は,過度の遅延や過濾に導いて,価格変化が見逃される可能性があります.
波動性のある市場では頻繁に取引損失が発生する可能性があります.
長期的に持続的な牛市では,上向きの機会が逃れられることがあります.
この戦略は,次の側面から最適化できます.
マシン学習アルゴリズムを使用して,α係数設定を最適化します
損失リスクを減らすためにストップ・ロスのメカニズムを追加する
偽信号をフィルターするために他の指標を組み合わせる
定量緩和モデルを強化し,特定の段階での利益を確保する
ラグエールRSI戦略は,取引信号を発行する際にノイズからの干渉を回避しながら,フィルタリングメカニズムを通じて過買い・過売状況を効果的に識別する.このシンプルで実践的な戦略は,パラメータのための大きな最適化スペースを有し,さまざまな市場環境に適応することができます.これは推奨される取引戦略です.
/*backtest start: 2022-12-12 00:00:00 end: 2023-12-18 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © mertriver1 // Developer: John EHLERS //@version=3 // Author:Kıvanç Özbilgiç strategy("Laguerre RSI", shorttitle="LaRSI", overlay=false) src = input(title="Source", defval=close) alpha = input(title="Alpha", type=float, minval=0, maxval=1, step=0.1, defval=0.2) colorchange = input(title="Change Color ?", type=bool, defval=false) Date1 = input(true, title = "=== Date Backtesting ===") FromDay1 = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromMonth1 = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromYear1 = input(defval = 2020, title = "From Year", minval = 2017) ToDay1 = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToMonth1 = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToYear1 = input(defval = 9999, title = "To Year", minval = 2017) start1 = timestamp(FromYear1, FromMonth1, FromDay1, 00, 00) finish1 = timestamp(ToYear1, ToMonth1, ToDay1, 23, 59) window1() => time >= start1 and time <= finish1 ? true : false gamma=1-alpha L0 = 0.0 L0 := (1-gamma) * src + gamma * nz(L0[1]) L1 = 0.0 L1 := -gamma * L0 + nz(L0[1]) + gamma * nz(L1[1]) L2 = 0.0 L2 := -gamma * L1 + nz(L1[1]) + gamma * nz(L2[1]) L3 = 0.0 L3 := -gamma * L2 + nz(L2[1]) + gamma * nz(L3[1]) cu= (L0>L1 ? L0-L1 : 0) + (L1>L2 ? L1-L2 : 0) + (L2>L3 ? L2-L3 : 0) cd= (L0<L1 ? L1-L0 : 0) + (L1<L2 ? L2-L1 : 0) + (L2<L3 ? L3-L2 : 0) temp= cu+cd==0 ? -1 : cu+cd LaRSI=temp==-1 ? 0 : cu/temp Color = colorchange ? (LaRSI > LaRSI[1] ? green : red) : blue plot(100*LaRSI, title="LaRSI", linewidth=2, color=Color, transp=0) plot(20,linewidth=1, color=maroon, transp=0) plot(80,linewidth=1, color=maroon, transp=0) strategy.entry("Long", true, when = window1() and crossover(cu, cd)) strategy.entry("Short", false, when = window1() and crossunder(cu, cd))