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

ダイナミック・サポート・レジスタンス 価格・アクション・トレーディング・システム

作者: リン・ハーンチャオチャン開催日:2024年4月12日15時19分
タグ:SRパンチ

img

概要

この戦略は,価格アクションと動的サポート/レジスタンスレベルに基づいた取引システムで,特定のキャンドルスタイルのパターンが出現するときに主要な価格レベルに近い取引を実行する.このシステムは,14期動的サポート/レジスタンス計算方法を使用し,潜在的な市場逆転を把握するために4つのクラシック逆転キャンドルスタイルのパターン - ハンマー,ショティングスター,ドジ,ピンバーと組み合わせます.この戦略はリスク管理のために固定パーセントの利益とストップロスのレベルを使用し,エントリー信号の厳格性を制御するために敏感性パラメータを使用します.

戦略の原則

この戦略の核心は,価格動きの境界を確立するために,サポートとレジスタンスレベルを動的に計算することにある.価格がこれらのキーレベルに近づくと,システムは反転信号として特定のキャンドルスタイクパターンを探す.エントリー条件はサポート/レジスタンスレベルの1.8% (デフォルト感度) 内のパターン形成を必要とする.システムは16%ストップ損失と9.5%テイク・プロフィートで35%の株式管理ルールを実装し,取引総資本の約5.6%でリスクを効果的に制御する.この戦略は,完全な取引管理機能と視覚化でパインスクリプトで実装されている.

戦略 の 利点

  1. 技術分析の最も信頼性の高い2つの要素を組み合わせます:価格パターンとサポート/レジスタンス,信号の信頼性を高める
  2. 動的に計算されたサポート/レジスタンスレベルを使用して,変化する市場状況に適応します
  3. 資金管理とリスク管理の厳格な措置を実施し,重大な引き上げを防止する
  4. 調整可能なパラメータを備えた明確な戦略論理により,異なる市場条件の最適化が容易になります
  5. 自動取引に適した主観的な判断のない明確なエントリー信号

戦略リスク

  1. サポート/レジスタンス効果は,非常に不安定な市場で低下する可能性があります.
  2. 比較的広いストップ・ロスト (16%) は,不安定な状況で重大な損失をもたらす可能性があります.
  3. センシビリティパラメータの設定は,取引の頻度と精度に影響を及ぼす
  4. 価格パターンだけに頼るということは,他の重要な市場信号を見逃す可能性があります.
  5. 戦略収益に対する取引コストの影響を考慮する必要性

オプティマイゼーションの方向性

  1. 信号の信頼性を向上させるための確認指標としてボリュムの導入
  2. 市場変動に基づいて動的に調整する適応感度パラメータを開発する
  3. ストップ・ロスの設定を最適化し,トライリング・ストップや段階的なストップ・ロスの計画を導入することを検討する
  4. 強いトレンド中に逆転取引を避けるためにトレンドフィルターを追加する
  5. 市場状況に基づいて取引規模を調整する動的ポジションサイズシステムを開発する

概要

この価格アクションベースの取引戦略は,ダイナミックなサポート/レジスタンスレベルとクラシックな逆転パターンを組み合わせることで,トレーダーに体系的な取引アプローチを提供します.この戦略の強みは,明確な論理と制御可能なリスクにあります.しかし,実際の取引結果に基づく継続的な最適化は必要です.トレーダーはライブ取引の前に徹底的なバックテストとパラメータ最適化を行い,市場経験に基づいて戦略をカスタマイズすることをお勧めします.


/*backtest
start: 2024-11-26 00:00:00
end: 2024-12-03 00:00:00
period: 1h
basePeriod: 1h
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/
// © felipemiransan

//@version=5
strategy("Price Action Strategy", overlay=true)

// Settings
length = input.int(16, title="Support and Resistance Length")
sensitivity = input.float(0.018, title="Sensitivity")

// Stop Loss and Take Profit
stop_loss_pct = input.float(16, title="Stop Loss percentage", minval=0.1) / 100
take_profit_pct = input.float(9.5, title="Take Profit percentage", minval=0.1) / 100

// Function to identify a Hammer
isHammer() =>
    body = close - open
    price_range = high - low
    lower_shadow = open - low
    upper_shadow = high - close
    body > 0 and lower_shadow > body * 2 and upper_shadow < body * 0.5 and price_range > 0

// Function to identify a Shooting Star
isShootingStar() =>
    body = open - close
    price_range = high - low
    lower_shadow = close - low
    upper_shadow = high - open
    body > 0 and upper_shadow > body * 2 and lower_shadow < body * 0.5 and price_range > 0

// Function to identify a Doji
isDoji() =>
    body = close - open
    price_range = high - low
    math.abs(body) < (price_range * 0.1)  // Doji has a small body

// Function to identify a Pin Bar
isPinBar() =>
    body = close - open
    price_range = high - low
    lower_shadow = open - low
    upper_shadow = high - close
    (upper_shadow > body * 2 and lower_shadow < body * 0.5) or (lower_shadow > body * 2 and upper_shadow < body * 0.5)

// Support and resistance levels 
support = ta.lowest(low, length)
resistance = ta.highest(high, length)

// Entry criteria
long_condition = (isHammer() or isDoji() or isPinBar()) and close <= support * (1 + sensitivity)
short_condition = (isShootingStar() or isDoji() or isPinBar()) and close >= resistance * (1 - sensitivity)

// Function to calculate stop loss and take profit (long)
calculate_levels(position_size, avg_price, stop_loss_pct, take_profit_pct) =>
    stop_loss_level = avg_price * (1 - stop_loss_pct)
    take_profit_level = avg_price * (1 + take_profit_pct)
    [stop_loss_level, take_profit_level]

// Function to calculate stop loss and take profit (short)
calculate_levels_short(position_size, avg_price, stop_loss_pct, take_profit_pct) =>
    stop_loss_level = avg_price * (1 + stop_loss_pct)
    take_profit_level = avg_price * (1 - take_profit_pct)
    [stop_loss_level, take_profit_level]

// Buy entry order with label
if (long_condition and strategy.opentrades == 0)
    strategy.entry("Buy", strategy.long)
    pattern = isHammer() ? "Hammer" : isDoji() ? "Doji" : isPinBar() ? "Pin Bar" : ""
    label.new(x=bar_index, y=low, text=pattern, color=color.green, textcolor=color.black, size=size.small)

// Sell entry order with label
if (short_condition and strategy.opentrades == 0)
    strategy.entry("Sell", strategy.short)
    pattern = isShootingStar() ? "Shooting Star" : isDoji() ? "Doji" : isPinBar() ? "Pin Bar" : ""
    label.new(x=bar_index, y=high, text=pattern, color=color.red, textcolor=color.black, size=size.small)

// Stop Loss and Take Profit management for open positions
if (strategy.opentrades > 0)
    if (strategy.position_size > 0)  // Long position
        avg_price_long = strategy.position_avg_price  // Average price of long position
        [long_stop_level, long_take_profit_level] = calculate_levels(strategy.position_size, avg_price_long, stop_loss_pct, take_profit_pct)
        strategy.exit("Exit Long", from_entry="Buy", stop=long_stop_level, limit=long_take_profit_level)
    if (strategy.position_size < 0)  // Short position
        avg_price_short = strategy.position_avg_price  // Average price of short position
        [short_stop_level, short_take_profit_level] = calculate_levels_short(strategy.position_size, avg_price_short, stop_loss_pct, take_profit_pct)
        strategy.exit("Exit Short", from_entry="Sell", stop=short_stop_level, limit=short_take_profit_level)

// Visualization of Support and Resistance Levels
plot(support, title="Support", color=color.green, linewidth=2)
plot(resistance, title="Resistance", color=color.red, linewidth=2)






関連性

もっと