ダブル MA クロスオーバー トレンドフォロー戦略


作成日: 2023-12-21 16:10:22 最終変更日: 2023-12-21 16:10:22
コピー: 1 クリック数: 611
1
フォロー
1623
フォロワー

ダブル MA クロスオーバー トレンドフォロー戦略

概要

この戦略は,典型的なトレンド追跡方法である双均線交差を採用し,トレンドの動きから得られる利潤を捕捉するために,ストップ・ロスト,ストップ・ストップ,ストップ・ロストなどのリスク管理メカニズムと組み合わせています.

戦略原則

  1. 短期平均線として,n日間の速度のEMA平均線を計算する.
  2. 長期平均線として,ゆっくりとした期間m日のEMA平均線を計算します.
  3. 短期平均線が長期平均線を上下から突破するときは多めに,上下から突破するときは空いてください.
  4. 平仓条件:反転ブレイク (複数ブレイクした場合,反転ブレイクは平仓) 〔
  5. ストップ・ストップ・ストップ・ストップ・トラッキングなどの方法でリスクを管理する.

優位分析

  1. 二重EMA平均線を用いて,価格トレンドの転換点をよりよく判断し,トレンドの動きを捉える.
  2. ストップ・ストップ・ストップとストップ・トラッキングを組み合わせて,単一損失を効果的に制御し,利益をロックし,撤回を減らすことができます.
  3. カスタマイズ可能なパラメータが多く,異なる品種と状況に応じて調整して最適化することができる.
  4. 戦略の論理はシンプルで明快で,理解し,修正しやすい.
  5. 複数の空白操作がサポートされ,さまざまな種類の状況に対応できます.

リスク分析

  1. 偽の突破に敏感で, 罠にされやすい.
  2. パラメータを正しく設定しない場合,取引の頻度が高くなり,取引コストが高くなり,滑り場が失われる可能性があります.
  3. 戦略だけではトレンドの転換点を特定できないので,他の指標と組み合わせれば判断がより効果的です.
  4. 金融危機は取引のシグナルを誘発しやすいが,実質的な収益性は低い.
  5. 異なる品種と市場環境に対応するためにパラメータを最適化する必要があります.

リスクは以下の方法で軽減できます.

  1. 他の指標と組み合わせたフィルタリング偽破裂.
  2. パラメータ設定を最適化し,取引頻度を下げます.
  3. 市場を動揺させないために,トレンド判断指標を高めましょう.
  4. ポジション管理を調整し,単発リスクを下げる.

最適化の方向

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

  1. 平均線の周期パラメータを最適化して,異なる品種と市場環境に適応する.
  2. 傾向を判断する他の指標を追加し,偽の突破信号をフィルタリングする.典型的にはMACD,KDJなどを追加することができる.
  3. EMAをSMAまたは加重移動平均WMAに変更することを考えることができる.
  4. ATRによる動的調整ストップ距離.
  5. ポジション管理方法に基づいて,単位のポジションを柔軟に調整できます.
  6. 関連性および波動率指標の組み合わせに基づいて,パラメータを自律的に最適化します.

要約する

この戦略は,全体として典型的な双EMA均線トレンド追跡戦略である.トレンドの動きを捕捉する利点があり,同時に,止損,停止,止損を追跡するなどのリスク管理手段を組み合わせている.しかし,騒音や震動の動きに対する高い感受性,容易に囲まれるなどの典型的な問題もある.他の補助指標,パラメータ最適化,動態調整,および組み合わせの操作を導入することにより,この戦略の効果をさらに強化することができる.全体として,パラメータが適切に設定され,品種の行動に合致した場合,この戦略は良い効果を得ることができる.

ストラテジーソースコード
/*backtest
start: 2023-11-20 00:00:00
end: 2023-12-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2

strategy(title = "Strategy Code Example", shorttitle = "Strategy Code Example", overlay = true)

// Revision:        1
// Author:          @JayRogers
//
// *** THIS IS JUST AN EXAMPLE OF STRATEGY RISK MANAGEMENT CODE IMPLEMENTATION ***

// === GENERAL INPUTS ===
// short ma
maFastSource   = input(defval = open, title = "Fast MA Source")
maFastLength   = input(defval = 14, title = "Fast MA Period", minval = 1)
// long ma
maSlowSource   = input(defval = open, title = "Slow MA Source")
maSlowLength   = input(defval = 21, title = "Slow MA Period", minval = 1)

// === STRATEGY RELATED INPUTS ===
tradeInvert     = input(defval = false, title = "Invert Trade Direction?")
// the risk management inputs
inpTakeProfit   = input(defval = 1000, title = "Take Profit", minval = 0)
inpStopLoss     = input(defval = 200, title = "Stop Loss", minval = 0)
inpTrailStop    = input(defval = 200, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)

// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

// === SERIES SETUP ===
/// a couple of ma's..
maFast = ema(maFastSource, maFastLength)
maSlow = ema(maSlowSource, maSlowLength)

// === PLOTTING ===
fast = plot(maFast, title = "Fast MA", color = green, linewidth = 2, style = line, transp = 50)
slow = plot(maSlow, title = "Slow MA", color = red, linewidth = 2, style = line, transp = 50)

// === LOGIC ===
// is fast ma above slow ma?
aboveBelow = maFast >= maSlow ? true : false
// are we inverting our trade direction?
tradeDirection = tradeInvert ? aboveBelow ? false : true : aboveBelow ? true : false

// === STRATEGY - LONG POSITION EXECUTION ===
enterLong() => not tradeDirection[1] and tradeDirection // functions can be used to wrap up and work out complex conditions
exitLong() => tradeDirection[1] and not tradeDirection
strategy.entry(id = "Long", long = true, when = enterLong()) // use function or simple condition to decide when to get in
strategy.close(id = "Long", when = exitLong()) // ...and when to get out
// === STRATEGY - SHORT POSITION EXECUTION ===
enterShort() => tradeDirection[1] and not tradeDirection
exitShort() => not tradeDirection[1] and tradeDirection
strategy.entry(id = "Short", long = false, when = enterShort())
strategy.close(id = "Short", when = exitShort())

// === STRATEGY RISK MANAGEMENT EXECUTION ===
// finally, make use of all the earlier values we got prepped
strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)