ATRチャネルに基づくブレイクアウトエントリートレンド戦略


作成日: 2024-01-03 11:53:52 最終変更日: 2024-01-03 11:53:52
コピー: 1 クリック数: 722
1
フォロー
1621
フォロワー

ATRチャネルに基づくブレイクアウトエントリートレンド戦略

概要

この戦略はATRチャネルとブレイク理論を適用し,チャネルを突破する時にトレンドに入ると,トレンド追跡戦略の1つである. 戦略は簡単で分かりやすい.均線チャネルとATR指標を使用してトレンドの方向を判断し,重要なポイントで取引信号を発信する.

戦略原則

この戦略は,高,低,クローズアップ価格とATR指標を使用して上下軌道を構築し,ATRチャネルを形成する.チャネル幅はATRパラメータの大きさによって決定される.価格がチャネルを突破すると,トレンドが始まると判断され,この時点で多額の方向に進む.戦略は2つの取引信号に分かれ,価格がATR幅の1つを突破すると,トレンドの始まりとして見られ,この時点で,第1の買出ポイントが誘発される.価格がATR幅の2つを突破すると,トレンドの加速として見られ,第2の買出ポイントが誘発される.

優位分析

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

  1. ATR指標を用いて通路を構築し,市場の変動率を考慮し,単純な平均線より優れている.
  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)