バリューブレイクアウト・トレーリングストップロス戦略:局所的極値に基づく自動取引ロボット

TP SL TSL BTC 局部极值 追踪止损 挂单交易 时间过滤 价格突破
作成日: 2025-04-07 13:52:57 最終変更日: 2025-04-07 13:52:57
コピー: 0 クリック数: 413
2
フォロー
319
フォロワー

バリューブレイクアウト・トレーリングストップロス戦略:局所的極値に基づく自動取引ロボット バリューブレイクアウト・トレーリングストップロス戦略:局所的極値に基づく自動取引ロボット

概要

値突破追跡ストップ戦略は,デジタル資産取引を専用に設計された定量取引システムで,局所価格の極値位置に掛札を配置して市場突破の動きを捕捉する.この戦略は,預定利益レベルに達した時点で,保護メカニズムを起動し,利益をロックするストップトラッキングメカニズムも実現している.この方法は,価格突破取引とリスク管理の優位性を組み合わせて,トレーダーに自動化された取引ソリューションを提供します.

戦略原則

この戦略は,価格行動とダイナミックリスク管理の原則に基づいており,その核心的な論理は以下のいくつかの重要な部分に分けられます.

  1. 局所的極限認識策略は,定義された時間窓 (((BarsNパラメータ) を使って局所的な高点と低点を,潜在的突破点の位として計算する.具体的には,局所的な最高値と最低値を決定するために (((BarsN * 2 + 1) のK線を使用する.

  2. リスト設定

    • 買い停止 (BuyStop):現在の価格が局所高点より低い時,注文距離をバッファージゾーンから引いたとき,局所高点の位置に買い停止を設定する.
    • 販売停止 (SellStop):現在の価格が局所低点より高く,注文距離がバッファージゾーンから離れているとき,局所低点の位置で販売停止を設定する.
  3. タイムフィルター: 戦略は,トレーダーが取引時間を設定し,指定された時間帯でのみ取引することを可能にします.これは,望ましくない取引の時間帯を回避するのに役立ちます.

  4. 利回りの計算

    • ストップポイント (TP):現在の価格の一定パーセント (TPasPctBTC) で計算する.
    • ストップポイント (SL):現在の価格の一定パーセント (SLasPctBTC) で計算する.
    • オーダー距離の緩衝区:オーダーの早発を防ぐために,止まり点の半分まで設定する.
  5. ストップ・ロスの追跡

    • トリガーポイント (TriggerPoints): 利益がこのレベルに達すると,トラッキングストロップが有効になります.
    • トラッキング距離 ((TslPoints): トラッキングストップと現在の価格の間の距離.
    • マルチヘッドのポジションでは,利益がトリガーポイントを超えたとき,現在の価格で追尾距離を引いたストップ・ロスの価格として用いられる.
    • 空頭ポジションでは,利益がトリガーポイントを超えると,現在の価格と追跡距離をストップ・ロスの価格として使う.

戦略的優位性

この戦略は,コードを深く分析した結果,以下のような顕著な利点が示されています.

  1. 突破口の動きを自動で捉える戦略は,市場を手動で監視することなく,価格突破の動きを自動的に捉えることができる.

  2. ダイナミックなリスク管理: 現在の価格のパーセントに基づくストップ・ストラスト設定を採用し,リスク管理をより柔軟に,異なる価格レベルに適応させる.

  3. 利益保護機構: ストップ・ロスを追跡することで,戦略は,利得を有効に固定し,撤収を減らすことができます.

  4. タイムフィルター機能市場特性を考慮して最適な取引時間を選択し,波動が低いまたは予測不能な時間帯での取引を避けるようにします.

  5. 適応性が高い: 戦略パラメータは,局所極限値の計算ウィンドウ,ストップ・ストップ・損失比率などの調整など,市場条件に応じて調整され,異なる市場環境に適応することができます.

  6. 厳格に罰せられる自動化策として,感情が取引決定に影響を及ぼさないようにし,既定のルールに従って取引を厳格に実行する.

戦略リスク

この戦略には多くの利点があるものの,いくつかの潜在的なリスクと限界があります.

  1. 偽の突破の危険性: 市場には偽ブレイクが発生し,戦略が望ましくない取引に入ることを引き起こす可能性があります. 解決方法は,偽ブレイクを誘発する確率を減らすために,確認指標を増やしたり,注文距離をバッファローズサイズに調整したりすることです.

  2. パラメータ感度策略性能は,BarsN,TPasPctBTC,SLasPctBTCなどのパラメータ設定に高度に依存している.不適切なパラメータは,不良なパフォーマンスを引き起こす可能性がある.反省によって最適なパラメータ組み合わせを見つけるのが推奨されている.

  3. 資金管理が不完全である: RiskPercentのパラメータはコードで定義されているが,ポジションサイズ計算に実際に適用されていない.これはリスク管理の不完全さにつながる可能性がある.

  4. 極端な状況への対応は限られているリスク管理: 市場の波動性や極端な状況下では,局所的な極限突破と固定パーセントのストップダウンは,単にリスクを効果的に管理するのに不十分である.

  5. スライドポイントと実行遅延:実際の取引では,注文の実行が滑り落ちたり遅れたりして,戦略の性能に影響を与える可能性があります.

  6. 単一市場への依存: 策略は特定の資産のために設計され,他の市場の特徴が異なる資産には適用されない可能性があります.

戦略最適化の方向性

この戦略は,以下の方向で最適化できます.

  1. ダイナミックなポジション管理:RiskPercentパラメータに基づくダイナミックなポジションサイズ計算を実現し,口座規模と現在の市場リスクに応じてポジションサイズを調整し,より精密なリスク制御を実現する.

  2. 複数の認証メカニズム: 取引量突破,動力指数またはトレンド指数などの突破確認として追加の技術指標を導入し,偽突破取引を減らす.

  3. 適応パラメータ: 市場の変動や他の市場の特徴に基づいて自動的に調整されるパラメータを導入し,異なる市場環境に戦略をより良く適応させることができる.

  4. を止める戦略: 区切りストップメカニズムを実現し,一部のポジションを異なる利益レベルで退出させ,利益の一部をロックし,より大きな利益空間を保持することができる.

  5. 市場状況のフィルター市場状況 (トレンド,振動など) を判断し,異なる市場状況に応じて戦略パラメータを調整するか,取引を停止する.

  6. ストップ・ロスト・最適化動的ストップをATRまたは他の波動性指標に基づいて実現し,ストップを合理的にします.

  7. 回測と最適化の枠組みより包括的な反省の枠組みを開発し,異なる期間,異なるパラメータでの戦略の評価を行い,最適なパラメータの組み合わせを探します.

要約する

値突破追跡ストップ戦略は,局所的な極値突破を捕捉し,ストップ追跡を適用することによってリスクを管理するための巧妙に設計された自動取引システムである.その核心的な優点は,自動実行,ダイナミックなリスク管理,利潤保護機構であり,潜在的に有効な取引ツールである.

しかし,戦略の有効性は,パラメータの設定と市場条件に大きく依存しています.ダイナミックなポジション管理,複数の確認機構,自己適応パラメータなどの推奨された最適化措置を実施することで,戦略の強性と適応性を大幅に向上させることができます.

トレーダーは,現行の市場環境に最も適したパラメータの組み合わせを見つけ,取引シグナルを確認するために他の分析ツールと組み合わせることを検討し,実況前に十分な反射を行うことをお勧めします. 同時に,戦略のパフォーマンスを継続的に監視し,評価し,市場の変化に応じてパラメータをタイムリーに調整し,戦略の有効性を維持します.

ストラテジーソースコード
/*backtest
start: 2025-01-01 00:00:00
end: 2025-04-06 00:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("BTC Trading Robot", overlay=true, pyramiding=1, initial_capital=100000)

//============== Input Groups ==============//
// Trading Profile
group_trading = "BTC"
systemType = input.int(1, title="Trading System (1:BTC)", group=group_trading)

// Common Trading Inputs
group_common = "Trading Inputs"
RiskPercent   = input.float(4.0, title="Risk as % of trading capital", group=group_common)
TradeComment  = input.string("BTC trading robot", title="Trade Comment", group=group_common)
SHInput       = input.int(0, title="Start Hour (0 = no filter)", group=group_common)
EHInput       = input.int(0, title="End Hour (0 = no filter)", group=group_common)

// Gold Related Inputs
group_BTC = "BTC Related Input"
TPasPctBTC         = input.float(0.2, title="TP as % of Price", group=group_BTC)
SLasPctBTC         = input.float(0.1, title="SL as % of Price", group=group_BTC)
TSLasPctofTPBTC   = input.float(5.0, title="Trail SL as % of TP", group=group_BTC)
TSLTgrasPctofTPBTC = input.float(7.0, title="Trail Tgra  SL as % of TP", group=group_BTC)

// Other parameters
BarsN = 5
OrderDistPoints = 100.0

//============== Calculate Trade Parameters ==============//
var float Tppoints = 0.0
var float Slpoints = 0.0
var float TslTriggerPoints = 0.0
var float TslPoints = 0.0

price = close

// Adjust parameters based on system type (using 1 for Gold)
if systemType == 1
    Tppoints := price * TPasPctBTC
    Slpoints := price * SLasPctBTC
    OrderDistPoints := Tppoints / 2.0
    TslPoints := Tppoints * TSLTgrasPctofTPBTC / 100.0
    TslTriggerPoints := Tppoints * TSLTgrasPctofTPBTC / 100.0

//============== Time Filter ==============//
currentHour = hour(time)
inSession = true
if SHInput != 0 and currentHour < SHInput
    inSession := false
if EHInput != 0 and currentHour >= EHInput
    inSession := false

//============== Find Local High and Low ==============//
localHigh = ta.highest(high, BarsN * 2 + 1)
localLow  = ta.lowest(low,  BarsN * 2 + 1)

//============== Entry Orders ==============//
if inSession and strategy.position_size == 0
    // For a BuyStop order: only submit if current price is less than the desired entry level minus a buffer.
    if price < localHigh - OrderDistPoints * syminfo.mintick
        strategy.order("BuyStop", strategy.long, stop=localHigh, comment="BuyStop")
    // For a SellStop order: only submit if current price is greater than the desired entry level plus a buffer.
    if price > localLow + OrderDistPoints * syminfo.mintick
        strategy.order("SellStop", strategy.short, stop=localLow, comment="SellStop")
    
//============== Trailing Stop Logic ==============//
if strategy.position_size > 0  // Long positions
    longProfit = price - strategy.position_avg_price
    if longProfit > TslTriggerPoints * syminfo.mintick
        strategy.exit("Long Exit", from_entry="BuyStop", stop=price - TslPoints * syminfo.mintick, limit=strategy.position_avg_price + Tppoints * syminfo.mintick)
        
if strategy.position_size < 0  // Short positions
    shortProfit = strategy.position_avg_price - price
    if shortProfit > TslTriggerPoints * syminfo.mintick
        strategy.exit("Short Exit", from_entry="SellStop", stop=price + TslPoints * syminfo.mintick, limit=strategy.position_avg_price - Tppoints * syminfo.mintick)