オーバーレイ トレンド シグナル 戦略

作者: リン・ハーンチャオチャン開催日:2024年2月18日10時22分
タグ:

img

概要

この戦略は,平均方向指数 (ADX) と指数関数移動平均 (EMA) とともにDI+とDI-を計算することで取引信号を生成する.DI+がDI-を超越し,ADXが20を超えると長い信号が発動し,DI+がDI+を下回り,ADXが25を超えると短い信号が発動する.DI+がDI+を超越し,ADXが30を超えるとストップ・ロスの信号が発動する.

戦略の論理

  1. DI+,DI-,ADX を計算する

    • DI+,DI-,ADXを計算するために ta.dmi() を使用します
    • DI+/DI-は,価格の方向的な動きを測定する.
    • ADXは価格変動の強さを測定する.
  2. 指数関数移動平均を計算する

    • EMA を計算するために my_ema (my_ema) 関数を使用する
    • EMAは価格データを調整
  3. 取引信号を生成する

    • 長信号:DI+はDI-とADX > 20を超えて横断し,EMA > 近く
      • 上昇傾向と変動の上昇を示している
    • 短信号: DI+ と ADX > 25 の下に横断し,EMA < 近く
      • 減少傾向と高波動性を示しています
  4. ストップ損失を設定する

    • 長期ストップ損失:DI+とADX > 30を超えたDI-
      • 傾向の逆転を示しています
    • ショートストップ損失:DI+がDI-とADX > 30を下回る
      • 傾向の逆転を示しています

要するに,この戦略は,強烈な価格動向が現れるときにトレードするモメンタムとトレンド分析指標を組み合わせ,損失を制限するためにストップロスを使用します.

利点分析

  1. ダブルDIは偽信号を回避する
    • シングルDIは誤った信号を出すが,ダブルDIはトレンドを保証する
  2. ADX 限界値では 変動が増加する必要があります
    • 高波動の取引のみで,変動を避けます
  3. EMAはDIを補完する
    • EMAは中期・長期間の傾向を特定する
  4. ストップ・ロスは厳格に
    • 損失を素早く削減する

リスク分析

  1. ストップ・ロスの頻度
    • 不安定な変動は頻繁に停止を引き起こす可能性があります
  2. パラメータ依存
    • 最適なDIとADXパラメータを見つけなければならない
  3. 取引頻度が低い
    • 厳格な規制が貿易を減少させる

ストップ・ロストを拡大し パラメータを調整し 周波数を増やすためにフィルターを追加することで 最適化できます

最適化 の 機会

  1. パラメータ最適化
    • DI と ADX パラメータを最適化
  2. フィルターを追加する
    • 容量,離散など
  3. ストップ損失を拡大する
    • 頻度を減らすために休止を緩める

結論

この戦略は,強烈なトレンドとリスク制御のための厳格なストップでトレードするモメントとトレンド分析指標を組み合わせ,パラメータ最適化,追加のフィルター,リラックスストップを通じてパフォーマンスをさらに改善することができます.


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

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Tamil_FNO_Trader

//@version=5
strategy("Overlay Signals by TFOT", overlay=true)

// Calculate DMI
len = input.int(14, minval=1, title="DI Length")
lensig = input.int(14, title="ADX Smoothing", minval=1, maxval=50)
[diplus, diminus, adx] = ta.dmi(len, lensig)

// Get EMA
emalen = input.int(26, minval=1, title = "EMA Length")
emasrc = input.source(close, title = "EMA Source")

my_ema(src, length) =>
    alpha = 2 / (length + 1)
    sum = 0.0
    sum := na(sum[1]) ? src : alpha * src + (1 - alpha) * nz(sum[1])
EMA2 = my_ema(emasrc, emalen)

// Variables
var bool buycondition1 = false
var bool sellcondition1 = false

var int firstbuybar = na
var int firstsellbar = na

var int buyexitbar = na
var int sellexitbar = na

var bool buyexit1 = false
var bool sellexit1 = false

// Buy & Sell Conditions
buycondition1 := (ta.crossover(diplus, diminus)) and (adx > 20) and (close > EMA2) and na(firstbuybar)
sellcondition1 := (ta.crossover(diminus, diplus)) and (adx > 25) and (close < EMA2) and na(firstsellbar)

buyexit1 := ta.crossover(diminus, diplus) and (adx > 30) and na(buyexitbar)
sellexit1 := ta.crossover(diplus, diminus) and (adx > 30) and na(sellexitbar)

if buycondition1
    if(na(firstbuybar))
        firstbuybar := bar_index
        buyexitbar := na
        firstsellbar := na
        strategy.entry("Buy", strategy.long)

if sellcondition1
    if(na(firstsellbar))
        firstsellbar := bar_index
        sellexitbar := na
        firstbuybar := na
        strategy.entry("Sell", strategy.short)

if buyexit1 and not na(firstbuybar)
    if(na(buyexitbar))
        buyexitbar := bar_index
        firstbuybar := na
        firstsellbar := na
        strategy.close("Buy")

if sellexit1 and not na(firstsellbar)
    if(na(sellexitbar))
        sellexitbar := bar_index
        firstsellbar := na
        firstbuybar := na
        strategy.close("Sell")

// Plot signals on chart
hl = input.bool(defval = true, title = "Signal Labels")

plotshape(hl and buycondition1 and bar_index == firstbuybar ? true : na, "Buy", style = shape.labelup, location = location.belowbar, color = color.green, text = "Buy", textcolor = color.white, size = size.tiny)
plotshape(hl and sellcondition1 and bar_index == firstsellbar ? true : na, "Sell", style = shape.labeldown, location = location.abovebar, color = color.red, text = "Sell", textcolor = color.white, size = size.tiny)

plotshape(hl and buyexit1 and bar_index == buyexitbar ? true : na, "Buy Exit", style = shape.labelup, location = location.belowbar, color = color.red, text = "Buy X", textcolor = color.white, size = size.tiny)
plotshape(hl and sellexit1 and bar_index == sellexitbar ? true : na, "Sell Exit", style = shape.labeldown, location = location.abovebar, color = color.red, text = "Sell X", textcolor = color.white, size = size.tiny)



もっと