資源の読み込みに... 荷物...

ダブル・スーパートレンド・マルチステップ・トラッキング・テイク・プロフィート戦略

作者: リン・ハーンチャオチャン開催日:2024年6月21日 14:36:35
タグ:ATRSTTP

img

概要

この戦略は,2つのスーパートレンド指標に基づいたマルチステップトレーリング・テイク・プロフィート戦略である.この戦略は,異なるパラメータを持つ2つのスーパートレンド指標を使用して,市場のトレンドを決定し,それに応じてロングまたはショートトレードを実行する.戦略の核心は,複数のステップトレーリング・テイク・プロフィートメカニズムにあります.このメカニズムでは,利益を徐々にロックするために複数の利益目標を設定し,より大きな市場の動きを把握するためにポジションの一部を開くことを目的としています.このアプローチは,利益の可能性を最大化しながらリスクを減らすことを目的としています.

戦略の原則

  1. ダブル・スーパートレンド・インディケーター:この戦略は,トレンドを特定するために異なるパラメータ設定を持つ2つのスーパートレンド・インディケーターを使用する.両方の指標が上昇傾向を示すとき,長い信号が起動し,両方の指標が下落傾向を示すとき,短い信号が起動する.この二重確認メカニズムは誤った信号を効果的に減らす.

  2. マルチステップ・トライリング・テイク・プロフィート:この戦略は4つの調整可能なテイク・プロフィート目標を設定する.各ターゲットは対応する利益率とポジション閉じる比率を有する.例えば,最初のターゲットは6%の利益でポジションの12%を閉じる可能性がある.第2は12%の利益で8%を閉じる可能性がある.このメカニズムは,継続的な市場の動きから利益を得るためにポジションの一部を開放しながら,徐々に利益をロックすることを可能にする.

  3. 柔軟な取引方向:ユーザーは,異なる市場環境と取引好みに適応して,ロングのみ,ショートのみ,または両方の方向で取引を選択することができます.

  4. ダイナミックストップ・ロース:コードには明示的なストップ・ロース設定がないが,スーパートレンド指標が逆転すると戦略は自動的にポジションを閉じて,効果的にダイナミックストップ・ロースとして動作する.

戦略 の 利点

  1. リスク管理の最適化:多段階の後継利益引き取りメカニズムは,戦略のリスク・リターン比を大幅に改善します. 利益を徐々に固定することで,戦略は上向きの可能性を維持しながら引き下げリスクを軽減することができます.

  2. 偽信号の減少: 双重スーパートレンド指標の使用により,偽信号の影響が大幅に減少し,取引の正確性と信頼性が向上します.

  3. 高度な適応性: 戦略は,ユーザーの好みや市場状況に基づいて取引方向と利益のパラメータを柔軟に調整することができ,さまざまな取引手段とタイムフレームに適しています.

  4. 高度な自動化: 戦略は,エントリーから利益を得ること,退出まで完全に自動化され,感情や運用エラーの影響は最小限に抑えられます.

  5. 柔軟な資本管理: 戦略は,異なるテイク・プロフィート比率を設定することで,柔軟な資本管理を実現し,市場の動向から利益を得続けるために残ったポジションを可能にする一方,迅速な部分的な利益の実現を保証します.

戦略リスク

  1. パラメータ敏感性: 戦略のパフォーマンスは,スーパートレンド指標の設定と,利益を得るパラメータに大きく依存します.不適切なパラメータは,過剰取引または重要な機会を逃す可能性があります.

  2. トレンド依存性: トレンドをフォローする戦略として,不安定な市場で頻繁に出入りし,不必要な取引コストを引き起こす可能性があります.

  3. スリップリスク: 急速に動いている市場では,多段階のテイク・プロフィートの実行がスリップによって影響され,実際の実行価格が期待値から逸脱することがあります.

  4. 過剰最適化リスク: 複数の調整可能なパラメータがあるため,戦略は過剰最適化になりやすいため,バックテスト結果とライブ取引パフォーマンスとの間に大きな差が生じる可能性があります.

戦略の最適化方向

  1. 波動性フィルタリングを導入する: 波動性の低い期間に取引頻度を減らすために,ATRやその他の波動性指標を組み込むことを検討し,異なる市場状況に適応する戦略を向上させる.

  2. ダイナミックパラメータ調整: 適応アルゴリズムを使用して,スーパートレンドパラメータと収益目標をダイナミックに調整し,市場の変化により良く適応することを探求します.

  3. ストップ・ロスのメカニズムを強化する: スーパートレンドの逆転はストップ・ロスの機能を提供しているが,リスク管理を改善するために,トライリング・ストップなどのより柔軟なストップ・ロスのメカニズムを追加することを検討する.

  4. 追加的な技術指標を統合する:マルチインジケーターの融合を通じてエントリーと出口の精度を向上させるために,RSIやMACDなどの他の技術指標を組み込むことを検討する.

  5. 資本管理の最適化: リスクと報酬のバランスをより良くするために,口座パフォーマンスに基づいてポジションサイズを動的に調整するなど,より洗練された資本管理戦略を探求する.

  6. バックテストの最適化: 戦略の最適な応用シナリオとパラメータ設定を特定するために,異なる時間枠と市場条件におけるパフォーマンス分析を含むより包括的なバックテストを実施します.

結論

この多段階のトレーリング・テイク・プロフィート戦略は,デュアル・スーパートレンド指標に基づい,柔軟な多段階の収益メカニズムを通じてリスクと報酬のバランスを達成する.この戦略の主な利点は,優れたリスク管理能力とトレンドへの敏感性にある.しかし,ユーザーはそれを適用する際にパラメータ設定と市場環境への影響に注意を払う必要があります.さらなる最適化と精製を通じて,この戦略は堅牢で信頼性の高い自動取引システムになる可能性があります.実用的な応用では,トレーダーは徹底的なバックテストと紙取引を行い,特定の取引機器と市場状況に基づいて適切なパラメータ調整を行うことが推奨されます.


/*backtest
start: 2024-05-21 00:00:00
end: 2024-06-20 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Strategic Multi-Step Supertrend Trader - Strategy [presentTrading]", overlay=true )

// this strategy utilizes a double Supertrend indicator to determine entry and exit conditions for both long and short trades, with user-configurable take profit levels and trade direction settings. 
// The strategy dynamically updates highest and lowest prices during trades and exits positions based on multi-step profit targets or opposing Supertrend signals.


// User inputs for take profit settings
// Grouping Take Profit settings
useTakeProfit = input.bool(true, title="Use Take Profit", group="Take Profit Settings")
takeProfitPercent1 = input.float(6.0, title="Take Profit % Step 1", group="Take Profit Settings")
takeProfitPercent2 = input.float(12.0, title="Take Profit % Step 2", group="Take Profit Settings")
takeProfitPercent3 = input.float(18.0, title="Take Profit % Step 3", group="Take Profit Settings")
takeProfitPercent4 = input.float(50.0, title="Take Profit % Step 4", group="Take Profit Settings")

takeProfitAmount1 = input.float(12, title="Take Profit Amount % Step 1", group="Take Profit Settings")
takeProfitAmount2 = input.float(8, title="Take Profit Amount % Step 2", group="Take Profit Settings")
takeProfitAmount3 = input.float(4, title="Take Profit Amount % Step 3", group="Take Profit Settings")
takeProfitAmount4 = input.float(0, title="Take Profit Amount % Step 4", group="Take Profit Settings")

numberOfSteps = input.int(3, title="Number of Take Profit Steps", minval=1, maxval=4, group="Take Profit Settings")

// Grouping Trade Direction
tradeDirection = input.string("Both", title="Trade Direction", options=["Long", "Short", "Both"], group="Trade Direction")

// Grouping Supertrend settings
atrPeriod1 = input(10, title="ATR Length for Supertrend 1", group="Supertrend Settings")
factor1 = input.float(3.0, title="Factor for Supertrend 1", step=0.01, group="Supertrend Settings")

atrPeriod2 = input(5, title="ATR Length for Supertrend 2", group="Supertrend Settings")
factor2 = input.float(4.0, title="Factor for Supertrend 2", step=0.01, group="Supertrend Settings")


// Function to calculate Supertrend
supertrend(factor, atrPeriod) =>
    [a, direction] = ta.supertrend(factor, atrPeriod)
    direction

// Calculate Double Supertrend
supertrend1 = supertrend(factor1, atrPeriod1)
supertrend2 = supertrend(factor2, atrPeriod2)

// Entry conditions
longCondition = (supertrend1 < 0 and supertrend2 < 0) and (tradeDirection == "Long" or tradeDirection == "Both")
shortCondition = (supertrend1 > 0 and supertrend2 > 0) and (tradeDirection == "Short" or tradeDirection == "Both")

// Exit conditions
longExitCondition = (supertrend1 > 0 and supertrend2 > 0) and (tradeDirection == "Long" or tradeDirection == "Both")
shortExitCondition = (supertrend1 < 0 and supertrend2 < 0) and (tradeDirection == "Short" or tradeDirection == "Both")

// Variables to store the highest and lowest prices during the trade
var float highestPrice = na
var float lowestPrice = na

// Get the entry price from open trades
entryPrice = strategy.opentrades.entry_price(strategy.opentrades - 1)

// Reset highestPrice or lowestPrice when entering new trades
if (longCondition and strategy.position_size <= 0)
    highestPrice := na // Reset the highest price
    strategy.entry("My Long Entry Id", strategy.long) // Enter long position
    strategy.close("My Short Entry Id", "Short Exit") // Close short position if any

if (shortCondition and strategy.position_size >= 0)
    lowestPrice := na // Reset the lowest price
    strategy.entry("My Short Entry Id", strategy.short) // Enter short position
    strategy.close("My Long Entry Id", "Long Exit") // Close long position if any

// Exit trades based on conditions
if (longExitCondition and strategy.position_size > 0)
    strategy.close("My Long Entry Id", "Long Exit") // Exit long position

if (shortExitCondition and strategy.position_size < 0)
    strategy.close("My Short Entry Id", "Short Exit") // Exit short position

if (strategy.position_size > 0)
    // Update the highest price for long positions
    highestPrice := na(highestPrice) ? high : math.max(highestPrice, high)

    // Step 1
    if (useTakeProfit and numberOfSteps >= 1)
        strategy.exit("Take Profit 1", from_entry="My Long Entry Id", qty_percent=takeProfitAmount1, limit=entryPrice * (1 + takeProfitPercent1 / 100))
    // Step 2
    if (useTakeProfit and numberOfSteps >= 2)
        strategy.exit("Take Profit 2", from_entry="My Long Entry Id", qty_percent=takeProfitAmount2, limit=entryPrice * (1 + takeProfitPercent2 / 100))
    // Step 3
    if (useTakeProfit and numberOfSteps >= 3)
        strategy.exit("Take Profit 3", from_entry="My Long Entry Id", qty_percent=takeProfitAmount3, limit=entryPrice * (1 + takeProfitPercent3 / 100))
    // Step 4
    if (useTakeProfit and numberOfSteps == 4)
        strategy.exit("Take Profit 4", from_entry="My Long Entry Id", qty_percent=takeProfitAmount4, limit=entryPrice * (1 + takeProfitPercent4 / 100))

if (strategy.position_size < 0)
    // Update the lowest price for short positions
    lowestPrice := na(lowestPrice) ? low : math.min(lowestPrice, low)

    // Step 1
    if (useTakeProfit and numberOfSteps >= 1)
        strategy.exit("Take Profit 1", from_entry="My Short Entry Id", qty_percent=takeProfitAmount1, limit=entryPrice * (1 - takeProfitPercent1 / 100))
    // Step 2
    if (useTakeProfit and numberOfSteps >= 2)
        strategy.exit("Take Profit 2", from_entry="My Short Entry Id", qty_percent=takeProfitAmount2, limit=entryPrice * (1 - takeProfitPercent2 / 100))
    // Step 3
    if (useTakeProfit and numberOfSteps >= 3)
        strategy.exit("Take Profit 3", from_entry="My Short Entry Id", qty_percent=takeProfitAmount3, limit=entryPrice * (1 - takeProfitPercent3 / 100))
    // Step 4
    if (useTakeProfit and numberOfSteps == 4)
        strategy.exit("Take Profit 4", from_entry="My Short Entry Id", qty_percent=takeProfitAmount4, limit=entryPrice * (1 - takeProfitPercent4 / 100))


関連性

もっと