定量的な逆転とボリュームコンボ戦略

作者: リン・ハーンチャオチャン, 日付: 2023-09-21 21:07:09
タグ:

概要

この戦略は,より正確で信頼性の高い取引シグナルを生成するための2つの定量的な取引戦略を組み合わせます.最初の戦略は価格逆転,第2の戦略はボリューム分析に基づいています.組み合わせたシグナルは収益性を効果的に改善することができます.

戦略の論理

戦略は2つの部分からなる.

  1. 逆転戦略

STOインジケータを逆転信号に使用する. ストロが2日間上昇し,ストロのスローラインが50を下回るとロング. ストロが2日間低下し,ストロのスローラインが50を超えるとショート.

  1. 容量戦略

移動平均の平滑で方向を決定するために,期間中の価格・量関係を分析します.

両方の戦略が短信号を出すと 短信号になります

コンボは2つの戦略から誤った信号を大幅に削減することで信号品質を改善します

利点

  • 2つの独立した戦略を組み合わせ,正確性を向上させる
  • 逆転は転換の機会を捉え 容積は将来の方向性を予測する
  • 異なる戦略タイプは互いに検証し,誤った信号を減らす
  • シンプルな直接の組み合わせで 簡単に実行できます
  • 各戦略のパラメータは別々に最適化できます

リスク

  • 厳格な退場規則がなければリスクの高い逆転
  • 容量分析が遅れる可能性があります
  • 純粋に指標に基づく技術分析が必要です
  • 移動平均値のために必要なより長いデータシリーズ
  • パラメータは製品ごとに普遍的ではない場合もある.

リスクは以下によって軽減できます.

  • STOを最適化して逆転を検出する
  • 総量ブレイクを確認するための指標を追加する
  • 移動平均期間の最適化
  • 補足的なチャートパターン分析
  • 製品別のパラメータ試験

改善の方向性

戦略は以下によって改善できます.

  1. STO パラメーターの最適化

    最適な組み合わせのための微調整K,D値

  2. 音量断定の二次確認

    MACD,BOLLなどの指標で

  3. 移動平均期間の最適化

    より安定した信号のテスト

  4. チャートパターンを追加する

    コンボ信号に加えてパターンを入力

  5. 製品特異パラメータ試験

    パラメータは異なる製品によって異なります.

概要

この戦略は,信号の品質と精度を向上させるため,逆転とボリューム戦略を組み合わせます. しかし,パラメータ最適化,追加の技術指標などによりパフォーマンスを改善することができます. 裏テスト結果に基づいて継続的に調整し,ライブトレーディングで検証し,真に堅牢なコンボ戦略を得ることができます. これには膨大な時間と労力が必要ですが,報酬も重要です.


/*backtest
start: 2023-09-13 00:00:00
end: 2023-09-20 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
//  Copyright by HPotter v1.0 21/10/2020
// 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 another version of FVE indicator that we have posted earlier 
// in this forum.
// This version has an important enhancement to the previous one that`s 
// especially useful with intraday minute charts.
// Due to the volatility had not been taken into account to avoid the extra 
// complication in the formula, the previous formula has some drawbacks:
// The main drawback is that the constant cutoff coefficient will overestimate 
// price changes in minute charts and underestimate corresponding changes in 
// weekly or monthly charts.
// And now the indicator uses adaptive cutoff coefficient which will adjust to 
// all time frames automatically.
//
// 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


FVI(Samples,Perma,Cintra,Cinter) =>
    pos = 0
    xhl2 = hl2
    xhlc3 = hlc3
    xClose = close
    xIntra = log(high) - log(low)
    xInter = log(xhlc3) - log(xhlc3[1])
    xStDevIntra = stdev(sma(xIntra, Samples) , Samples)
    xStDevInter = stdev(sma(xInter, Samples) , Samples)
    xVolume = volume
    TP = xhlc3
    TP1 = xhlc3[1]
    Intra = xIntra
    Vintra = xStDevIntra
    Inter = xInter
    Vinter = xStDevInter
    CutOff = Cintra * Vintra + Cinter * Vinter
    MF = xClose - xhl2 + TP - TP1
    FveFactor =  iff(MF > CutOff * xClose, 1, 
                  iff(MF < -1 * CutOff * xClose, -1,  0))
    xVolumePlusMinus = xVolume * FveFactor
    Fvesum = sum(xVolumePlusMinus, Samples)
    VolSum = sum(xVolume, Samples)
    xFVE = (Fvesum / VolSum) * 100
    xEMAFVE = ema(xFVE, Perma)
    pos :=iff(xFVE > xEMAFVE, 1,
    	   iff(xFVE < xEMAFVE, -1, nz(pos[1], 0))) 
    pos

strategy(title="Combo Backtest 123 Reversal & Volatility Finite Volume Elements", shorttitle="Combo", overlay = true)
Length = input(14, minval=1)
KSmoothing = input(1, minval=1)
DLength = input(3, minval=1)
Level = input(50, minval=1)
//-------------------------
Samples = input(22, minval=1)
Perma = input(40, minval=1)
Cintra = input(0.1)
Cinter = input(0.1)
reverse = input(false, title="Trade reverse")
posReversal123 = Reversal123(Length, KSmoothing, DLength, Level)
posFVI = FVI(Samples,Perma,Cintra,Cinter)
pos = iff(posReversal123 == 1 and posFVI == 1 , 1,
	   iff(posReversal123 == -1 and posFVI == -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 )

もっと