二重移動平均指標ストキャスティクス戦略


作成日: 2024-01-29 11:54:10 最終変更日: 2024-01-29 11:54:10
コピー: 0 クリック数: 608
1
フォロー
1617
フォロワー

二重移動平均指標ストキャスティクス戦略

概要

双均線指数ランダム化策略は,均線指数とランダムな指数の組み合わせを使用して取引機会を探そうとする策略である.それは,高速EMA上で遅いSMAを横断すると取引信号を生じ,同時,乱指数K値を使用して,超買いまたは超売りかどうかを判断して,部分的な信号を排除する.

戦略原則

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

  1. 平均線: 急速EMA,緩慢SMA,緩慢VWMAの3つの異なるパラメータの平均線を計算し,急速EMAを上または下を通過すると取引シグナルを生成する.

  2. ランダム指標: %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. VOLUMEの判断強化や波動率の指数などの他の指標を追加してみてください.
  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)