スウィングトレンド 移動平均戦略

作者: リン・ハーンチャオチャン,日付: 2024-02-04 15:44:54
タグ:

img

概要

スウィングトレンド移動平均戦略は,トレンド方向を特定するために長期移動平均を用い,フェイクアウトをフィルタリングし,全体的な引き下げを制限するために,平均真の範囲を組み合わせたトレンド方向を識別するトレンドフォローシステムである.トレンド方向を決定するために指数関数移動平均を採用し,誤ったブレイクであるかどうかを検出するために平均真の範囲を使用する.これは,範囲市場を効果的にフィルタリングし,全体的な戦略引き下げを減らすことができる.

戦略の論理

戦略は以下の原則に基づいて策定されています.

  1. 全体のトレンド方向を決定するために指数移動平均を使用します.デフォルト期間は200バーです.
  2. 平均値を計算します.
  3. 閉じる価格が 移動平均値 + 平均値 True Range 以上の場合,上昇傾向として決定されます.
  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)



もっと