ATRチャネル平均逆転量的な取引戦略

作者: リン・ハーンチャオチャン開催日:2023年12月11日 15:38:25
タグ:

img

概要

これは,価格がATRチャネルの下帯に突破するとエントリー信号を特定し,価格がATRチャネルの中帯 (EMA) または上帯に達すると利益を得ます.また,ストップ損失レベルを計算するためにATRを使用します.この戦略は短期間の迅速な取引に適しています.

戦略の論理

ストップ・ロスはエントリー価格マイナスATRストップ・ロスの倍数倍数ATRで設定される.メリットを取ることは中間帯 (EMA) または上部ATR帯である.現在のバーの閉じるが前のバーの低値よりも低い場合,以前のバーの低値をメリットを取るために使用する.

具体的には,鍵となる論理は以下のとおりです.

  1. ATRと中間帯 (EMA) を計算する
  2. 時間フィルターを定義する
  3. 価格 < 下のATR帯域の場合,長信号を識別する
  4. 次のバーで長引く
  5. 記録的なエントリー価格
  6. ストップ損失価格を計算する
  7. 価格 > 中間帯 (EMA) または上部 ATR帯の場合,利益をとる
  8. ストップアウト価格 <ストップ損失価格

利点分析

この戦略の利点は

  1. 信頼性の高い入力と出出信号のためにATRチャンネルを使用します.
  2. アノマリー・ドロップが高値を追いかけるのを 避けられるまで
  3. ストップ・ロスの厳格なリスク管理
  4. 短期間の迅速な取引に適しています
  5. シンプルな論理 簡単に実装し最適化

リスク分析

いくつかのリスクがあります:

  1. 高い取引頻度は,より高い取引コストとスライプにつながります
  2. 連続的なストップ・ロスのトリガーが発生する可能性があります.
  3. 適切なパラメータの最適化が性能に影響を与える
  4. 価格変動が大きい場合,ストップロスは大きすぎる

ATR 期間,ストップ損失倍数等を調整することでこれらのリスクを軽減できます.低取引手数料のブローカーを選ぶことも重要です.

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

戦略は以下によって改善できます.

  1. 最良の入力信号を逃さないように他のフィルター指標を追加する
  2. ATR 期間を最適化する
  3. 再入国メカニズムの検討
  4. 調整可能なストップ損失サイズ
  5. トレンドに反する取引を避けるためにトレンドフィルターを追加する

結論

簡単に言うと,これはATRチャネルをベースとしたシンプルで実践的な平均逆転戦略です.明確なエントリールール,厳格なストップ損失,合理的なテイク・プロフィートがあります.パラメータ調整にも余地があります.トレーダーは正しいシンボルを選択し,ストップ損失でリスクをコントロールできれば,この戦略は良い結果を達成することができます.


/*backtest
start: 2022-12-04 00:00:00
end: 2023-12-10 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Bcullen175

//@version=5
strategy("ATR Mean Reversion", overlay=true, initial_capital=100000,default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=6E-5) // Brokers rate (ICmarkets = 6E-5)
SLx = input(1.5, "SL Multiplier", tooltip = "Multiplies ATR to widen stop on volatile assests, Higher values reduce risk:reward but increase winrate, Values below 1.2 are not reccomended")
src = input(close, title="Source")
period = input.int(10, "ATR & MA PERIOD")
plot(open+ta.atr(period))
plot(open-ta.atr(period))
plot((ta.ema(src, period)), title = "Mean", color=color.white)

i_startTime     = input(title="Start Filter", defval=timestamp("01 Jan 1995 13:30 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups")
i_endTime       = input(title="End Filter", defval=timestamp("1 Jan 2099 19:30 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups")

// Check filter(s)
f_dateFilter = true

atr = ta.atr(period)

// Check buy/sell conditions
var float buyPrice = 0
buyCondition    = low < (open-ta.atr(period)) and strategy.position_size == 0 and f_dateFilter
sellCondition   = (high > (ta.ema(close, period)) and strategy.position_size > 0 and close < low[1]) or high > (open+ta.atr(period))
stopDistance    = strategy.position_size > 0 ? ((buyPrice - atr)/buyPrice) : na
stopPrice       = strategy.position_size > 0 ? (buyPrice - SLx*atr): na
stopCondition   = strategy.position_size > 0 and low < stopPrice

// Enter positions
if buyCondition
    strategy.entry(id="Long", direction=strategy.long)

if buyCondition[1]
    buyPrice := open

// Exit positions
if sellCondition or stopCondition
    strategy.close(id="Long", comment="Exit" + (stopCondition ? "SL=true" : ""))
    buyPrice := na

// Draw pretty colors
plot(buyPrice, color=color.lime, style=plot.style_linebr)
plot(stopPrice, color=color.red, style=plot.style_linebr, offset=-1)


もっと