範囲のブレイクに基づく二方向トレンド追跡戦略

作者: リン・ハーンチャオチャン,日付: 2024-02-01 14:22:26
タグ:

img

概要

この戦略は,最後の最高価格 (lastbull) と最後の最低価格 (lastbear) を計算します.その後,現在の価格をlastbullとlastbearと比較して,価格が一定の範囲に入っているかどうかを判断し,取引信号を生成します.価格が特定のパーセントでlastbullを上回ると長くなって,価格が特定のパーセントでlastbearを下回ると短くなります.

戦略の論理

戦略は,まず,最後の最高値のラストブルと最後の最低値のラストベアを計算し,次に,現在の価格のラストブルと相対した近値の変化%ddlとラストベアと相対した変化%ddsを計算します.

ddl が設定された長信号の値より低いとき signalallong は長信号アップが生成される.dds が設定された短信号の値より高いとき signalshort は短信号 dn が生成される.

ロング・シグナルを受信すると,ネードロングパラメータが真である場合,ロング・ポジションを開く.ショート・シグナルを受信すると,ネードショート・パラメータが真である場合,ショート・ポジションを開く.ポジションサイズ資本は,口座資本から計算される.

ロングを開いた後に価格が上昇するとロングポジションを閉じて,ショートを開いた後に価格が下がるとショートポジションを閉じる.

利点分析

この戦略は,トレンドとレンジ分析を組み合わせます.トレンドをキャッチし,レンジブレイクから取引信号を生成することができます.単純なトレンド追跡戦略と比較して,レンジブレイク後に新しいトレンド方向を迅速にキャッチできます.

パラメータは異なる製品に対して高度に設定可能である.重要なイベントを避けるために取引時間範囲を設定することができる.

リスク分析

この戦略には,取引ごとに損失を制限するストップ・ロスのメカニズムはありません.取引範囲が大きい場合,ポジションサイズが価格変動によって大きく影響されます.

ストップ・ロスは,取引毎の損失を制限するために追加することができます. ポジションサイズアルゴリズムは,ポジションサイズを安定させるために製品に基づいてカスタマイズできます.

オプティマイゼーションの方向性

  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)

もっと