戦略に従った二重移動平均の傾向

作者: リン・ハーンチャオチャン, 日付: 2024-03-22 13:56:44
タグ:

img

概要

この戦略は,市場動向の変化を決定するために2つの移動平均値のクロスオーバーを使用し,トレンド方向に基づいて購入/販売の決定を行います.短期MMAが長期MMAを超越したとき,短期MMAが長期MMAを下回ると,トレンドに従うことを目的として,長期間MMAを超越したとき,長期間MMAが短くなります.

戦略原則

この戦略の核心は2つの移動平均値である.高速MA (デフォルト期間32) と遅いMA (デフォルト期間32もパラメータによって調整可能).閉じる価格がこれらの2つのMAによって形成されたチャネルの上下を横断すると,トレンド逆転を示し,戦略はそれに応じて購入/売却信号を生成します.

  • 遅いMAを横切る時,長引く
  • 速いMAが遅いMAを下回ると,ショート
  • すでにロングポジションを保持している場合,高速MAがスローMAを下回る場合は,ロングを閉じてショートにする.
  • すでにショートポジションを保持している場合,高速MAがスローMAを上回る場合は,ショートを閉じてロングをします

このMAクロスオーバー方法によって,戦略はトレンドをフォローし,逆転信号が現れるまで上昇傾向における長ポジションと下落傾向における短ポジションを保持することができます.

利点分析

  1. トレンドフォロー: MAのクロスオーバーを使用してトレンドを特定することで,戦略は主要市場トレンドを効果的に把握し,追跡することができます.
  2. シンプルで使いやすい: 戦略論理は2つのMAのみを使用して明確です.パラメータ設定はシンプルで理解しマスターするのが簡単です.
  3. 広範囲に適用可能: 戦略は,さまざまなツールと時間枠に広く適用可能で,さまざまな市場で使用できます.
  4. タイムリーストップ・ロスト:トレンドが逆転すると,戦略は損失を制御するために迅速にポジションを閉じることができます.

リスク分析

  1. 市場が横向的なパターンにある場合,頻繁なクロスオーバー信号は過剰な取引と損失につながります.
  2. 極端な動きに対する不十分な反応: 戦略は極端な状況 (急速な波動や沈みなど) に反応しすぎたり,大きな損失を引き起こす可能性があります.
  3. パラメータ最適化における困難: MA パラメータを最適化するには,大量の歴史的データとバックテストが必要です.最適化されたパラメータは,将来のパフォーマンスのためのガイドラインが限られています.

これらのリスクに対処するために,ATRまたは平均真の範囲フィルターなどの適切なフィルターを追加することで,範囲市場での過剰取引を減らすこと,単一の取引損失を制御するために合理的なストップ損失を設定し,市場に適応するためにパラメータを継続的に最適化することを検討することができます.しかし,戦略の固有の制限は完全に回避することは困難です.

最適化方向

  1. トレンド確認:取引信号が生成された後,MACDやDMIなどの追加のトレンド確認指標が組み込まれ,信号をさらにフィルタリングできます.
  2. ダイナミックストップ・ロスト: ATRのような指標を使用して,よりよいリスク管理のために,固定パーセントまたは価格ストップの代わりにダイナミックストップ・ロストレベルを設定します.
  3. ポジションサイズ: 傾向強度,変動性,その他の指標に基づいてポジションサイズを動的に調整する. 傾向が強いときポジションを増やし,弱いときポジションを減少させる.
  4. 複数のタイムフレーム分析: 日間および4時間のMAを組み合わせたような複数のタイムフレームMAシステムを検討し,相互にフィルタリングし確認し,トレンド識別の精度を向上させる.
  5. 適応性パラメータ: 適応性パラメータ最適化方法,例えば遺伝子アルゴリズムを導入し,戦略パラメータが異なる市場状況に適応できるようにする.

上記の最適化は,複雑な市場に対処する戦略の能力を向上させることができるが,曲線フィットメントと将来の業績の低下につながる可能性がある過剰な最適化を避けるために注意しなければならない.

概要

ダブルMAトレンドフォローストラテジーは,MAクロスオーバーを通じてトレンドを捉える.シンプルで,使いやすい,広く適用可能である.しかし,市場範囲でパフォーマンスが悪く,極端な動きに不十分に対応し,パラメータ最適化に困難に直面している.

戦略は,より多くのフィルタリング指標,ダイナミックストップ・ロス,ポジションサイズ,マルチタイムフレーム分析,適応パラメータを導入することで最適化することができる.しかし,MA戦略の固有の制限は完全に回避することは困難で,市場の特徴に基づいて柔軟な調整を行うライブ取引では依然として注意が必要です.

全体的に,この戦略は基本的トレンドフォロー戦略として機能しますが,単独では難しいので,戦略のポートフォリオの一部としてより適しています.


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

//@version=5

//study(title="Demo - SSL Basic", shorttitle="Demo - SSL Basic", overlay=true)
strategy(title='Demo - SSL Basic', shorttitle='Demo - SSL Basic', overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=100, commission_value=0.15)

// Backtest Date Range
start_date_long = input(title='Backtest Long Start Date', defval=timestamp('01 Jan 2018 00:00 +0530'))
end_date_long = input(title='Backtest Long End Date', defval=timestamp('25 Jan 2030 00:00 +0530'))
backtest_range = true

// Inputs
maType = input.string(title='SSL MA Type', options=['SMA', 'EMA', 'WMA'], defval='SMA')
sslLen = input(title='SSL Length', defval=32)
showCross = input(title='Show Crossover?', defval=true)
showEntry = input(title='Show Entry?', defval=true)
showTrend = input(title='Show Trend Colors?', defval=true)

// Calc MA for SSL Channel
calc_ma(close, len, type) =>
    float result = 0
    if type == 'SMA'  // Simple
        result := ta.sma(close, len)
        result
    if type == 'EMA'  // Exponential
        result := ta.ema(close, len)
        result
    if type == 'WMA'  // Weighted
        result := ta.wma(close, len)
        result    
    result

// Add SSL Channel
maHigh = calc_ma(high, sslLen, maType)
maLow = calc_ma(low, sslLen, maType)
Hlv = int(na)
Hlv := close > maHigh ? 1 : close < maLow ? -1 : Hlv[1]
sslDown = Hlv < 0 ? maHigh : maLow
sslUp = Hlv < 0 ? maLow : maHigh
ss1 = plot(sslDown, title='Down SSL', linewidth=2, color=showTrend ? na : color.red)
ss2 = plot(sslUp, title='Up SSL', linewidth=2, color=showTrend ? na : color.lime)

// Conditions
longCondition = ta.crossover(sslUp, sslDown)
shortCondition = ta.crossover(sslDown, sslUp)

// Strategy
if shortCondition
    strategy.close('Long', comment='Long Exit', alert_message='JSON')

if longCondition
    strategy.close('Short', comment='Short Exit', alert_message='JSON')

if backtest_range and longCondition
    strategy.entry('Long', strategy.long, comment='Long Entry', alert_message='JSON')

if backtest_range and shortCondition
    strategy.entry('Short', strategy.short, comment= 'Short Entry', alert_message='JSON')


// Plots
fill(ss1, ss2, color=showTrend ? sslDown < sslUp ? color.new(color.lime, transp=75) : color.new(color.red, transp=75) : na, title='Trend Colors')


もっと