この戦略は,価格がEMAを突破したときの取引信号を生成し,リスク管理のために動的ストップロスをATRとして使用します.
鍵となる論理は
ストップ損失線としてATRを計算します.ATR値はストップ距離 nLossを決定します.
価格ソースはデフォルトで閉じる価格です.オプション h が有効になっている場合,Heikin Ashi close を使用します.
xATRTrailingStopは前回のストップとの価格比較に基づいて動的ストップ損失ラインを追跡します
ポジションposは,価格がストップ・ロスの線を超えると長引で1で,ストップ・ロスの線を超えると短引で-1で,そうでなければ0です.
EMAのクロスオーバーシグナル,EMAの上のシグナルは購入シグナル,下のシグナルは販売シグナル
買/売シグナルで取引を開始し,反対のシグナルで取引を終了する
位置,マーク信号,ストップ・ロストラインに基づく色帯
この戦略は,ATRに基づく動的停止で動向を追跡し,動向を特定し,リスクを効果的に管理することができます.
その利点とは
ATRベースの動的ストップは市場の変動に適応する
EMAフィルターはノイズからの偽信号を減らす
オプション ハイキンアシ 騒音フィルターとトレンドを識別
Clear long/short position avoids whipsaws from trailing stop order (CLEAR LONG/SHORT POSITION) は,この命令を削除している.
線,ラベル,色付けなどの視覚的支援
シンプルで理解しやすい 変更の論理
異なる市場で調整可能なATR期間とマルチプリキューター
この戦略は,トレンドフォローとダイナミックストップを組み合わせることで,トレンドを把握し,スウィング取引のリスクをうまく管理することができます.
考慮すべきリスクは:
EMAの信号は短期的な動きに遅れることがある.
不安定な市場では頻繁にストップロスのトリガーが可能です.
コミッションなどの費用は考慮されません
位置サイズ制御の欠如
性能はパラメータ調節に依存する
変動市場における不確実性のリスク
監視と介入が必要です
パラメータを最適化し フィルターを追加し 位置を適切にサイズし パフォーマンスを監視し 必要に応じて介入することで リスクを軽減できます
戦略を改善する方法:
異なる市場のためのATRパラメータを調整する
他の移動平均値をフィルター信号にテストする
より高い確率のためにトレンドフィルター指標を追加する
位置サイズ制限を実装する
容量,MAからの距離などのエントリー条件を追加します
ストップに手数料などのコストを組み込む
より多くのシグナルで入口と出口のタイミングを最適化
利益の引き上げまたは後続停止を導入する
自動パラメータ最適化
入口,出口,フィルター,パラメータ調節のためのより多くの技術を組み合わせることで,戦略はさらに強化することができます.
この戦略は,動的ストップとトレンドフォローをうまく組み合わせます.効果的なストップ,スムーズなトレンド追跡,使いやすさ,カスタマイズ可能性により,スウィングトレンドに適しています.しかし,適切なリスク管理,モニタリング,パラメータチューニングが必要です.トレンド市場で適切に適用されれば,良い結果が得られます.全体として,トレンドトレードとリスク管理を組み合わせるシンプルで実践的なアプローチを提供します.
/*backtest start: 2022-10-25 00:00:00 end: 2023-10-31 00:00:00 period: 1d basePeriod: 1h 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") 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) strategy.entry("short", false, when = sell)