二重ショック反転信号対雑音比最適化組み合わせ戦略


作成日: 2023-11-01 16:57:13 最終変更日: 2023-11-01 16:57:13
コピー: 3 クリック数: 599
1
フォロー
1617
フォロワー

二重ショック反転信号対雑音比最適化組み合わせ戦略

概要

この戦略は,二重振動反転戦略と信噪比最適化戦略を組み合わせて,より強力で安定した取引戦略を形成する. この戦略は,トレンドの反転ポイントでより正確な取引信号を発信することに取り組んでいる.

戦略原則

二重の揺れ反転戦略は,過去14日の急速と遅いK値を計算して,価格が2つの取引日連続で反転したかどうかを判断する.反転が起こった場合,急速Kは50を下回ると買入シグナルを示し,急速Kは50を超えると売出シグナルを示します.

通信ノイズ比率最適化策は,最近21日の通信ノイズ比率指標を計算し,29日間の単純な移動平均で平滑化する.通信ノイズ比率が移動平均を上を穿えると売り信号で,下を穿えると買い信号である.

最後に,この戦略は,二重振動反転戦略と信噪比最適化戦略が同時に同じ買入または販売信号を発した場合にのみ,対応する買入または販売操作を行います.

戦略的優位分析

  1. 複数の戦略を組み合わせることで,より正確な取引シグナルを発信し,単一の戦略による偽のシグナルを回避できます.

  2. 双振動反転戦略は,トレンド反転点を捉え,信噪比最適化戦略は,偽信号をフィルターすることができ,両者は組み合わせて,反転点を正確に取引することができる.

  3. 計算パラメータが最適化され,例えば14日速慢ストッチパラメータ,21日通信ノイズ比周期などにより,ストーブが最近のトレンドを反映し,過剰なノイズの影響を受けないことができる。

  4. 二重確認シグナルを使用すると,取引リスクが大幅に軽減され,不必要な損失が軽減されます.

戦略的リスク分析

  1. 逆転信号は遅延し,絶対低点では買えず,高点では売れません.パラメータを調整することで遅延を短縮できます.

  2. ダブルシグナル確認は,取引の機会の一部を逃す可能性があり,確認条件は適切に緩和されるが,リスクも増加する.

  3. 通信ノイズ比パラメータは最適化が必要で,周期設定が不適切であれば,重要な信号を逃すか,誤った信号を発する可能性がある.

  4. 複数の指標を同時に監視する必要があり,戦略の複雑さを高め,コードの最適化と計算リソースの両方も考慮する必要があります.

戦略最適化の方向性

  1. MACD,RSIなどよりよい組み合わせの信号を探すために,より多くの指標の組み合わせをテストします.

  2. ダブル振動反転戦略のパラメータを最適化して,反転信号をより正確かつタイムリーにします.

  3. 通信ノイズ比のパラメータ周期を最適化して,最適なバランスポイントを探します.

  4. 単一取引で発生する損失をコントロールするために,ストップ・ロスの策略を追加します.

  5. 戦略の適応性を高めるために,機械学習などの方法でパラメータを自動的に最適化することを検討する.

要約する

この戦略は,双振動反転戦略と信噪比最適化戦略を組み合わせて,トレンド反転点において安定した取引信号を与える.パラメータが最適化されれば,偽信号の確率を大幅に低減し,二重確認原則を採用することで,取引リスクを減らすことができる.戦略は,指標パラメータを最適化し続け,止損措置などを追加することで,よりよい効果を得ることができる.全体的に,この戦略は安定性があり,実際の取引価値を持つ.

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

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 196/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
// The signal-to-noise (S/N) ratio. 
// And Simple Moving Average.
//
// 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

SignalToNoise(length) =>
    StN = 0.0
    for i = 1 to length-1
        StN := StN + (1/close[i])/length
    StN := -10*log(StN)

StN(length,Smooth) =>
    pos = 0.0
    StN = SignalToNoise(length)
    SMAStN = sma(StN, Smooth)
    pos := iff(SMAStN[0] > StN[0] , -1,
    	     iff(SMAStN[0] < StN[0], 1, 0)) 
    pos

strategy(title="Combo Backtest 123 Reversal & Signal To Noise", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
lengthStN = input(title="Days", type=input.integer, defval=21, minval=2)
SmoothStN =  input(title="Smooth", type=input.integer, defval=29, minval=2)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posStN = StN(lengthStN,SmoothStN)
pos = iff(posReversal123 == 1 and posStN == 1 , 1,
	   iff(posReversal123 == -1 and posStN == -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 )