日次レンジ突破一方向取引戦略

OHLC ADX ATR MA RSI BB
作成日: 2024-12-11 15:23:37 最終変更日: 2024-12-11 15:23:37
コピー: 1 クリック数: 382
1
フォロー
1617
フォロワー

日次レンジ突破一方向取引戦略

概要

これは,前の取引日の高低を基にした区間突破取引戦略である. 戦略は,価格が前日の高低を突破または破るのを識別して取引機会を探し,各突破または破る方向に1回の取引のみを実行する. 戦略は,固定50ポイントのストップ・ロスの設定を採用し,取引の秩序を保証するために取引のマークを毎日の初めに再設定する. この戦略の核心は,日中の価格の片道的な突破状況を捉え,厳格な取引管理によってリスクを制御する.

戦略原則

戦略の核心的な論理は以下の通りです.

  1. 取引シグナル生成:システムは,現在の閉盘価格が前日の高点または低点を突破したかどうかを判断することによって取引方向を決定します. 価格が閉盘で前日の高点を突破すると,システムは複数の信号を発信します. 価格が閉盘で前日の低点を破ると,システムは空き信号を発信します.
  2. 取引頻度制御:戦略は,各方向に1日1回しか取引が実行されないようにするために,標識位 (((フラグ) を採用する.この設計は,同じ価格領域で繰り返し取引を避けるため,取引コストを削減する.
  3. リスク管理: 取引ごとに固定された50ポイントのストップ・ストラストが設定され,この対称的なリスク管理方式は,単一取引のリスクを効果的に制御します.
  4. 日中のリセットメカニズム:取引開始時に,新しい取引日に準備するために,システムは取引マークをリセットします. このメカニズムは,戦略が新しい取引機会を捉えることを保証します.

戦略的優位性

  1. 取引論理の明晰さ:戦略は単純な価格突破理論に基づいている.取引規則は明確で,理解し実行しやすい.
  2. 厳格なリスク管理: 固定的ストップ・ストップ・ストップ・ポイント数と一方向取引制限により,各取引のリスクを効果的に管理する.
  3. 過剰取引を避ける:各方向で1日1回の取引のみを許可し,波動的な市場での頻繁に取引による損失を避ける.
  4. 高度な自動化:戦略は完全に自動化され,人間の介入を必要としません.
  5. 適応性: 戦略は異なる市場環境に適用され,特にトレンドが顕著な市場ではよりよいパフォーマンスを発揮します.

リスク分析

  1. 偽突破リスク: 市場が偽突破を起こし,取引損失を招く可能性があります. 他の技術指標と組み合わせて確認することをお勧めします.
  2. 振動市場リスク:横盤振動市場では,頻繁な突破と下落が連続的なストロスを引き起こす可能性があります.フィルタリング条件を追加することで改善できます.
  3. 固定ストップリスク: 固定ストップポイントは,すべての市場環境には適さない場合があり,波動性の高い市場では早めにストップする可能性があります.
  4. スライドポイントリスク:市場の波動が激しくなる場合,スライドポイントが実際のストップポイントの予想から離れる可能性があります.

最適化の方向

  1. ダイナミックストップ・ロスの設定:市場の変動率 (ATR指数など) に基づいて動的にストップ・ロスのポイントを調整できます.
  2. トレンドフィルタを追加: トレンド指標 ((移動平均またはADXのような) と組み合わせて,取引信号をフィルタリングする.
  3. 突破確認の最適化: 取引量確認または突破の信頼性を高める他の技術指標を追加できます.
  4. タイムフィルター: タイムフィルター条件を追加して,波動が大きい時期に取引を避ける.
  5. ポジション管理の最適化:市場の変動と口座のリスク承受能力に応じてポジションサイズを動的に調整できます.

要約する

この戦略は,日線区間突破に基づく古典的な取引システムであり,厳格な取引管理とリスク管理により,市場の一方向的な傾向の状況を追跡するのに適しています.いくつかの固有のリスクがあるものの,合理的な最適化と改善によって,戦略の安定性と収益性を向上させることができます.戦略の成功の鍵は,偽突破リスクを正しく処理し,合理的にストップロスを設定し,異なる市場環境で戦略の適応性を維持することです.

ストラテジーソースコード
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-09 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("US 30 Daily Breakout Strategy (Single Trade Per Breakout/Breakdown, New York Time)", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, trim_orders = true)

// Set pip size for US 30 (1 pip = 1 point)
var float pip = 1.0

// Set take profit and stop loss in points (1 pip = 1 point)
take_profit_pips = 50
stop_loss_pips = 50

// Calculate the previous day's high and low (assumes chart timezone is set to New York)
prevDayHigh = request.security(syminfo.tickerid, "D", high[1])
prevDayLow = request.security(syminfo.tickerid, "D", low[1])

// Initialize flags to track if a breakout/breakdown trade has been taken
var bool breakout_traded = false
var bool breakdown_traded = false

// Reset flags at the start of a new day in New York timezone (as per chart setting)
if (ta.change(time("D")))
    breakout_traded := false
    breakdown_traded := false

// Condition for a long entry: candle closes above the previous day's high and no breakout trade has been taken
longCondition = close > prevDayHigh and strategy.opentrades == 0 and not breakout_traded

// Condition for a short entry: candle closes below the previous day's low and no breakdown trade has been taken
shortCondition = close < prevDayLow and strategy.opentrades == 0 and not breakdown_traded

// Execute long trade if the condition is met, and set the breakout flag
if (longCondition)
    strategy.entry("Long", strategy.long)
    strategy.exit("Take Profit/Stop Loss", "Long", limit=close + take_profit_pips * pip, stop=close - stop_loss_pips * pip)
    breakout_traded := true  // Set breakout flag

// Execute short trade if the condition is met, and set the breakdown flag
if (shortCondition)
    strategy.entry("Short", strategy.short)
    strategy.exit("Take Profit/Stop Loss", "Short", limit=close - take_profit_pips * pip, stop=close + stop_loss_pips * pip)
    breakdown_traded := true  // Set breakdown flag

// Plotting the previous day's high and low for visualization
plot(prevDayHigh, color=color.green, linewidth=1, title="Previous Day High")
plot(prevDayLow, color=color.red, linewidth=1, title="Previous Day Low")