デュアルファクターモメンタムトラッキング反転戦略


作成日: 2024-01-18 11:33:40 最終変更日: 2024-01-18 11:33:40
コピー: 0 クリック数: 571
1
フォロー
1617
フォロワー

デュアルファクターモメンタムトラッキング反転戦略

概要

この戦略は,株式価格反転因子と動力因子を組み合わせて,市場短期反転と中長期のpersistenceの機会を捉えるために2つの因子モデルを構築しています.この戦略は,先ず,近期価格反転信号を判断するために123形状を使用し,その後,ラグエルRSI指標と組み合わせて中長期の傾向を判断し,最終的に2つの因子信号の有効な組み合わせを実現します.

戦略原則

この戦略は2つの部分から構成されています.

  1. 123形逆転因子

この部分は,前2日の閉盘価格の変化を判断することによって,価格の短期反転シグナルを発見した.具体的には,前2日の閉盘価格が前2日の閉盘価格より低く,今日の閉盘価格が前1日の閉盘価格より高くなった場合,価格反転として上昇したシグナルを判断することができる.ストック指数は,補助判断に使用される.

  1. ラゲルフィルターに基づくRSI因子

この部分は,より敏感なRSI指標を構築している.従来のRSI指標は,価格変化に対する感度が低いが,ラガーフィルターは,より少ない歴史的データで指標を構築することができ,価格変化に対する感度が向上している.新しいRSI指標は,中長期トレンドを判断するために使用されている.

最終的に,戦略は両方の信号を組み合わせて,短期的な反転を同時に実行し,大きなトレンドが反転しないことを保証し,反転の機会を捉えます.

戦略的優位性

この戦略の最大の利点は,反転因子とトレンド因子を成功的に組み合わせることです.反転因子は,短期的な調整後の価格反転の機会を捉えることができ,トレンド因子は,大手買い/空売り方向の変化を保証しません.単一の反転または動量モデルと比較して,この二元因子モデルは,偽信号を減らす前提で多額の空売りの正確性を向上させることができます.

さらに,ラゲルRSIの追加は,価格変化に対するモデルの感受性を高め,これは特に高周波取引に重要です.

リスク分析

この戦略が直面する主なリスクは,二因子信号が分岐する可能性があることにある.特に,市場の揺動的な調整の間,短期価格が頻繁に逆転すると同時に,中長線の傾向も変化する可能性がある.このとき,二つの信号が誤った組み合わせまたは遅延が発生する可能性が非常に高い.これは,戦略が誤った信号を生成し,その結果,最適な入場タイミングを逃すか,または不必要な損失を引き起こすことになる.

さらに,パラメータの選択が不適切であることも戦略の不良パフォーマンスを引き起こす.逆転因子とトレンド因子に対応する技術指標パラメータは,それぞれ最適化とテストを必要とし,パラメータの不適切な組み合わせは,戦略の効果を大きく損なう可能性があります.

最適化の方向

この戦略の次の最適化方向は,信号フィルタリングとパラメータ選択に重点を置いている.さらに多くのフィルタリング条件を追加することを考えることができ,二因子信号が分岐した場合に作用し,高確実性シナリオでのみポジションを開くことを保証することができる.これは誤信号率を大幅に減らすことができる.

パラメータ選択では,機械学習や科学実験の方法を試し,各パラメータの組み合わせを体系的にテストし,最適なパラメータを見つけることができます.これは高い計算能力のサポートを必要とするが,戦略の安定性を大幅に向上させることができます.

要約する

この戦略は,反転因子とトレンド因子を成功的に融合させ,短期反転と中長期の持続の機会を2つの因子モデルで捉えます.追加されたラガーRSIフィルターは,価格変化に対するモデルの感受性を高めます.次の作業は,戦略の効果をさらに高めるために,信号フィルタリングとパラメータの最適化に焦点を当てます.

ストラテジーソースコード
/*backtest
start: 2024-01-10 00:00:00
end: 2024-01-17 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 21/01/2021
// This is combo strategies for get a cumulative signal. 
//
// First strategy
// This System was created from the Book "How I Tripled My Money In The 
// Futures Market" by Ulf Jensen, Page 183. This is reverse type of strategies.
// The strategy buys at market, if close price is higher than the previous close 
// during 2 days and the meaning of 9-days Stochastic Slow Oscillator is lower than 50. 
// The strategy sells at market, if close price is lower than the previous close price 
// during 2 days and the meaning of 9-days Stochastic Fast Oscillator is higher than 50.
//
// Second strategy
// This is RSI indicator which is more sesitive to price changes. 
// It is based upon a modern math tool - Laguerre transform filter.
// With help of Laguerre filter one becomes able to create superior 
// indicators using very short data lengths as well. The use of shorter 
// data lengths means you can make the indicators more responsive to 
// changes in the price.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
Reversal123(Length, KSmoothing, DLength, Level) =>
    vFast = sma(stoch(close, high, low, Length), KSmoothing) 
    vSlow = sma(vFast, DLength)
    pos = 0.0
    pos := iff(close[2] < close[1] and close > close[1] and vFast < vSlow and vFast > Level, 1,
	         iff(close[2] > close[1] and close < close[1] and vFast > vSlow and vFast < Level, -1, nz(pos[1], 0))) 
	pos

LB_RSI(gamma,BuyBand,SellBand) =>
    pos = 0.0
    xL0 = 0.0
    xL1 = 0.0
    xL2 = 0.0
    xL3 = 0.0
    xL0 := (1-gamma) * close + gamma * nz(xL0[1], 1)
    xL1 := - gamma * xL0 + nz(xL0[1], 1) + gamma * nz(xL1[1], 1)
    xL2 := - gamma * xL1 + nz(xL1[1], 1) + gamma * nz(xL2[1], 1)
    xL3 := - gamma * xL2 + nz(xL2[1], 1) + gamma * nz(xL3[1], 1)
    CU = (xL0 >= xL1 ? xL0 - xL1 : 0) + (xL1 >= xL2 ? xL1 - xL2 : 0)  + (xL2 >= xL3 ? xL2 - xL3 : 0)
    CD = (xL0 >= xL1 ? 0 : xL1 - xL0) + (xL1 >= xL2 ? 0 : xL2 - xL1)  + (xL2 >= xL3 ? 0 : xL3 - xL2)
    nRes = iff(CU + CD != 0, CU / (CU + CD), 0)
    pos := iff(nRes > BuyBand, 1,
    	     iff(nRes < SellBand, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Laguerre-based RSI", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
gamma = input(0.5, minval=-0.1, maxval = 0.9)
BuyBand = input(0.8, step = 0.01)
SellBand = input(0.2, step = 0.01)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posLB_RSI = LB_RSI(gamma,BuyBand,SellBand)
pos = iff(posReversal123 == 1 and posLB_RSI == 1 , 1,
	   iff(posReversal123 == -1 and posLB_RSI == -1, -1, 0)) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1 , 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )