二重移動平均に基づくインテリジェントな追跡取引戦略


作成日: 2024-02-18 15:58:08 最終変更日: 2024-02-18 15:58:08
コピー: 2 クリック数: 505
1
フォロー
1617
フォロワー

二重移動平均に基づくインテリジェントな追跡取引戦略

概要

双均線インテリジェントトラッキング取引戦略は,均線と特定の指標に基づいたトレンドトラッキング戦略である.この戦略は,2つの異なるパラメータの設定を使用した均線でチャネルを構成し,OTT指標と組み合わせてチャネルの上下限を設定し,価格トレンドのインテリジェントトラッキングを実現する.価格がチャネルを突破すると,買取または販売を行う.

戦略原則

この戦略は,主に2つの移動平均とOTT指標を使用して自適化チャネルを構築し,具体的原理は以下の通りです.

  1. 快線MAvgを計算し,CLOSEの閉店価格とカスタム平均線を入力し,長さは5である.

  2. MAvgと設定パーセントに基づいて,チャネル上の下限長線位置長ストップと短線位置短ストップを計算する.

  3. OTT指標のチャネル移動ストップMTを計算し,多空状態に基づいてチャネル価格OTTを計算する.

  4. 価格がOTTを突破すると取引シグナルが生成されます.

上記は,自己適応通路のプロセスを構築し,戦略が価格変化のトレンドをリアルタイムで追跡し,取引信号を生成することを可能にします.

戦略的優位性

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

  1. 価格の動向を効果的に捉えるための双線通路構造
  2. OTT指標は,チャンネル移動停止を設定し,リスクを制御します.
  3. 価格の変動に迅速に対応する通路構造
  4. 戦略パラメータの設定は柔軟で,異なる品種と周期に最適化できます.

戦略リスク

この戦略にはいくつかのリスクがあります.

  1. 双均線は誤差を誘発しやすいため,誤信号を発生させる可能性があります.
  2. OTTパラメータの設定を間違えた場合,戦略のパフォーマンスに影響を及ぼし,極端に保守的になる可能性があります.
  3. 戦略は基本的要素を考慮せず,技術的な指標のみに基づいています.

上記のリスクに対して,パラメータ最適化,他の指標または基本的なフィルタリング信号と組み合わせて改善および最適化を行うことができます.

戦略最適化の方向性

この戦略は以下の方向から最適化できます.

  1. 平均線パラメータを最適化し,適切な品種と周期のパラメータの組み合わせを選択する.
  2. チャンネル帯域のパラメータを最適化し,追跡感度と安定性をバランスさせる.
  3. 取引量に応じて信号をフィルターする.
  4. 基本条件に合わせて取引方向のフィルタを設定します.

要約する

この戦略は,全体として,双均線チャネルとOTT指標に基づくトレンド追跡戦略であり,その核心構想は,自適化チャネルを構築し,突破して取引信号を生成することである.この戦略には一定の優位性があるが,改善の余地もある.パラメータとルールを最適化することで,この戦略は,実験的に検証する価値のある高効率の取引戦略になることができる.

ストラテジーソースコード
/*backtest
start: 2023-02-11 00:00:00
end: 2024-02-17 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")