モメンタム指数トレンドフォロー戦略


作成日: 2023-12-05 15:13:25 最終変更日: 2023-12-05 15:13:25
コピー: 0 クリック数: 681
1
フォロー
1619
フォロワー

モメンタム指数トレンドフォロー戦略

概要

これは,移動平均に基づくインデックスETFの動量型トレンドフォロー戦略である.それは,急速移動平均と遅い移動平均の方向と斜率の交差を活用して,トレンド方向を判断し,低リスクインデックスETF資産の動量型トレンドフォローを実現する.

戦略原則

この戦略は50周期と150周期の移動平均を使用する. 急速な移動平均線上をゆっくり移動平均線を横切って,そして急速な移動平均線の斜率が値より大きいとき,トレンドが転換したと考え,多めに行う. 急速な移動平均線の下をゆっくり移動平均線を横切って,または急速な移動平均線の斜率が値より小さいとき,トレンドが逆転したと考え,平仓する.

この戦略は,移動平均の方向と斜率を直接利用して市場動向を判断し,曲線適合を避け,リスクを効果的に制御する.また,移動平均は,自然に無ノイズ特性を持ち,市場ノイズを効果的にフィルターすることができる.

優位分析

これは低リスクのインデックスETFで,次の利点を持つ動的トレンドフォロー戦略です.

  1. リスク管理能力の強さ 移動平均フィルターによる市場騒音によるリスクの有効な管理
  2. 実行コストは低く,実行しやすい. シンプルな移動平均のみを使用する.
  3. 安定した収益.指数ETF自体は変動が小さいが,トレンドに従うことで,安定した余剰収益を得ることができる.
  4. 適応性が高い. 調整可能なパラメータが多く,異なる指数ETFに対して最適化することができる.

リスク分析

この戦略にはいくつかのリスクがあります.

  1. 急速反転を逃すかもしれない. 移動平均を用いてトレンドを判断し,急速反転を逃すかもしれない.
  2. パラメータが敏感である. パラメータの設定が不適切である場合,取引回数が過剰に増加したり,機会が逃れることもある.
  3. 効果は市場環境の変化に合わせて変化する. 揺れ動いている状況では,不良なパフォーマンスを発揮することがあります.

対応方法:

  1. 迅速な反転と他の指標を組み合わせた判断.
  2. パラメータのテスト最適化.
  3. 市場環境の動向に応じてパラメータを調整する.

最適化の方向

この戦略は,以下の点で最適化できます.

  1. MACD,KDなどの他の指標を活用して補助判断を行い,戦略の効果を向上させる.
  2. ストップダストロジックが追加され,リスクがさらに制御されます.
  3. 移動平均周期パラメータを最適化して,より多くの指数ETFに対応する.
  4. 市場環境の変化に合わせて動的にパラメータを調整する.

要約する

この戦略は,低リスクで,簡単に実施できるインデックスETFの動量型トレンドフォロー戦略である.移動平均のクロス判断トレンド方向を利用し,リスク管理能力が強く,コストが低く,収益が安定するなどの利点がある.この戦略にはいくつかの欠陥があるが,複数の方法でさらに最適化され,インデックスETFの資産配置の有効なツールにすることができる.

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

//@version=4
//please use on daily SPY, or other indexes only
strategy("50-150 INDEX TREND FOLLOWING", overlay=true)

//user input
fastSMA = input(title="Fast Moving Average (Int)",type=input.integer,minval=1,maxval=1000,step=1,defval=50,confirm=false)
slowSMA = input(title="Slow Moving Average (Int)",type=input.integer,minval=1,maxval=1000,step=1,defval=150,confirm=false)
longSlopeThreshold = input(title="Bullish Slope Angle (Deg)",type=input.integer,minval=-90,maxval=90,step=1,defval=5,confirm=false)
shortSlopeThreshold = input(title="Bearish Slope Angle (Deg)",type=input.integer,minval=-90,maxval=90,step=1,defval=-5,confirm=false)
atrValue = input(title="Average True Range (Int)",type=input.integer,minval=1,maxval=100,step=1,defval=14,confirm=false)
risk = input(title="Risk (%)",type=input.integer,minval=1,maxval=100,step=1,defval=100,confirm=false)

//create indicator
shortSMA = sma(close, fastSMA)
longSMA = sma(close, slowSMA)

//calculate ma slope
angle(_source) =>
    rad2degree=180/3.14159265359
    ang=rad2degree*atan((_source[0] - _source[1])/atr(atrValue)) 

shortSlope=angle(shortSMA)
longSlope=angle(longSMA)

//specify crossover conditions
longCondition = (crossover(shortSMA, longSMA) and (shortSlope > longSlopeThreshold)) or ((close > shortSMA) and (shortSMA > longSMA) and (shortSlope > longSlopeThreshold))
exitCondition = crossunder(shortSMA, longSMA) or (shortSlope < shortSlopeThreshold)
strategy.initial_capital = 50000
//units to buy
amount = (risk / 100) * (strategy.initial_capital + strategy.netprofit)
units = floor(amount / close)

//long trade
if (longCondition and strategy.position_size == 0)
    strategy.order("Long", strategy.long, units)

//close long trade
if (exitCondition and strategy.position_size > 0)
    strategy.order("Exit", strategy.short, strategy.position_size)

// Plot Moving Average's to chart
plot(shortSMA, color=color.blue)
plot(longSMA, color=color.green)