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

作者: リン・ハーンチャオチャン, 日付: 2023-12-22 14:17:34
タグ:

img

概要

この戦略は,高速移動平均値,スロー移動平均値,MACD指標を計算して価格傾向を判断し,ゴールデンクロスとデッドクロス取引シグナルを構築します.また,利益をロックし,トレンドを継続的に追跡するために,利益,ストップ損失,ストップ損失を組み合わせます.

戦略の論理

この戦略は主に3つの指標に基づいています.

まず,高速移動平均と2つのスロームービング平均を計算します.高速MAが2つのスローMAを超えると,購入信号が生成されます.高速MAが2つのスローMAを下回ると,販売信号が生成されます.これは,ゴールデンクロスとデッドクロス取引を実現するための短期および長期トレンドの関係を判断します.

2つ目は,MACD線,信号線,ヒストグラムを含むMACD指標を計算する.MACDヒストグラム > 0の場合,それは上昇指標であり,MACDヒストグラム < 0の場合,それは下落指標である.これは黄金十字と死十字信号の信頼性を判断するのに役立ちます.

最後に,Take Profit,Stop Loss,Trailing Stop Lossメカニズムを組み込みます.Take ProfitとStop Lossポイントは,利益をロックし,リスクを制御するために使用されます.Trailing Stop Lossは,利益を追跡するために使用されます.

利点

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

  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)

もっと