
双機会反転量化戦略は,123反転とストキャスティックRSIの2つの戦略の考え方を総合的に使用する組み合わせの戦略である.この戦略は,まず価格が123反転形態が発生したかどうかを判断し,その後,ストキャスティックRSI指標と組み合わせて,反転シグナルを再び確認し,両者が同時に信号を発信するときにのみ,ポジションを多めに開くか空にする.この二重確認機構は,誤報シグナルを効果的にフィルターし,戦略の安定性を高める.
この戦略は2つの部分から構成されています.
この部分では,123の形状を用いて,価格の逆転を判断する.具体的論理は:
閉店価格が昨日の閉店価格より低く,現在の閉店価格が昨日の閉店価格より高く,そして9日のスローストキャスティックが50未満であれば,多めにします.
閉店価格が昨日の閉店価格より高く,現在の閉店価格が昨日の閉店価格より低く,そして9日のFast Stochasticが50以上である場合,空白
価格の逆転の早期の兆候を検知する.
このセクションでは,RSIをStochasticで再分析し,反転を確認します.
RSIを計算すると,
RSIにストキャスティック分析を適用し,長さ14でK値を取得
K値の3日SMA D値を計算する
K値が80を超えれば,見多めで,K値が20未満なら見空だ.
ポジションを開くのは,両方の戦略が同時にシグナルを発したときにのみです.
この戦略の最大の利点は,誤報信号を効率的にフィルターして安定性を高めるための二重確認の考え方である.具体的利点は以下の通りである.
123の反転は,価格の反転を早期に判断する
ストキャスティックRSIは,反転の確認を提供して,反転のポイントを逃さないようにします.
この2つの組み合わせは,勝率を高め,誤報の確率を減らすことができます.
パラメータの組み合わせの最適化により,異なる市場向けにパラメータを調整できます.
プログラム化実装はシンプルで明快で,実用化も容易である
この戦略にはいくつかのリスクがあります.
逆転の失敗のリスク. 市場が誤って逆転して損失を招く可能性がある.
パラメータ最適化のリスク.不適切なパラメータの組み合わせは,戦略の効果を損なう可能性があります.
過剰最適化のリスク. 過去データに対して過剰最適化パラメータを適用し,将来の効果は複製できない.
取引頻度が高すぎるリスク. 二重シグナルにより取引頻度が増加し,滑点コストが上昇する可能性がある.
コード実装リスク。コードに欠陥がある場合,リッドディスク効果の異常を招く可能性があります。
対応方法:
ポジションの規模を適切に調整し,単発損失を制御する.
ウォーク・フォワードでパラメータを最適化する.
安定したパラメータを重視し,高利回りを追求しない.
ポジション開設条件を適切に調整し,取引頻度を下げる.
コードをよくテストして,論理が正しいことを確認します.
この戦略は以下の点で最適化できます.
最適化パラメータ。 特定の市場向けに最適化するためにStochasticなどのパラメータを調整できます。
ポジション開設条件の最適化.他の判断要素を加え,衝動逆転を避ける.
オプティマイズ・ストップ・メカニズム 移動ストップ,時間ストップなどの方法が設定できます.
取引の頻度を下げること. 取引のフィルタリング条件を増やして取引の頻度を下げること.
ポジション管理を追加. 市場の状況に応じてポジションのサイズを調整する.
手数料の要因を考慮する.実際の手数料に応じて戦略パラメータを調整する.
双機会反転量化戦略は,全体的に安定し,実用的なショートライン反転戦略である.それは,反転を捕捉する感度と二重フィルターの安定性を兼ね備えている.パラメータの最適化と適切な修正によって,この戦略は,量化戦略システムの有効な構成要素になることができる.しかし,我々は,過度最適化と誤報のリスクを防ぎ,パラメータの安定性を維持し,清算で慎重に検証することも注意する必要があります.
/*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 )