レンジブレイクスルーに基づく双方向トレンド追跡戦略


作成日: 2024-02-01 14:22:26 最終変更日: 2024-02-01 14:22:26
コピー: 2 クリック数: 528
1
フォロー
1617
フォロワー

レンジブレイクスルーに基づく双方向トレンド追跡戦略

概要

この戦略は,最後のストップ価格と最後のストップ価格を計算して,現在の価格と価格が一定の領域に入っているかどうかを判断することで取引信号を生成します. 価格が前のストップ価格の一定比率を超えると多めに,価格が前のストップ価格の一定比率を下回ると空っぽにします.

戦略原則

策略は,最初に最後のストップ価格lastbullと最後のストップ価格lastbearを計算します. そして,現在の価格closeがlastbullに対する変化の比率ddl,およびlastbearに対する変化の比率ddsを計算します.

ddl が配置された多信号値signallong よりも低くなると多信号up が発生し,dds が配置された空信号値signalshort よりも高くなると空信号dn。 が発生する.

多数信号を受信すると,多数パラメータのneedlongが必要であれば多ポジションを真に開きます.空白信号を受信すると,空白パラメータのneedshortが必要であれば真に空白ポジションを開きます.開設ポジション係数資本は,口座権益によって計算されます.

平仓の条件は,多仓開設後価格上昇は多仓開設,空仓開設後価格下落は空仓開設である.

優位分析

この戦略は,トレンドと区間判断を組み合わせ,トレンドをキャプチャするだけでなく,区間突破を利用して取引シグナルを生成し,多額の空白切り替えの柔軟性を発揮します.単純なトレンド追跡戦略と比較して,区間突破を集計した後に新しいトレンドの方向を迅速にキャプチャすることができます.

パラメータは空間を配置し,多空のパラメータを柔軟に調整し,異なる品種に適応する.重要な時間ノードを回避するために開倉時間帯を配置することができます.

リスク分析

戦略には止損機構がないため,単一の損失を効果的に制御することはできません.品種取引範囲の変動が大きい場合,ポジション計算は価格に影響を受けやすいものです.

単一損失を制限するためにストップを設定できます. 異なる品種でポジションを設定するアルゴリズムによりポジションをより安定させることができます.

最適化の方向

  1. 単一損失のリスクをコントロールするために移動停止を増やす
  2. ポジションの計算方法の改善,例えば,ポジションの大きさをより安定させるためにATRの計算
  3. ポジション開設のフィルターを追加します.例えば,金塊の交差点を突破するときにのみポジションを開きます.
  4. 多種取引を組み合わせて,関連性を設定し,システム上のリスクを軽減する

要約する

この戦略は,トレンド判断と区間突破を統合して取引信号を生成し,新しいトレンドの方向を捉えることも,区間振動特性を利用することもできます.パラメータ設定は柔軟で,異なる品種に適したスペースを調整することができます.戦略の最適化スペースは大きく,より複雑な市場環境に適合するために複数の角度から改善することができます.

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

//Noro
//2019

//@version=4
strategy(title = "Noro's DDL Strategy", shorttitle = "DDL str", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)

//Settings
needlong = input(true, title = "Long")
needshort = input(true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
signalshort = input(3.0, title = "Short, %")
signallong = input(-3.0, title = "Long, %")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Levels
bull = close > close[1] ? 1 : 0
bear = close < close[1] ? 1 : 0
lastbull = 0.0
lastbull := bull ? close : lastbull[1]
lastbear = 0.0
lastbear := bear ? close : lastbear[1]

//Signals
ddl = ((close / lastbull) - 1) * 100
up = ddl < signallong
dds = ((close / lastbear) - 1) * 100
dn = dds > signalshort

//Lines
plot(dds, style = plot.style_area, color = color.red, transp = 0)
plot(ddl, style = plot.style_area, color = color.lime, transp = 0)
plot(0, color = color.black, linewidth = 2, transp = 0)

//Background
col = (up and needlong) or (dn and needshort) ? color.yellow : na
bgcolor(col, transp = 20)

//Orders
lot = 0.0
lot := strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]
truetime = true
if up
    strategy.entry("Long", strategy.long, lot, when = needlong and truetime)
if dn
    strategy.entry("Short", strategy.short, lot, when = needshort and truetime)
if strategy.position_size > 0 and close > open
    strategy.entry("Close", strategy.short, 0)
if strategy.position_size < 0 and close < open
    strategy.entry("Close", strategy.long, 0)