移動平均のクロスオーバー取引戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-24 11時48分29秒
タグ:

img

概要

移動平均クロスオーバー取引戦略は,高速EMA (fastLength) と遅いEMA (slowLength) ラインのクロスオーバーを計算することによって,買い売り信号を生成する.高速線がスローラインを越えると,買い信号が生成される.高速線がスローラインを下回ると,売り信号が生成される.この戦略は単純で実用的で,中短期取引に適している.

戦略原則

この戦略は,2つの移動平均線,高速線とスローラインを使用する.高速線パラメータEMAfastLengthは9日線にデフォルトで,スローラインパラメータEMAslowLengthは26日線にデフォルトで設定されている.市場購入および販売信号を決定するために,2つのEMAラインのクロスオーバーを計算する:

  1. 速い線がスローラインを上向きに突破すると,買い信号 enterLong (() が生成されます.
  2. 速い線がスロー線を介して下向きに突破すると,売り信号 enterShort (() が生成されます.

特定の取引信号と戦略規則は以下のとおりです.

  1. 速線がスローラインを越えると 長い行方 速線がスローラインを越えると 閉じる
  2. 長期間の利益は,価格のターゲットパーセント (デフォルト0.15%) で,利益が15%に達するとポジションを閉じる.
  3. ロングのストップ・ロスは,ストップ・ロスの割合 (デフォルト0.20%) で,損失が20%に達するとポジションを閉じます.
  4. ショートポジションも同じように機能します.

この戦略は2つの移動平均線の 金色の交差点と死色の交差点に基づいて取引します

利点分析

  1. 戦略はシンプルで分かりやすいです
  2. 移動平均値の適用により,市場の騒音の一部をフィルタリングし,取引シグナルをより正確にします.
  3. 決まった利益とストップロスのルールです
  4. 試験パラメータは,異なる市場条件に適応するために柔軟に調整できます.

リスク分析

  1. 移動平均値自体も遅滞があり,短期的な価格変動を見逃し,不正な買取・販売ポイントにつながる可能性があります.
  2. 異なるサイクル移動平均パラメータは誤った信号を生み,損失をもたらす可能性があります.
  3. この戦略は,いくつかのパラメータのみを頼りに,最適なパラメータ組み合わせを見つけるために高いハイパーパラメータ最適化要件を持っています.
  4. この戦略は 特定の主要な傾向では 失敗する傾向があります

リスクに対処するために,最適化できるパラメータには,移動平均サイクル,取引の種類,利益とストップ損失比などが含まれます.リスクを減らすために広範なテストが必要です.

オプティマイゼーションの方向性

この戦略の移動平均クロスオーバーの考え方は単純で実用的です.以下の方法で最適化できます.

  1. 移動平均値のタイプを変更する: EMAに加えて,SMA,LWMA,HMAなどのタイプもテストする.
  2. 他の指標を追加:RSI,MACDおよび他の指標と組み合わせる.
  3. パラメータ最適化: EMA の 2 つのサイクル パラメータを自動最適化して最適なパラメータ組み合わせを見つけます.
  4. トレンドフィルタリング:主要トレンド状況に基づいて選択的に取引する.
  5. 利得とストップ損失の最適化: 固定パーセントの利得とストップ損失の最適化により,より実用化します.

これらの最適化テストによって,戦略の実用的な効果と安定性が大幅に向上できます.

概要

移動平均クロスオーバー戦略のアイデアはシンプルですが,実用的な応用には継続的な最適化が必要です.この戦略は,取引信号と基本的な取引規則を生成する論理を提供します.この基礎で,使用可能な定量戦略になるために大幅に最適化することができます.移動平均の適用は,私たちが革新と改善を可能にする戦略のアイデアも提供します.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("EMA Cross by MarketAlpha", overlay=true)
EMAfastLength = input(defval = 9, minval = 2)
EMAslowLength = input(defval = 26, minval = 2)
Targetpercentage = input(defval = 0.15, title = "Profit Target in percentage", minval = 0.05)
StopLosspercentage = input(defval = 0.20, title = "Stop Loss in percentage", minval = 0.05)
profitpoints = close*Targetpercentage
stoplosspoints = close*StopLosspercentage
price = close

FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 2000)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true // create function "within window of time"

emafast = ema(price, EMAfastLength)
emaslow = sma(price, EMAslowLength)
plot(emafast,color=green)
plot(emaslow,color=red)

enterLong() => crossover(emafast, emaslow)
strategy.entry(id = "MarketAlpha Long", long = true, when = window() and enterLong())
strategy.exit("Exit Long", from_entry = "MarketAlpha Long", profit = profitpoints,loss = stoplosspoints)

enterShort() => crossunder(emafast, emaslow)
strategy.entry(id = "MarketAlpha Short", long = false, when = window() and enterShort())
strategy.exit("Exit Short", from_entry = "MarketAlpha Short", profit = profitpoints,loss = stoplosspoints)



もっと