ダブルチャンスリバーサル定量戦略


作成日: 2023-11-14 13:42:47 最終変更日: 2023-11-14 13:42:47
コピー: 0 クリック数: 676
1
フォロー
1617
フォロワー

ダブルチャンスリバーサル定量戦略

概要

双機会反転量化戦略は,123反転とストキャスティックRSIの2つの戦略の考え方を総合的に使用する組み合わせの戦略である.この戦略は,まず価格が123反転形態が発生したかどうかを判断し,その後,ストキャスティックRSI指標と組み合わせて,反転シグナルを再び確認し,両者が同時に信号を発信するときにのみ,ポジションを多めに開くか空にする.この二重確認機構は,誤報シグナルを効果的にフィルターし,戦略の安定性を高める.

戦略原則

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

  1. 123 回転する

この部分では,123の形状を用いて,価格の逆転を判断する.具体的論理は:

  • 閉店価格が昨日の閉店価格より低く,現在の閉店価格が昨日の閉店価格より高く,そして9日のスローストキャスティックが50未満であれば,多めにします.

  • 閉店価格が昨日の閉店価格より高く,現在の閉店価格が昨日の閉店価格より低く,そして9日のFast Stochasticが50以上である場合,空白

価格の逆転の早期の兆候を検知する.

  1. Stochastic RSI

このセクションでは,RSIをStochasticで再分析し,反転を確認します.

  • RSIを計算すると,

  • RSIにストキャスティック分析を適用し,長さ14でK値を取得

  • K値の3日SMA D値を計算する

  • K値が80を超えれば,見多めで,K値が20未満なら見空だ.

ポジションを開くのは,両方の戦略が同時にシグナルを発したときにのみです.

優位分析

この戦略の最大の利点は,誤報信号を効率的にフィルターして安定性を高めるための二重確認の考え方である.具体的利点は以下の通りである.

  1. 123の反転は,価格の反転を早期に判断する

  2. ストキャスティックRSIは,反転の確認を提供して,反転のポイントを逃さないようにします.

  3. この2つの組み合わせは,勝率を高め,誤報の確率を減らすことができます.

  4. パラメータの組み合わせの最適化により,異なる市場向けにパラメータを調整できます.

  5. プログラム化実装はシンプルで明快で,実用化も容易である

リスク分析

この戦略にはいくつかのリスクがあります.

  1. 逆転の失敗のリスク. 市場が誤って逆転して損失を招く可能性がある.

  2. パラメータ最適化のリスク.不適切なパラメータの組み合わせは,戦略の効果を損なう可能性があります.

  3. 過剰最適化のリスク. 過去データに対して過剰最適化パラメータを適用し,将来の効果は複製できない.

  4. 取引頻度が高すぎるリスク. 二重シグナルにより取引頻度が増加し,滑点コストが上昇する可能性がある.

  5. コード実装リスク。コードに欠陥がある場合,リッドディスク効果の異常を招く可能性があります。

対応方法:

  1. ポジションの規模を適切に調整し,単発損失を制御する.

  2. ウォーク・フォワードでパラメータを最適化する.

  3. 安定したパラメータを重視し,高利回りを追求しない.

  4. ポジション開設条件を適切に調整し,取引頻度を下げる.

  5. コードをよくテストして,論理が正しいことを確認します.

最適化の方向

この戦略は以下の点で最適化できます.

  1. 最適化パラメータ。 特定の市場向けに最適化するためにStochasticなどのパラメータを調整できます。

  2. ポジション開設条件の最適化.他の判断要素を加え,衝動逆転を避ける.

  3. オプティマイズ・ストップ・メカニズム 移動ストップ,時間ストップなどの方法が設定できます.

  4. 取引の頻度を下げること. 取引のフィルタリング条件を増やして取引の頻度を下げること.

  5. ポジション管理を追加. 市場の状況に応じてポジションのサイズを調整する.

  6. 手数料の要因を考慮する.実際の手数料に応じて戦略パラメータを調整する.

要約する

双機会反転量化戦略は,全体的に安定し,実用的なショートライン反転戦略である.それは,反転を捕捉する感度と二重フィルターの安定性を兼ね備えている.パラメータの最適化と適切な修正によって,この戦略は,量化戦略システムの有効な構成要素になることができる.しかし,我々は,過度最適化と誤報のリスクを防ぎ,パラメータの安定性を維持し,清算で慎重に検証することも注意する必要があります.

ストラテジーソースコード
/*backtest
start: 2023-10-14 00:00:00
end: 2023-11-13 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 03/08/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 strategy used to calculate the Stochastic RSI
//
// 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


SRSI(lengthRSI,lengthStoch,smoothK,smoothD, TopBand,LowBand) =>
    pos = 0.0
    Source = close
    rsi1 = rsi(Source, lengthRSI)
    k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK)
    d = sma(k, smoothD)
    d_cross_80 = cross(d,TopBand) 
    pos := iff(k > TopBand, 1,
              iff(k < LowBand, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Stochastic RSI", shorttitle="Combo", overlay = true)
line1 = input(true, "---- 123 Reversal ----")
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
line2 = input(true, "---- Stochastic RSI ----")
TopBand = input(80, step=0.01)
LowBand = input(20, step=0.01)
lengthRSI = input(14, minval=1)
lengthStoch = input(14, minval=1)
smoothK = input(3, minval=1)
smoothD = input(3, minval=1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posSRSI = SRSI(lengthRSI,lengthStoch,smoothK,smoothD, TopBand,LowBand)
pos = iff(posReversal123 == 1 and posSRSI == 1 , 1,
	   iff(posReversal123 == -1 and posSRSI == -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 )