最大化移動平均のクロスオーバー戦略の傾向

作者: リン・ハーンチャオチャン開催日:2023年10月17日 13:05:29
タグ:

img

概要

この戦略は,異なる期間の2つの移動平均値のクロスオーバーを使用して取引信号を生成する.これはトレンドフォロー戦略に属する.この戦略は,短い期間のMAがより長い期間のMAを横断するときに信号を使用してトレンド機会を捕捉する.

戦略の論理

この戦略は9期間の短期MA (SMA) と50期間の長期MA (LMA) を使用する.SMAがLMAを超えると購入信号が生成される.SMAがLMAを下回ると販売信号が生成される.

この戦略には,トレンドの強さを測定するためのRSIインジケーターも組み込まれています.RSIが限界値 (デフォルト55) を上回った場合にのみ取引信号が生成されます.これはRSIがオーバーボートゾーンにあるときに誤った信号を回避します.

この戦略は,総資本の30%を毎回取引し,一度に1つのポジションしか開いていない. 0.1%の手数料が計算されます.

利点分析

  • MAのクロスオーバーのトレンドシグナルを使用して,トレンドの機会を効果的に把握する.
  • RSIを組み込むことで,トレンドが停止するときに誤ったシグナルを回避できます.
  • デフォルトパラメータは最適化され,様々な市場で安定した収益を生み出します
  • 合理的な資本管理は,過大規模なポジションサイズ化を避ける.

リスク分析

  • 傾向のない範囲限定の市場では,ウィップソーや誤った信号に易い.
  • トレンドフォロー戦略として 有意なトレンドなしには 利益はない
  • パラメータが正しく調整されていない場合 過剰な取引と手数料
  • ストップロスの欠如は 戦略をイベントリスクにさらします

リスクはパラメータの最適化,他の指標の使用,厳格な資本管理,ストップ損失によって軽減できます

増進 の 機会

  • 最適なパラメータを見つけるために,異なるMA組み合わせをテストする.
  • 傾向を確認するためにMACDのような他の指標を組み込む.
  • ダイナミックストップ・ロスを実装して,取引ごとに損失を制御する.
  • 異なる市場に基づいてポジションサイズを調整する.
  • トレンド強さを測るためにボリュームインジケーターを使う.

結論

この戦略は,シンプルなMAクロスオーバーシステムを使用してトレンド機会を捉える.デフォルトパラメータは安定したリターンで最適化され,アルゴリズム取引に適している.他の指標を追加し,パラメータを最適化し,ストップロスを実装することによってさらなる改善が可能である.全体的に,クロスオーバー信号を使用してトレンド市場をフォローする効果的なトレンドフォロー戦略である.


/*backtest
start: 2023-09-16 00:00:00
end: 2023-10-16 00:00:00
period: 2h
basePeriod: 15m
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/
// © relevantLeader16058

//@version=4
strategy(shorttitle='Maximized Moving Average Crossing ',title='Maximized Moving Average Crossing (by Coinrule)', overlay=true, initial_capital=1000,  default_qty_type = strategy.percent_of_equity, default_qty_value = 30, commission_type=strategy.commission.percent, commission_value=0.1)

//Backtest dates
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2020, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)

showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => time >= start and time <= finish ? true : false       // create function "within window of time"

//MA inputs and calculations
inlong=input(50, title='MA long period')
inshort=input(9, title='MA short period')

MAlong = sma(close, inlong)
MAshort= sma(close, inshort)

// RSI inputs and calculations
lengthRSI = (14)

RSI = rsi(close, lengthRSI)
RSI_Signal = input(55, title = 'RSI Trigger', minval=1)

//Entry and Exit
bullish = crossover(MAshort, MAlong)
bearish = crossunder(MAshort, MAlong)

strategy.entry(id="long", long = true, when = bullish and RSI > RSI_Signal and window())
strategy.close(id="long", when = bearish and window())

 
plot(MAshort, color=color.purple, linewidth=2)
plot(MAlong, color=color.red, linewidth=2)

もっと