2つの移動平均のクロスオーバー矢印戦略

作者: リン・ハーンチャオチャン,日付: 2023年11月21日 17:00:49
タグ:

img

概要

この戦略は,MACD指標の二重移動平均値のクロスオーバーを計算することによって,購入・販売信号を識別する.取引信号を示すために,チャートに矢印をプロットする.

原則

この戦略はまず,高速線 (12期EMA),スローライン (26期EMA) とMACD差を計算し,高速線とスローラインのクロスオーバー,およびMACD差のプラス/ネガティブな値に基づいて,ロングとショートシグナルを決定します.

  1. 速線がスローライン (黄金十字) を越え,MACD差が0を超えると,それは買い信号です.
  2. 速線がスローライン (デスクロス) の下を横切り,MACD差が0を下回ると,セールシグナルです

偽信号をフィルタリングするために,コードは以前のキャンドルスタイクの信号もチェックします.現在の信号は,以前のキャンドルスタイクに反対の信号 (購入対販売またはその逆) がある場合にのみトリガーされます.

さらに,チャートには 購入・販売の信号を示す矢印が描かれています.

利点

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

  1. 二重移動平均のクロスオーバーを使用することで,トレンドを特定し,市場のノイズをフィルタリングすることができます.
  2. MACD差を組み込むことで,見逃した取引と誤った信号を回避できます.
  3. 矢印 は 入口 と 出口 を 明確に 示す
  4. 単純で分かりやすいルールで複製が容易になる

リスク と 解決策

この戦略のリスクは

  1. クロスオーバーは偽信号を生成し,過剰取引を引き起こす可能性があります. 偽信号を減らすためにパラメータを調整または追加のフィルターを追加することができます.
  2. トレンドの範囲を識別できず,損失につながる可能性があります. ADX のようなトレンド指標を追加することで,これを回避できます.
  3. 固定されたルールは 変化する市場に適応できません 機械学習はこれを最適化することができます

増進 の 機会

戦略を改善する方法:

  1. 異なるパラメータの組み合わせをテストして,高速線,スローライン,MACDの最適な設定を見つけます.
  2. フィルター信号にボリュームブレイクなどの追加エントリー条件を追加する
  3. 単一の取引損失を制御するためにストップ損失を組み込む
  4. VIX のような 変動指標 を 使い,リスク 意欲 を 評価 する
  5. 固定ルールではなく機械学習モデルを試して 適応性最適化を図る

概要

二重移動平均クロスオーバー矢印戦略は,かなりシンプルで実用的です.二つの移動平均値とMACD差フィルタリングのクロスオーバーを使用して,中期および長期的トレンドの間にエントリーと出口を特定し,見逃した価格逆転を回避します.矢印信号はまた,明確な運用指針を提供します.パラメータチューニング,追加のフィルター,適応最適化によって安定性と収益性のさらなる改善を達成することができます.


/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//Daniels stolen code
strategy(shorttitle="Daniels Stolen Code", title="Daniels Stolen Code", overlay=true, calc_on_order_fills=true, pyramiding=0)

//Define MACD Variables
fast = 12, slow = 26
fastMACD = ema(hlc3, fast)
slowMACD = ema(hlc3, slow)
macd = fastMACD - slowMACD
signal = sma(macd, 9)
hist = macd - signal
currMacd = hist[0]
prevMacd = hist[1]
currPrice = hl2[0]
prevPrice = hl2[1]

buy = currPrice > prevPrice and currMacd > prevMacd
sell = currPrice < prevPrice and currMacd < prevMacd
neutral = (currPrice < prevPrice and currMacd > prevMacd) or (currPrice > prevPrice and currMacd < prevMacd)
//Plot Arrows

timetobuy = buy==1 and (sell[1]==1 or (neutral[1]==1 and sell[2]==1) or (neutral[1]==1 and neutral[2]==1 and sell[3]==1) or (neutral[1]==1 and neutral[2]==1 and neutral[3]==1 and sell[4]==1) or (neutral[1]==1 and neutral[2]==1 and neutral[3]==1 and neutral[4]==1 and sell[5]==1) or (neutral[1]==1 and neutral[2]==1 and neutral[3]==1 and neutral[4]==1 and neutral[5]==1 and sell[6]==1))
timetosell = sell==1 and (buy[1]==1 or (neutral[1]==1 and buy[2]==1) or (neutral[1]==1 and neutral[2]==1 and buy[3]==1) or (neutral[1]==1 and neutral[2]==1 and neutral[3]==1 and buy[4]==1) or (neutral[1]==1 and neutral[2]==1 and neutral[3]==1 and neutral[4]==1 and buy[5]==1) or (neutral[1]==1 and neutral[2]==1 and neutral[3]==1 and neutral[4]==1 and neutral[5]==1 and buy[6]==1))

plotshape(timetobuy, color=blue, location=location.belowbar, style=shape.arrowup)
plotshape(timetosell, color=red, location=location.abovebar, style=shape.arrowdown)
//plotshape(neutral, color=black, location=location.belowbar, style=shape.circle)


//Test Strategy
// strategy.entry("long", true, 1, when = timetobuy and time > timestamp(2017, 01, 01, 01, 01)) // buy by market if current open great then previous high
// strategy.close("long", when = timetosell and time > timestamp(2017, 01, 01, 01, 01))

strategy.order("buy", true, 1, when=timetobuy==1 and time > timestamp(2019, 01, 01, 01, 01))
strategy.order("sell", false, 1, when=timetosell==1 and time > timestamp(2019, 01, 01, 01, 01))



// strategy.entry(id = "Short", long = false, when = enterShort())
// strategy.close(id = "Short", when = exitShort())

//strategy.entry("long", true, 1, when = open > high[1]) // enter long by market if current open great then previous high
// strategy.exit("exit", "long", profit = 10, loss = 5) // ge

もっと