デュアルモメンタム移動平均取引戦略


作成日: 2024-02-19 14:36:37 最終変更日: 2024-02-19 14:36:37
コピー: 1 クリック数: 322
1
フォロー
1179
フォロワー

デュアルモメンタム移動平均取引戦略

概要

双動力均線取引戦略は,OTT指数とWavetrend振動器指数を組み合わせた戦略である.これは,Anıl Özekşi先生が開発したOTT指数とlonestar108のWavetrend振動器指数を組み合わせて,成功した取引指数を形成する.この戦略は,二方向市場において多空調操作を行うことができる.

戦略原則

二動力均線取引戦略は,まずブルイン帯の中軌道,すなわち移動平均MAvgを計算する.それから,ユーザが設定したパーセントの範囲と周期に基づいて,長ストップの位 longStopと短ストップの位 shortStopを計算する.価格が上軌道に突破する時は多し,下軌道に突破する時は空にする.閉じる信号は価格が平均線近くに戻るものである.

具体的には,この戦略の核心指標は,OTT指標である。OTT指標は,平均線と境界線で構成され,市場変動の程度に応じて,あるアルゴリズムに従って境界線の位置を調整する。価格が下境界線OTTを下回るとき,空白する;価格が上境界線OTTを突破するとき,多めにする。

この戦略は,価格の傾向の方向を判断するためにWavetrend指標を使用し,下向きの傾向であると判断した場合,空白を多めにしない;上向きの傾向であると判断した場合,空白を多めにしない.

優位分析

双動力均線取引戦略は,移動平均線,ブリン帯,OTT指標の優位性を組み合わせて,自動で止損位置を調整し,止損が活性化される確率を下げます.同時に,トレンド判断指標を組み合わせて,振動傾向に巻き込まれないようにします.

具体的には,この戦略の主な利点は以下の通りです.

  1. 自動でストップレスを調整し,リスクを効果的にコントロールできます.
  2. OTT指標は,逆転点を比較的に正確に判断できます.
  3. トレンド判断の指標を組み合わせて,波動的な市場から逃れる
  4. 規則は比較的シンプルでわかりやすい.

リスク分析

双動エネルギー均線取引戦略には,以下のいくつかの側面に重点を置くリスクがあります.

  1. ストップラインが突破され,大きな損失が発生する可能性があります.
  2. OTT指標の判断による反転信号は必ずしも正確ではない.故障信号が発生する可能性がある.
  3. 傾向判断が誤りになり,下向きの揺れで多額の損失を被る可能性もあります.
  4. パラメータを正しく設定しない場合も, 策略の効果に影響します.

対応策は以下の通りです.

  1. ストップ・ローンの幅を適正に緩め,ストップ・ラインが簡単に活性化されないようにする.
  2. 偽信号を避けるために,OTT信号の信頼性を判断する他の指標と組み合わせる
  3. トレンド判断を確実にするためのパラメータの適切な調整
  4. パラメータを最適化して,最適なパラメータの組み合わせを見つける

最適化の方向

双動エネルギーの均線取引戦略は,さらに最適化できる余地があります.

  1. 信号判断の精度を高めるために,他の指標と組み合わせることも考慮できます.
  2. 市場波動に応じて調整可能なストップラインを可能にする自己適応のストップアルゴリズムを研究することができる
  3. 取引量指数に追加して,低量の偽ブレークを避ける
  4. 移動平均の種類をテストして,最も一致する平均値を見つけることができます.
  5. 機械学習などの手法でパラメータを自動化できます.

要約する

双動能均線取引戦略は,複数の指標の優位性を統合し,自動で止損位を調整し,反転シグナルを判断し,トレンドの方向を識別することができる.リスク管理能力が強く,使い方を理解しやすいなどの優位性がある.しかし,隠蔽,シグナル不正確などのリスクもある.この戦略は,他の指標の組み合わせを使用し,自己適応アルゴリズムの研究などによりさらに最適化することができる.全体的に,双動能均線取引戦略は,実用的な突破型の取引戦略である.

ストラテジーソースコード
/*backtest
start: 2023-02-12 00:00:00
end: 2024-02-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Bugra trade strategy", shorttitle="Bugra trade strategy", overlay=true)

// Kullanıcı Girdileri
length = input(5, title="Period", minval=1)
percent = input(1, title="Sihirli Yüzde", type=input.float, step=0.1, minval=0)
mav = input(title="Hareketli Ortalama Türü", defval="VAR", options=["SMA", "EMA", "WMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF"])
wt_n1 = input(10, title="Kanal Periyodu")
wt_n2 = input(21, title="Averaj Uzunluğu")
src = close

// Tarih Aralığı Girdileri
startDate = input(20200101, title="Başlangıç Tarihi (YYYYMMDD)")
endDate = input(20201231, title="Bitiş Tarihi (YYYYMMDD)")

// Tarih Filtresi Fonksiyonu
isDateInRange() => true
// Özel Fonksiyonlar
Var_Func(src, length) =>
    valpha = 2 / (length + 1)
    vud1 = src > src[1] ? src - src[1] : 0
    vdd1 = src < src[1] ? src[1] - src : 0
    vUD = sum(vud1, length)
    vDD = sum(vdd1, length)
    vCMO = (vUD - vDD) / (vUD + vDD)
    varResult = 0.0
    varResult := nz(valpha * abs(vCMO) * src + (1 - valpha * abs(vCMO)) * nz(varResult[1]))
    varResult

Wwma_Func(src, length) =>
    wwalpha = 1 / length
    wwma = 0.0
    wwma := wwalpha * src + (1 - wwalpha) * nz(wwma[1])
    wwma

Zlema_Func(src, length) =>
    zxLag = floor(length / 2)
    zxEMAData = src + (src - src[zxLag])
    zlema = ema(zxEMAData, length)
    zlema

Tsf_Func(src, length) =>
    lrc = linreg(src, length, 0)
    lrs = lrc - linreg(src, length, 1)
    tsf = lrc + lrs
    tsf

getMA(src, length) =>
    ma = mav == "SMA" ? sma(src, length) :
         mav == "EMA" ? ema(src, length) :
         mav == "WMA" ? wma(src, length) :
         mav == "TMA" ? sma(sma(src, ceil(length / 2)), floor(length / 2) + 1) :
         mav == "VAR" ? Var_Func(src, length) :
         mav == "WWMA" ? Wwma_Func(src, length) :
         mav == "ZLEMA" ? Zlema_Func(src, length) :
         mav == "TSF" ? Tsf_Func(src, length) : na

// Strateji Hesaplamaları
MAvg = getMA(src, length)
fark = MAvg * percent * 0.01
longStop = MAvg - fark
longStopPrev = nz(longStop[1], longStop)
longStop := MAvg > longStopPrev ? max(longStop, longStopPrev) : longStop
shortStop = MAvg + fark
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := MAvg < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop

dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and MAvg > shortStopPrev ? 1 : dir == 1 and MAvg < longStopPrev ? -1 : dir
MT = dir==1 ? longStop: shortStop
OTT = MAvg > MT ? MT*(200+percent)/200 : MT*(200-percent)/200

plot(OTT, title="BugRA", color=color.rgb(251, 126, 9))

// Alım ve Satım Koşulları
longCondition = crossover(src, OTT) and isDateInRange()
shortCondition = crossunder(src, OTT) and isDateInRange()

// Strateji Giriş ve Çıkış Emirleri
if (longCondition)
    strategy.entry("Long", strategy.long)

if (shortCondition)
    strategy.close("Long")