ゴールデンクロスとデスクロスのダブル移動平均MACDトレンド追跡戦略


作成日: 2023-12-22 14:17:34 最終変更日: 2023-12-22 14:17:34
コピー: 0 クリック数: 717
1
フォロー
1623
フォロワー

ゴールデンクロスとデスクロスのダブル移動平均MACDトレンド追跡戦略

概要

この戦略は,速動平均,遅動平均,MACD指標を計算することによって,価格傾向の判断を実現し,金叉死叉取引シグナルを構築し,ストップ・ストップ・ストラストラストと組み合わせて利益をロックし,トレンドの継続的な追跡を実現します.

戦略原則

この戦略は,主に3つの指標に基づいて構築されています.

まず,急速移動平均と2つのゆっくり移動平均を計算する. 急速移動平均の上に2つのゆっくり移動平均を穿越すると買い信号が生成され,急速移動平均の下に2つのゆっくり移動平均を穿越すると売り信号が生成される. これにより,価格の短期的傾向と長期的傾向の関係を判断し,金叉死叉取引を実現する.

次に,MACD線,信号線,直角図を含むMACD指標を計算する.MACD直角図>0時には多頭指標;MACD直角図時には空頭指標である.このように金叉死叉信号の信頼性を判断する.

最後に,ストップ・ストップ・トラッキング・ストップ・メカニズムと組み合わせる. ストップ・ストップとストップ・ストップの利用により,利益をロックし,リスクをコントロールする. ストップ・ストップの利用により,利益をトラッキングする.

戦略的優位性

この戦略の利点は以下の通りです.

  1. 金叉死叉はMACD指数と結合し,価格の動向を確実に判断する.
  2. 損失拡大を防ぐため,ストップポイントを設定します.
  3. ストップ・ロスの自動移動を追跡し,継続的に利潤をロックし,トレンドの利潤を最大限に活用する.
  4. パラメータ設定の柔軟性,移動平均周期のカスタマイズなど.

戦略リスク

この戦略にはいくつかのリスクがあります.

  1. 価格の変動により,ストップダメージが引き起こされるリスクがある.
  2. 長期にわたるトラッキング障害は,継続的な監視と適時な調整が必要である.
  3. パラメータの設定を間違えた場合,取引が頻繁に発生したり,請求書が漏れたりすることがあります.

リスクに対する対処法:

  1. 合理的な停止点を設定し,不必要な停止を防止する.
  2. パラメータの設定を定期的にチェックし,最適化します.
  3. 人工介入と状態監視

戦略最適化の方向性

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

  1. RSIなどの指標を追加して,信号をより信頼性のあるものにする.
  2. 移動平均のパラメータを最適化して,異なる品種の特性に合わせる.
  3. ストップ・ストップ・ロスの動態を追跡するアルゴリズムを追加し,市場の変化に合わせてストップ・ストップ・ロスを変更する.
  4. ポジション開設回数,ポジション管理などの資金管理モジュールを増やす.

要約する

この戦略は,全体として,金叉死叉とMACD指標を用いてトレンド判断し,ストップロスを追跡するためのシンプルで効果的な戦略である.トレンド追跡と利潤ロックが実現され,カスタマイズ性が強く,複数の品種に適用され,汎用型のパラメータ最適化戦略である.一定のリスクと最適化余地があるが,全体的に言えば,信頼できる実用的な取引戦略である.

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

//@version=2
strategy('The Puria Method', shorttitle = 'Puria',overlay = true)

//=== GENERAL INPUTS ===

// short ma
maFastSource   = input(defval = close, title = "Fast MA Source")
maFastLength   = input(defval = 5, title = "Fast MA Period", minval = 1)

// long ma 1
maSlow1Source   = input(defval = low, title = "Slow MA1 Source")
maSlow1Length   = input(defval = 85, title = "Slow MA Period", minval = 1)

// long ma 2
maSlow2Source   = input(defval = low, title = "Slow MA2 Source")
maSlow2Length   = input(defval = 75, title = "Slow MA Period", minval = 1)

//macd
macdFastLength   = input(defval = 12, title = "Fast MACD Period", minval = 1)
macdSlowLength   = input(defval = 26, title = "Slow MACD Period", minval = 1)
macdSmaLength   = input(defval = 9, title = "SMA MACD Period", minval = 1)

// the risk management inputs
inpTakeProfit   = input(defval = 30, title = "Take Profit", minval = 0)
inpStopLoss     = input(defval = 10, title = "Stop Loss", minval = 0)
inpTrailStop    = input(defval = 5, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)

// 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 ===
maFast = ema(maFastSource, maFastLength)
maSlow1 = wma(maSlow1Source, maSlow1Length)
maSlow2 = wma(maSlow2Source, maSlow2Length)
[_, signal, histLine] = macd(close, macdFastLength, macdSlowLength, macdSmaLength)

// === PLOTTING ===
fast = plot(maFast, title = "Fast MA", color = green, linewidth = 2, style = line, transp = 50)
slow1 = plot(maSlow1, title = "Slow MA1", color = red, linewidth = 2, style = line, transp = 50)
slow2 = plot(maSlow2, title = "Slow MA2", color = red, linewidth = 2, style = line, transp = 50)

// === LOGIC ===
signalUp = crossover(maFast, maSlow1) and crossover(maFast, maSlow2) and histLine > 0
signalDown = crossunder(maFast, maSlow1) and crossunder(maFast, maSlow2) and histLine < 0

// ===STRATEGY===
strategy.entry(id = "Long", long = true, when = signalUp) 
strategy.entry(id = "Short", long = false, when = signalDown)
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)