アダプティブストップトレーリング戦略


作成日: 2023-10-08 15:06:28 最終変更日: 2023-10-08 15:06:28
コピー: 0 クリック数: 771
1
フォロー
1617
フォロワー

概要

この戦略は,主に自己適応のストップメカニズムを実現し,価格の変動に応じて自動的にストップポジションを調整して,より良いストップ効果を実現する.戦略はATR指標を使用して合理的なストップ範囲を計算し,EMA均等線と組み合わせて取引信号を生成し,EMA均等線を破るときにポジションを開けて余分な空白を行い,同時に自己適応のストップアルゴリズムを使用してストップポジションを追跡する.

戦略原則

  1. ATR指標を計算し,ATR値をパラメータaで止損範囲nLossとして設定する.
  2. EMA平均線を計算する.
  3. 価格がEMA平均線を上越したときに多めにし,EMA平均線を下越したときに空いてください.
  4. 自適性ストップアルゴリズムを使用して,ストップ位xATRTrailingStopを自動的に調整します.規則は以下の通りです.
    • 価格が上方へストップラインを突破すると,ストップラインを価格の減損範囲nLossに調整する.
    • 価格がダウンしてストップを突破すると,ストップを価格加減範囲nLossに調整する.
    • 他の場合,ストップ・ローンは変わらずに維持されます.
  5. 価格がストップ・ロスを触発すると,平仓のストップ.

優位分析

  1. 適応性のあるストップ・メカニズムが実現され,市場の変動程度に応じてストップ・損失幅を自動的に調整し,リスクを効果的に制御する.
  2. 合理的なストップ範囲をATR指数と組み合わせて計算し,過大または過小なストップを避ける.
  3. EMAは取引信号を生成し,無意味な取引を削減し,市場の騒音をフィルターします.
  4. 戦略はシンプルでわかりやすく,コードは簡単に理解し,簡単にチェックし,最適化できます.
  5. 輸入可能なパラメータは,異なる市場環境に対応するために調整されます.

リスクと改善

  1. EMA均線は取引信号を遅らせて,入場を遅らせてしまう可能性があります.他の指標を活用して判断を助ける事前入場を検討することができます.
  2. ポジション保持時間は不確定で,単一のストップ・ロスの大きさを制御することはできません.目標利益または最大ポジション保持時間は,過大損失を避けるように設定できます.
  3. 大幅なトレンド市場では,ストップロスがあまりにも頻繁にトリガーされる可能性がある。トレンド状況に応じてパラメータを調整するか,フィルター条件を追加することを考えることができる。
  4. ATR周期,止損倍数など,異なる品種特性に合わせてパラメータを調整し,盲目的にデフォルト値を使用してはならない.

最適化の方向

  1. トレンド判断の指標を導入し,トレンド方向に仕向け,逆転取引を回避することを検討する.
  2. 変動率の大きさに応じて止損倍数を調整し,大きな変動で適切な止損範囲を緩めることができる.
  3. 最大のポジション保持時間を設定し,一定の時間を過ぎると積極的に止損場を退場させる.
  4. 移動式ストップ策を追加し,価格が動いている時にストップをステップアップします.
  5. 各株の特性に合わせてATR周期パラメータをカスタマイズできます.

要約する

この戦略の全体的な考え方は明確で分かりやすい.ATR指標を使用して自主的に止損範囲を設定し,EMAと連携して取引シグナルを生成することで,損失を効果的に制御できます.しかし,戦略自体は,より積極的であり,最適化の余地が大きい.市場状況に応じてパラメータを調整する方法などにより戦略をより主動的にすることを考慮することができます.全体的に,この戦略は,基礎止損戦略として,より良い考え方であり,テンプレートですが,異なる商品種特性に応じて調整・最適化が行われ,ハードウエアを使用することはできません.

ストラテジーソースコード
/*backtest
start: 2023-09-07 00:00:00
end: 2023-10-07 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="UT Bot Strategy", overlay = true)
//CREDITS to HPotter for the orginal code. The guy trying to sell this as his own is a scammer lol. 

// Inputs
a = input(1,     title = "Key Vaule. 'This changes the sensitivity'")
c = input(10,    title = "ATR Period")
h = input(false, title = "Signals from Heikin Ashi Candles")

////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE
 
// From Date Inputs
fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2019, title = "From Year", minval = 1970)
 
// To Date Inputs
toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2100, title = "To Year", minval = 1970)
 
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true
 
////////////////////////////////////////////////////////////////////////////////


xATR  = atr(c)
nLoss = a * xATR

src = h ? security(heikinashi(syminfo.tickerid), timeframe.period, close, lookahead = false) : close

xATRTrailingStop = 0.0
xATRTrailingStop := iff(src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0), max(nz(xATRTrailingStop[1]), src - nLoss),
   iff(src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0), min(nz(xATRTrailingStop[1]), src + nLoss), 
   iff(src > nz(xATRTrailingStop[1], 0), src - nLoss, src + nLoss)))
 
pos = 0   
pos :=	iff(src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0), 1,
   iff(src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0), -1, nz(pos[1], 0))) 
   
xcolor = pos == -1 ? color.red: pos == 1 ? color.green : color.blue 

ema   = ema(src,1)
above = crossover(ema, xATRTrailingStop)
below = crossover(xATRTrailingStop, ema)

buy  = src > xATRTrailingStop and above 
sell = src < xATRTrailingStop and below

barbuy  = src > xATRTrailingStop 
barsell = src < xATRTrailingStop 

plotshape(buy,  title = "Buy",  text = 'Buy',  style = shape.labelup,   location = location.belowbar, color= color.green, textcolor = color.white, transp = 0, size = size.tiny)
plotshape(sell, title = "Sell", text = 'Sell', style = shape.labeldown, location = location.abovebar, color= color.red,   textcolor = color.white, transp = 0, size = size.tiny)

barcolor(barbuy  ? color.green : na)
barcolor(barsell ? color.red   : na)

strategy.entry("long",   true, when = buy  and time_cond)
strategy.entry("short", false, when = sell and time_cond)