スケーラブルなブレイクアウト取引戦略


作成日: 2023-10-30 17:25:17 最終変更日: 2023-10-30 17:25:17
コピー: 0 クリック数: 630
1
フォロー
1617
フォロワー

スケーラブルなブレイクアウト取引戦略

概要

拡張可能ブレイクストラテジーは,価格の重要なサポート・レジスタンス領域を識別し,価格がこれらの領域を突破すると取引シグナルを生成することで,非常に柔軟で拡張可能なブレイクストラテジックである.このストラテジーは,パラメータを調整して異なる時間周期に適用でき,また,様々な追加のフィルタリング条件とリスク管理機構を簡単に統合して,特定の資産に最適化することができます.

戦略原則

この戦略はswings()この関数は,見直し期に基づいて現在の価格の波動高点と波動低点を計算します.swingLookbackパラメータ設定,20 K 線をデフォルトにします. その後,価格が波動の高点を破るとき,多めにします.価格が波動の低点を破るとき,空いてください.

多信号の具体的な論理は,閉盘価格が波動高値に等しい時より大きい時,多を行うことである. 短縮信号の具体的な論理は,閉盘価格が波動低値に等しい時より小さい時,短縮することである.

この戦略は,この2つの要素を考慮して,stopTargetPercentストップ・ロスの幅を設定するパラメータ.例えば,多額のストップ・ロスは最高価格の5%以下に設定し,空白のストップ・ロスは最低価格の5%以上に設定する.

この戦略の優点は,回転期を調整することで取引頻度を制御できるという点にある.回転期が短いほど,突破に敏感になり,取引頻度は高くなる.回転期が長すぎると,取引頻度は低下するが,チャンスを逃す可能性がある.したがって,最適の回転期を見つけるのは,戦略の最適化にとって重要である.

戦略的優位性

  • シンプルで理解しやすい突破口
  • 回顧期最適化パラメータを調整して取引頻度を制御できます.
  • ストップ・ロズ,移動・ストップなどのリスク管理メカニズムを簡単に統合できる
  • 拡張性があり,様々なフィルタリング条件を追加して収益率を上げることができます.
  • 任意の時間周期で適用され,日内および長線取引に適しています.

リスクと対策

  • 逆転期間の設定が短すぎると,過剰な取引が起こりうる.
  • 長期にわたる回顧は,取引の機会を逃す可能性があります.
  • ストップ・ロスの設定が幅が大きすぎると,利益の余地が狭くなる
  • ストップが狭すぎると,ストップが頻繁にトリガーされる可能性があります.

対策として

  • 異なるレビュー期間をテストし,最適のパラメータの組み合わせを見つけます.
  • ストップ・ロスの幅を最適化し,利得の余地とリスク管理をバランスさせる
  • 移動ストップまたは環状ストップを追加して利益をロックできます.
  • フィルタリング条件を高め,取引の確率を高めます.

最適化の方向

この戦略は以下の点で最適化できます.

  1. 異なる回顧期パラメータをテストし,最適なパラメータの組み合わせを見つけます.

  2. 5分,15分,1時間など,異なる取引周期をテストし,最適な周期を選択します.

  3. 利回りの余地とリスク管理のバランスをとる.

  4. 取引量フィルター,値下がりフィルターなどのフィルタリング条件を追加し,低品質の信号を減らす.

  5. リスク管理の仕組みの統合,例えば,移動の停止,利潤のロックなど.

  6. パラメータ最適化,ステップアップ最適化,ランダム検索などで最適のパラメータを見つけます.

  7. 機械学習技術を統合し,AIを使用してパラメータを自動的に最適化します.

要約する

拡張可能な突破取引戦略は,非常に実用的な突破システムである.それは,使いやすく,カスタマイズ可能であり,回顧期を調整し,さまざまなフィルタリング条件を統合することで,異なる資産に最適化することができる.同時に,取引リスクを制御するために,様々なリスク管理機構を簡単に統合することができる.パラメータ最適化や機械学習などの技術の導入により,この戦略は,市場の変化に適応するために,常に向上することができる.全体的に,これは推奨される汎用突破戦略である.

ストラテジーソースコード
/*backtest
start: 2023-09-29 00:00:00
end: 2023-10-29 00:00:00
period: 1h
basePeriod: 15m
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/
// © deperp

//@version=5
// strategy("Range Breaker", overlay=true, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, commission_type=strategy.commission.percent, commission_value=0.07, pyramiding=0)

// Backtest Time Period

useDateFilter = input.bool(true, title="Begin Backtest at Start Date",
     group="Backtest Time Period")
backtestStartDate = input(timestamp("1 Jan 2020"), 
     title="Start Date", group="Backtest Time Period",
     tooltip="This start date is in the time zone of the exchange " + 
     "where the chart's instrument trades. It doesn't use the time " + 
     "zone of the chart or of your computer.")

inTradeWindow = true

swingLookback = input.int(20, title="Swing Lookback", minval=3)
stopTargetPercent = input.float(5, title="Stop Target Percentage", step=0.1)

// Calculate lockback swings
swings(len) =>
    var highIndex = bar_index
    var lowIndex = bar_index
    var swingHigh = float(na)
    var swingLow = float(na)
    
    upper = ta.highest(len)
    lower = ta.lowest(len)
    
    if high[len] > upper
        highIndex := bar_index[len]
        swingHigh := high[len]

    if low[len] < lower
        lowIndex := bar_index[len]
        swingLow := low[len]

    [swingHigh, swingLow, highIndex, lowIndex]


// Strategy logic
[swingHigh, swingLow, highIndex, lowIndex] = swings(swingLookback)
longCondition = inTradeWindow and (ta.crossover(close, swingHigh))
shortCondition = inTradeWindow and (ta.crossunder(close, swingLow))

if longCondition
    strategy.entry("Long", strategy.long)
if shortCondition
    strategy.entry("Short", strategy.short)

longStopTarget = close * (1 + stopTargetPercent / 100)
shortStopTarget = close * (1 - stopTargetPercent / 100)

strategy.exit("Long Stop Target", "Long", limit=longStopTarget)
strategy.exit("Short Stop Target", "Short", limit=shortStopTarget)

// Plot break lines
// line.new(x1=highIndex, y1=swingHigh, x2=bar_index, y2=swingHigh, color=color.rgb(255, 82, 82, 48), width=3, xloc=xloc.bar_index, extend=extend.right)
// line.new(x1=lowIndex, y1=swingLow, x2=bar_index, y2=swingLow, color=color.rgb(76, 175, 79, 47), width=3, xloc=xloc.bar_index, extend=extend.right)


// Alert conditions for entry and exit
longEntryCondition = inTradeWindow and (ta.crossover(close, swingHigh))
shortEntryCondition = inTradeWindow and (ta.crossunder(close, swingLow))

longExitCondition = close >= longStopTarget
shortExitCondition = close <= shortStopTarget

alertcondition(longEntryCondition, title="Long Entry Alert", message="Enter Long Position")
alertcondition(shortEntryCondition, title="Short Entry Alert", message="Enter Short Position")
alertcondition(longExitCondition, title="Long Exit Alert", message="Exit Long Position")
alertcondition(shortExitCondition, title="Short Exit Alert", message="Exit Short Position")