MacD 将来の経路予測戦略

作者: リン・ハーンチャオチャン, 日付: 2023-12-13 17:21:44
タグ:

img

概要

この戦略の主な考え方は,MacD指標の将来の傾向を分析することによって価格動向を予測することです.この戦略は,MacD指標を構成する高速移動平均値と緩やかな移動平均値のクロスオーバーによって生成される取引信号を最大限に活用しています.

戦略原則

  1. MacD線と信号線の上昇と減少を決定するために,MacD指標の差 (歴史的値) を計算する.
  2. MacD指標の将来の傾向を判断し,価格動向を予測するために,コールオプションを設定することで,MacD指標の将来の値を4時間以内に使用します.
  3. MacD指標差が0より大きいとき (牛市を表す) 長期取引を行い,上昇を続けると予想される.MacD指標差が0未満で (熊市を表す) 減少し続けると予想される場合,ショート取引を行う.
  4. この戦略は,トレンドフォローとトレンド逆転のトレードスタイルを組み合わせ,トレンドを捉えながらトレンド逆転点を把握します.

利点分析

  1. 市場動向を判断するために MacD指標を使用することで,統合を効果的にフィルタリングし,長期的な動向を把握できる利点があります.
  2. MacD指標の将来の動向の予測によって,価格の転換点を早期に特定し,戦略の前向き性を高めることができます.
  3. トレンドフォローとトレンド逆転のトレードスタイルの両方を統合することで,トレンドトラッキング中に適切なタイミングでポジションを逆転させ,より大きな収益を得ることができます.
  4. 調整可能な戦略パラメータは,戦略の安定性を向上させるために,異なるタイムフレームと市場環境に基づいてユーザーを最適化することを可能にします.

リスク分析

  1. MacD指標の将来の動向の予測に頼ることは,予測が不正確である場合,失敗する取引につながる可能性があります.
  2. ストップ・ロスはシングル・ロスを制御するために使用されるべきである.不適切なストップ・ロスの範囲設定も戦略のパフォーマンスに影響を与える.
  3. MacD指標の遅れは,急速な価格逆転の機会を逃す可能性があります.高変動環境における戦略のパフォーマンスには注意が必要です.
  4. トランザクションコストの影響は監視する必要がある.

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

  1. 予測のための他の指標を組み込み,単一のMacD指標への依存を軽減し,取引量の変化を調べることなど,予測の精度を向上させる.
  2. 機械学習アルゴリズムを追加し MacD指標の将来の傾向を予測するモデルを訓練します
  3. パラメータの設定を最適化して 最高のパラメータの組み合わせを見つけます
  4. 異なる市場環境は異なるパラメータ構成に適しており,パラメータを自動最適化するために適応システムを追加することができます.

結論

この戦略は,MacD指標のトレンドを決定する利点を完全に発揮する一方で,インディケーターの将来のトレンドの予測も組み込む.トレンドを把握する上で,重要なターニングポイントも把握する.単にトレンドを追いかけることに比べて,この戦略はより遠見と利益の可能性を持っています.もちろん,さらなる最適化と改善を必要とする特定のリスクもあります.全体として,戦略は深層の研究と適用に値します.


/*backtest
start: 2023-12-05 00:00:00
end: 2023-12-12 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// @version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © x11joe
strategy(title="MacD (Future Known or Unknown) Strategy", overlay=false, precision=2,commission_value=0.26, initial_capital=10000, currency=currency.USD, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

//OPTIONAL:: Allow only entries in the long or short position
allowOnlyLong = input(title="Allow position ONLY in LONG",type=input.bool, defval=false)
allowOnlyShort = input(title="Allow position ONLY in SHORT",type=input.bool, defval=false)


strategy.risk.allow_entry_in(allowOnlyLong ? strategy.direction.long : allowOnlyShort ? strategy.direction.short : strategy.direction.all) // There will be no short entries, only exits from long.

// Create MacD inputs
fastLen = input(title="MacD Fast Length", type=input.integer, defval=12)
slowLen = input(title="MacD Slow Length", type=input.integer, defval=26)
sigLen  = input(title="MacD Signal Length", type=input.integer, defval=9)

// Get MACD values
[macdLine, signalLine, _] = macd(close, fastLen, slowLen, sigLen)
hist = macdLine - signalLine

useFuture = input(title="Use The Future?",type=input.bool,defval=true)

macDState(resolutionType) =>
    hist_from_resolution = security(syminfo.tickerid, resolutionType, hist,barmerge.gaps_off, barmerge.lookahead_on)
    Green_IsUp = hist_from_resolution > hist_from_resolution[1] and hist_from_resolution > 0
    Green_IsDown = hist_from_resolution < hist_from_resolution[1] and hist_from_resolution > 0
    Red_IsDown = hist_from_resolution < hist_from_resolution[1] and hist_from_resolution <= 0
    Red_IsUp = hist_from_resolution > hist_from_resolution[1] and hist_from_resolution <= 0
    result=0
    if(Green_IsUp)
        result := 1
    if(Green_IsDown)
        result := 2
    if(Red_IsDown)
        result := 3
    if(Red_IsUp)
        result := 4
    result

macDStateNonFuture(resolutionType) =>
    hist_from_resolution = security(syminfo.tickerid, resolutionType, hist,barmerge.gaps_off, barmerge.lookahead_off)
    Green_IsUp = hist_from_resolution > hist_from_resolution[1] and hist_from_resolution > 0
    Green_IsDown = hist_from_resolution < hist_from_resolution[1] and hist_from_resolution > 0
    Red_IsDown = hist_from_resolution < hist_from_resolution[1] and hist_from_resolution <= 0
    Red_IsUp = hist_from_resolution > hist_from_resolution[1] and hist_from_resolution <= 0
    result=0
    if(Green_IsUp)
        result := 1
    if(Green_IsDown)
        result := 2
    if(Red_IsDown)
        result := 3
    if(Red_IsUp)
        result := 4
    result

// === INPUT BACKTEST RANGE ===
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 = 2019, title = "From Year", minval = 2017)
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()  => time >= start and time <= finish ? true : false // create function "within window of time"
// === INPUT BACKTEST RANGE END ===

//Get FUTURE or NON FUTURE data
macDState240=useFuture ? macDState("240") : macDStateNonFuture("240") //1 is green up, 2 if green down, 3 is red, 4 is red up

//Fill in the GAPS
if(macDState240==0)
    macDState240:=macDState240[1]

//Plot Positions
plot(close,color= macDState240==1 ? color.green : macDState240==2 ? color.purple : macDState240==3 ? color.red : color.yellow,linewidth=4,style=plot.style_histogram,transp=50)

if(useFuture)
    strategy.entry("buy_1",long=true,when=window() and (macDState240==4 or macDState240==1))
    strategy.close("buy_1",when=window() and macDState240==3 and macDState240[1]==4)
    strategy.entry("sell_1",long=false,when=window() and macDState240==2)
else
    strategy.entry("buy_1",long=true,when=window() and (macDState240==4 or macDState240==1))//If we are in a red macD trending downwards MacD or in a MacD getting out of Red going upward.
    strategy.close("buy_1",when=window() and macDState240==3 and macDState240[1]==4)//If the state is going upwards from red but we are predicting back to red...
    strategy.entry("sell_1",long=false,when=window() and macDState240==2)//If we are predicting the uptrend to end soon.


もっと