時間と空間を最適化したマルチタイムフレームMACD戦略

作者: リン・ハーンチャオチャン, 日付: 2024-01-29 10:15:34
タグ:

img

概要

この戦略は,MACD指標のパラメータを最適化し,移動平均値,価格アクション,特定の取引時間と組み合わせて,高勝率の外為取引戦略を達成します.

戦略の論理

  1. 価格動向を判断するために3つのK線を使用します.最後の3つのK線の閉値が開値よりも高くなった場合,それは上向きの傾向として判断されます.最後の3つのK線の閉値が開値よりも低い場合,それは下向きの傾向として判断されます.

  2. 速線,遅線,MACDの差を計算します.速線パラメータは12,遅線パラメータは26,信号ラインパラメータは9です.

  3. 取引時間は毎日09:00〜9:15に設定されています. この期間中に,以下の条件を満たす場合は,市場に参入してください.

    • 上向きトレンドがMACD差値が0を超えるとロングになる.
    • ダウントレンドがMACD差値が0を下回るとショート
  4. ストップ・ロスは100ピップに設定されています

  5. 21:00~21:15の間に 全てのポジションを閉じる

戦略 の 利点

  1. 多期指標の組み合わせを使用して,トレンド方向を包括的に判断し,意思決定の正確性を向上させる.

  2. 取引時間を最適化して,市場の変動が高い時期を避けるため,不要なストップロスのリスクを減らす.

  3. 利潤を最大化し損失拡大を避けるために 利潤とストップ損失の合理的な比率を設定します

  4. 全体的にこの戦略は非常に高い得率を持ち,頻繁な短期取引に適しています.

戦略 の リスク

  1. 取引時間は比較的固定されているので,時間内に市場に参入できない場合,取引機会を逃す可能性があります.

  2. MACD指標は誤解を招くシグナルに易い.明確な上昇傾向または下落傾向が決定できない場合,慎重に取引してください.

  3. 利益とストップロスは不合理に設定され,利益と損失の不均衡が生じます.パラメータは異なる製品に応じて調整する必要があります.

  4. リスクは小さいが 負債の高さで 過剰に大きいポジションは 巨額の損失を伴う

戦略の最適化のための方向性

  1. 傾向を決定するために他の指標と組み合わせ,MACDからの誤解を招く信号を避ける.例えば,ボリンジャーバンド,RSIなどを組み合わせる.

  2. バックテストデータから最適なパラメータを計算することによって,利益/ストップ損失比を最適化します.

  3. 戦略に適用される取引品種を拡大し,異なる製品に対するパラメータ調整効果を評価する.

  4. 機械学習アルゴリズムを導入し,異なる市場状況に基づいて最適パラメータを動的に選択する.

結論

この戦略は,初心者向けに適している.論理は明確で,最適化空間は大きく,リスクは制御可能である.開業時間をカスタマイズし,合理的な利益損失比を設定することで,高い収益を達成することができる.さらに,パラメータを動的に調整し,より複雑な市場環境に適応するために最適化が可能である.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © exlux99

//@version=4
strategy("Very high win rate strategy", overlay=true)


//

fast_length =12
slow_length= 26
src = close
signal_length = 9
sma_source = false
sma_signal = false

// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal

//ma

len=10
srca = input(close, title="Source")
out = hma(srca, len)

fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2000, title = "From Year", minval = 1970)
 //monday and session 
// To Date Inputs
toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2021, title = "To Year", minval = 1970)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true


timeinrange(res, sess) => time(res, sess) != 0

// = input('0900-0915', type=input.session, title="My Defined Hours")
myspecifictradingtimes = '0900-0915'
exittime = '2100-2115'

optionmacd=true


entrytime = time(timeframe.period, myspecifictradingtimes) != 0
exit = time(timeframe.period, exittime) != 0     

if(time_cond and optionmacd )
    if(close > open and close[1] > open[1] and close[2] > open[2] and entrytime  and crossover(hist,0))
        strategy.entry("long",1)
    if(close< open and close[1] < open[1] and close[2] < open[2] and entrytime and crossunder(hist,0))
        strategy.entry("short",0)      


tp = input(0.0003, title="tp")
//tp = 0.0003
sl = input(1.0 , title="sl")
//sl = 1.0
strategy.exit("closelong", "long" , profit = close * tp / syminfo.mintick, loss = close * sl / syminfo.mintick, alert_message = "closelong")
strategy.exit("closeshort", "short" , profit = close * tp / syminfo.mintick, loss = close * sl / syminfo.mintick, alert_message = "closeshort")


もっと