ATRチャンネルブレイク トレンドフォロー戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-03 11:53:52
タグ:

img

概要

この戦略は,ATRチャネルとブレイクアウト理論を利用し,チャネルが壊れたときにトレンドをフォローする.これはトレンドフォローする戦略に属している.この戦略は,移動平均チャネルとATRインジケーターを使用してトレンド方向を決定し,重要なポイントで取引シグナルを発行することで,シンプルで理解しやすい.

原則

この戦略は,ATRチャネルを形成するために,高値,低値,閉値,ATRインジケーターの上下帯を構成する.チャネルの幅はATRパラメータのサイズによって決定される.価格がチャネルを突破すると,それはトレンドの始まりとして判断され,そのポイントでロングまたはショートポジションが入力される.この戦略には2つのトレードシグナル層がある.価格が1つのATR幅を突破すると,それは最初のレベルの購入/販売ポイントを誘発する新興トレンドとみなされる.価格が2つのATR幅を突破すると,それは加速傾向とみなされ,第二レベルの購入/販売ポイントを誘発する.

利点分析

この戦略の主な利点は以下の通りです.

  1. ATR指標を使ってチャネルを構成すると,単純な移動平均値よりも市場の変動が優れていると考えられる.
  2. 2階建ての買い/売却ポイントは,制御可能なリスクで段階的な入力を可能にします.
  3. ブレイクアウト理論は 重要なトレンドポイントを 正確に位置付けています
  4. 簡潔なコードは理解し,実装しやすい.

リスク分析

この戦略の主なリスクは,

  1. 単一の指標に頼ることは,ATRが故障した場合の失敗確率が高いことを意味します.
  2. ストップ・ロスの欠如とポジション管理は,リスク管理が不十分である.
  3. ユーティリティは検証が必要で,リアルタイム取引条件では劣る可能性があります.
  4. 不適切なパラメータは,ウィップソーやオーバートレードを引き起こす可能性があります.

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

この戦略の最適化方向には,以下が含まれます.

  1. 誤った判断を防ぐために 複数の指標のフィルターを追加します
  2. リスク管理を強化するためにストップ・ロスのモジュールを追加します
  3. ポジションコントロールとマネーマネジメントを追加します
  4. パラメータ調整は異なる製品で
  5. 取引頻度とポジションサイズを リアルタイム取引で減らす.

概要

この戦略の全体的な枠組みは明確で,概念証明として利用可能である.しかし,実質的な最適化を可能にするライブ取引からのギャップがあります.リスク制御と取引頻度がさらに改善されれば,アプリケーションの見通しは良好です.


/*backtest
start: 2023-12-03 00:00:00
end: 2024-01-02 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Myhaj_Lito

//@version=5
strategy("Renko Trend Strategy",shorttitle = "RENKO-Trend str.",overlay = true)
TF = input.timeframe(title='TimeFrame', defval="60")
ATRlength = input.int(title="ATR length", defval=60, minval=2, maxval=1000)

HIGH = request.security(syminfo.tickerid, TF, high)
LOW = request.security(syminfo.tickerid, TF, low)
CLOSE = request.security(syminfo.tickerid, TF, close)
ATR = request.security(syminfo.tickerid, TF, ta.atr(ATRlength))


RENKOUP = float(na)
RENKODN = float(na)
H = float(na)
COLOR = color(na)
BUY = int(na)
SELL = int(na)
UP = bool(na)
DN = bool(na)
CHANGE = bool(na)

RENKOUP := na(RENKOUP[1]) ? (HIGH + LOW) / 2 + ATR / 2 : RENKOUP[1]
RENKODN := na(RENKOUP[1]) ? (HIGH + LOW) / 2 - ATR / 2 : RENKODN[1]
H := na(RENKOUP[1]) or na(RENKODN[1]) ? RENKOUP - RENKODN : RENKOUP[1] - RENKODN[1]
COLOR := na(COLOR[1]) ? color.white : COLOR[1]
BUY := na(BUY[1]) ? 0 : BUY[1]
SELL := na(SELL[1]) ? 0 : SELL[1]
UP := false
DN := false
CHANGE := false

// calculating 
if not CHANGE and close >= RENKOUP[1] + H * 2
    CHANGE := true
    UP := true
    RENKOUP := RENKOUP[1] + ATR * 2
    RENKODN := RENKOUP[1] + ATR
    COLOR := color.rgb(0, 255, 170,60)
    SELL := 0
    BUY += 2
    BUY


if not CHANGE and close >= RENKOUP[1] + H
    CHANGE := true
    UP := true
    RENKOUP := RENKOUP[1] + ATR
    RENKODN := RENKOUP[1]
    COLOR := color.rgb(0, 230, 38,60)
    SELL := 0
    BUY += 1
    BUY

if not CHANGE and close <= RENKODN[1] - H * 2
    CHANGE := true
    DN := true
    RENKODN := RENKODN[1] - ATR * 2
    RENKOUP := RENKODN[1] - ATR
    COLOR := color.rgb(255, 92, 43,60)
    BUY := 0
    SELL += 2
    SELL
if not CHANGE and close <= RENKODN[1] - H
    CHANGE := true
    DN := true
    RENKODN := RENKODN[1] - ATR
    RENKOUP := RENKODN[1]
    COLOR := color.rgb(245, 69, 69,60)
    BUY := 0
    SELL += 1
    SELL
//// STRATEGY 
if(UP)
    strategy.entry("Long",strategy.long)
if(DN)
    strategy.entry("Short",strategy.short)


// ploting 

bgcolor(COLOR)


もっと