2つの移動平均ストーカスティック戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-29 11:54:10
タグ:

img

概要

ダブルムービング・アベアストキャスティック戦略は,ムービング・アベア指標とストキャスティック・オシレーターの組み合わせを使用して取引機会を特定しようとします.高速EMAが遅いSMA以上または以下を横切ったときに取引信号を生成し,市場が過剰に拡張されたときの信号をフィルタリングするためにストキャスティック%K値を使用します.

戦略の論理

この戦略は主に2つの技術指標に基づいています.

  1. 移動平均値: 異なるパラメータを使用して高速EMA,遅いSMA,遅いVWMAを計算し,高速EMAが遅いSMAを横断すると取引信号を生成します.

  2. ストカスティックオシレーター: %K値を計算し,%Kが既定の上位または下位しきい値を超えると市場が過買いまたは過売りされていると考え,移動平均信号の一部をフィルターするためにこれを使用します.

信号生成の論理は

  1. 速い EMA が遅い SMA を越え,%K が過売り値以下になると,ロング.速い EMA が遅い SMA を越え,%K が過買い値以上になると,ショート.

  2. 既存のロングポジションでは,%Kがオーバー買いゾーンに再入る時,または価格がストップロスを破ると閉じる.ショートポジションでは,%Kがオーバーセールゾーンに再入る時,または価格がストップロスを破ると閉じる.

移動平均値とストカストティックオシレータを組み合わせることで,ストカストックは誤った信号の一部をフィルタリングするために使用しながら,取引に入る可能性の高い移動平均信号ポイントを特定しようとします.

利点分析

この戦略の主な利点は以下の通りです.

  1. 複数の技術指標を組み合わせることで,単一の指標を使用するよりもより包括的な判断が得られます.
  2. ストカスティックオシレーターでフィルタリングすることで 誤った信号を回避できます
  3. 混合パラメータを持つ複数の移動平均値を使用することで,より堅牢な信号が得られる.
  4. 単一の取引損失を制御するためのストップ損失メカニズムを含有します.

リスク分析

リスクもあります:

  1. 移動平均値は多くの不確実な信号を生成し,より多くの誤ったエントリをもたらします. ストップ損失能力は限られています.
  2. ストカスティックオシレーターは,それ自体も誤った信号を生成することがあります.
  3. パラメータ設定は最適化が必要です (例えば,過買い/過売りレベル,移動平均期) そうでなければパフォーマンスに影響します.
  4. 基本的な分析の欠如

緩和策

  1. パラメータを最適化して 指標設定の最適組み合わせを見つけます
  2. 位置を小さくして スケールアップします
  3. 基本的な分析を組み込み 出来事を回避する

増進 の 機会

主な最適化の機会は以下の通りです.

  1. 移動平均のパラメータをテストして最適化します
  2. 最適な設定のために過剰購入/過剰販売ゾーンなどのストキャスティックパラメータをテストします.
  3. 富んだエントリーロジックのために,ボリュームや変動などの追加指標を組み込む.
  4. ストップ・ロスのメソッドを改良し,例えばリスクを下げるためにストップを遅らせます.
  5. ATRに基づく動的ポジションサイズ化などのマネーマネジメントを改善する.
  6. VIX などを使用したリスクオフイベントを避ける

結論

ダブル・ムービング・アベアストコスタスティック・ストラテジーは,移動平均値とストコスタスティック・オシレーターの組み合わせを使用して,強力なトレンドフォローシステムを作成しますが,パラメータ,ストップなどについていくつかの改善機会があります.追加の指標や最適化などのさらなる改良により,より一貫したアルファが提供される可能性があります.


/*backtest
start: 2023-01-22 00:00:00
end: 2024-01-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("TVIX MEAN REV V2 TREND", overlay=true)
length = input(16, minval=1)
OverBought = input(80)
OverSold = input(20)
TradeLong = input (true)
TradeShort = input (true)

OverBoughtClose = input(80)
OverSoldClose = input(20)

smoothK = 3
smoothD = 3
trail_points = input(50)

k = sma(stoch(close, high, low, length), smoothK)
d = sma(k, smoothD)
k2 = sma(stoch(close, high, low, length), smoothK)
d2 = sma(k, smoothD)


// === GENERAL INPUTS ===
// short Ema
maFastSource = input(defval=close, title="Fast EMA Source")
maFastLength = input(defval=1, title="Fast EMA Period", minval=1)
// long Sma
maSlowSource = input(defval=close, title="Slow SMA Source")
maSlowLength = input(defval=100, title="Slow SMA Period", minval=1)
// longer Sma
maSlowerSource = input(defval=close, title="Slower SMA Source")
maSlowerLength = input(defval=30, title="Slower SMA Period", minval=1)

//ATR Stop Loss Indicator by Keith Larson
atrDays = input(7, "ATR Days Lookback")
theAtr = atr(atrDays)
atrModifier = input(5.0, "ATR Modifier")
//plot(atr * atrModifier, title="ATR")

LstopLoss = close - (theAtr * atrModifier)
SstopLoss = close + (theAtr * atrModifier)



// === SERIES SETUP ===
/// a couple of ma's..
maFast = ema(maFastSource, maFastLength)
maSlow = sma(maSlowSource, maSlowLength)
maSlower = vwma(maSlowerSource, maSlowerLength)
rsi = rsi(maSlowerSource, maSlowerLength)

// === PLOTTING ===
fast = plot(maFast, title="Fast MA", color=color.red, linewidth=2, style=plot.style_line, transp=30)
slow = plot(maSlow, title="Slow MA", color=color.green, linewidth=2, style=plot.style_line, transp=30)
slower = plot(maSlower, title="Slower MA", color=color.teal, linewidth=2, style=plot.style_line, transp=30)


// === LOGIC === Basic - simply switches from long to short and vice-versa with each fast-slow MA cross
LongFilter = maFast > maSlow
ShortFilter = maSlow > maFast




BUY=crossover(k, d) and k < OverSold
SELL=crossunder(k, d) and k > OverBought

SELLCLOSE=crossover(k, d) and k < OverSoldClose
BUYCLOSE=crossunder(k, d) and k > OverBoughtClose

Open = open


if not na(k) and not na(d)
    if crossover(k, d) and k < OverSold and LongFilter and TradeLong
        strategy.entry("$", strategy.long, limit = Open, comment="Long")
    
    strategy.close("$",when = crossunder(k, d) and k > OverBoughtClose or open < LstopLoss  )
    ///strategy.close("$",when = open < LstopLoss  )
    
if not na(k) and not na(d)
    if crossunder(k, d) and k > OverBought and ShortFilter and TradeShort
        strategy.entry("$1", strategy.short, limit = Open, comment="S")
        
    strategy.close ("$1", when = crossover(k, d) and k < OverSoldClose or open > SstopLoss  )
    ///strategy.close ("$1", when = open < SstopLoss) 
    
  
        





もっと