トレンドフォロー移動平均戦略


作成日: 2024-02-04 15:44:54 最終変更日: 2024-02-04 15:44:54
コピー: 0 クリック数: 575
1
フォロー
1617
フォロワー

トレンドフォロー移動平均戦略

概要

トレンド追跡移動平均戦略は,長期移動平均のトレンド方向を識別し,平均の実際の波動範囲をフィルタリングして乱雑な動きを組み合わせたトレンドフォロー戦略である.この戦略は,指数移動平均を使用してトレンド方向を判断し,平均の実際の波動範囲を偽の突破として認識するかどうかを再利用する.これは,振動的な動きを効果的にフィルタリングし,戦略の全体的な逆転を軽減する.

戦略原則

この戦略は以下の原則に基づいています.

  1. 指数移動平均を用いて全体的な傾向方向を判断する.周期長さは200根のK線をデフォルトする.
  2. 最近の10 K 線の平均真波動範囲を計算する.
  3. 閉盤価格が移動平均+平均真波動範囲より高いときは,上昇傾向として判断する。
  4. 閉盤価格が移動平均 - 平均実際の波動範囲を下回ると,下落傾向として判断する.
  5. 逆行時,空きをする.
  6. デフォルトでは,移動平均をストップラインとする. また,移動平均を逆転±平均の実際の波動範囲をストップラインとする.

優位分析

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

  1. 移動平均を使って大トレンドを判断し,短期市場の騒音を効果的にフィルターすることができます.
  2. フィルター条件として平均実際の波動範囲を増やすことで,波動的な状況で取引シグナルの生成を避け,不必要な損失を減らすことができます.
  3. ストップラインは移動平均線またはその逆の範囲に近いので,迅速にストップし,最大撤退を減らすことができます.
  4. 簡単なパラメータ設定,理解しやすく調整できます.

リスク分析

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

  1. 均線系では,トレンドが逆転すると,ある程度の反転が生じることが多い.
  2. 移動平均と平均実際の波動範囲のパラメータ設定は,戦略のパフォーマンスに大きく影響します.パラメータを正しく設定しない場合は,取引機会を逃したり,不要な損失を増やす可能性があります.
  3. この戦略は,株価と取引量との関係を考慮していない.

最適化の方向

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

  1. 異なる種類の移動平均をテストし,特定の株式または品種に最も適した移動平均パラメータを探します.
  2. 移動平均の周期パラメータを最適化して,取引されている株または品種の特徴に適合させる.
  3. 平均の実際の波動範囲のパラメータを最適化し,トレンドを逃さないように振動をフィルターするために最適なパラメータの組み合わせを探します.
  4. 取引量判断のルールを増やして,無効突破を回避する.
  5. テストし,異なる止損方法を比較し,最適な方法を決定する.

要約する

トレンドトラッキング移動平均戦略は,全体的に非常にシンプルで実用的なトレンド戦略である.それは同時に優れたリスク管理効果がある.この戦略は,多くの要因を考慮していないが,パラメータとストップ・ロスの方法の細かいテストと最適化が必要である.しかし,全体的に,習得し,調整しやすい効果的な戦略である.その単純な取引論理とパラメータ設定は,異なる品種に広く適用され,特にビットコインなどのデジタル通貨取引に適している.

ストラテジーソースコード
/*backtest
start: 2023-01-28 00:00:00
end: 2024-02-03 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Inkedlau

//@version=5
strategy('Swing Trend Strategy', overlay=true, pyramiding=1, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=1000, commission_value=0.1)

use_short = input.bool(false, 'Open Short Positions?')
exit_type = input.bool(true, 'Exit trade on Moving Average Cross?')
src = input.source(close, 'Source')
len = input.int(200, 'Trend Length')
ma_type = input.string('ema', 'Moving Average Type', options=['sma', 'ema', 'rma', 'wma', 'vwma'], tooltip='Select the type of Moving Average to use to calculate the Trend')
atr_multiplier = input.float(1., 'ATR Threshold', step=0.5, tooltip='Filter the ranging market using the Average True Range')

// ----------------------- DESCRIPTION -----------------------
// THIS SCRIPT IS A TREND FOLLOWING SYSTEM THAT USES A COMBINATION OF MOVING AVERAGE AND AVERAGE TRUE RANGE
// TO SPOT THE TRENDS AND ENTER THE MARKET ACCODINGLY.
// THE MARKET IS CONSIDERED IN AN UPTREND WHEN THE PRICE CLOSES ABOVE THE MOVING AVERAGE + THE AVERAGE TRUE RANGE OF THE LAST 10 PERIODS
// THE MARKET IS CONSIDERED IN AN DOWNTREND WHEN THE PRICE CLOSES BLOW THE MOVING AVERAGE - THE AVERAGE TRUE RANGE OF THE LAST 10 PERIODS
// BY DEFAULT, THE STRATEGY WILL ENTER LONG WHEN AN UPTREND IS SPOTTED, THEN CLOSES WHEN THE PRICE CLOSES BELOW THE MOVING AVERAGE
// THE STRATEGY WILL ENTER SHORT WHEN A DOWNTREND IS SPOTTED, THEN CLOSES WHEN THE PRICE CLOSES ABOVE THE MOVING AVERAGE

// ------------------ INDICATORS CALCULATION------------------
my_ma()=>
    ma = close
    if ma_type == 'sma'
        ma := ta.sma(src, len)
    if ma_type == 'ema'
        ma := ta.ema(src, len)
    if ma_type == 'rma'
        ma := ta.rma(src, len)
    if ma_type == 'wma'
        ma := ta.wma(src, len)
    if ma_type == 'vwma'
        ma := ta.vwma(src, len)
    ma

trend = my_ma()
atr = ta.atr(10)
uptrend = trend + atr * atr_multiplier
downtrend = trend - atr * atr_multiplier

// ---------------- ENTRY AND EXIT CONDITIONS ----------------

open_long = strategy.position_size == 0 and src > uptrend
close_long = exit_type ? strategy.position_size > 0 and src < trend : strategy.position_size > 0 and src < downtrend

open_short = use_short and strategy.position_size == 0 and src < downtrend
close_short = exit_type ? strategy.position_size < 0 and src > trend : strategy.position_size < 0 and src > uptrend

strategy.entry('long', strategy.long, when=open_long)
strategy.close('long', when=close_long)

strategy.entry('short', strategy.short, when=open_short)
strategy.close('short', when=close_short)


// ------------------ PLOTTING AND COLORING ------------------
tcolor = src > uptrend ? color.green : src < downtrend ? color.red : na

ptrend = plot(trend, color=color.blue, linewidth=1)
puptrend = plot(uptrend, color=color.green, linewidth=1)
pdowntrend = plot(downtrend, color=color.red, linewidth=1)
pclose = plot(close, color=na)

fill(puptrend, pclose, color=close > uptrend ? color.green : na, transp = 90)
fill(pdowntrend, pclose, color=close < downtrend ? color.red : na, transp = 90)