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

サポート・レジスタンスレベルでの逆転パターンに基づく定量的な取引戦略

作者: リン・ハーンチャオチャン開催日:2024年6月7日 16時45分09秒
タグ:

img

概要

この戦略は,1時間チャートで取引する技術分析における逆転パターン (ハンマー,エンゲルフィング,ドジ) とサポートおよびレジスタンスレベルに基づいています.この戦略は潜在的な市場逆転点を特定し,事前に定義された利益とストップ損失レベルで取引を実行します.

この戦略の主な考え方は,支持レベルに近いところに上昇傾向の逆転パターン (ハマー,ブリーッシュ・エングルフィング,ドジなど) が出現するときにロングポジションを入力し,レジスタンスレベルに近いところに低下傾向の逆転パターン (ハマー,ベアッシュ・エングルフィング,ドジなど) が出現するときにショートポジションを入力することです. リスクを制御し,利益をロックするために取利益とストップ損失レベルが設定されています.

戦略の論理

  1. サポートレベルとレジスタンスレベルを決定する ta.lowest() と ta.highest() 関数を用いて,指定されたバックバック期間中の最低低値と最高高値を計算する.
  2. 現在のろうそくが ハンマー,飲み込みパターン,またはドジを形成しているか確認してください.
  3. サポートレベル近くで上昇傾向の逆転パターンが現れれば,ロングポジションに入手し,レジスタンスレベル近くで下落傾向の逆転パターンが現れれば,ショートポジションに入手する.
  4. 開始価格より3%高く,開始価格より1%低いストップ・ロスの価格を設定します.
  5. 価格が利得またはストップロスのレベルに達するとポジションを閉じる.

戦略 の 利点

  1. 逆転パターンと主要なサポートとレジスタンスレベルを組み合わせ,取引信号の信頼性を向上させる.
  2. 利得とストップ・ロスのレベルをクリアし リスクを効果的に制御します
  3. トレンドと変動市場の両方に適しており,潜在的逆転機会を把握しています.
  4. シンプルで分かりやすいコードで 実行が容易になります

戦略リスク

  1. 変動市場では,頻繁に反転信号が発信されれば,過剰取引や手数料損失が起こる可能性があります.
  2. サポートとレジスタンスレベルの特定は,バックバック期間の選択に依存し,異なるバックバック期間の結果が異なる可能性があります.
  3. 逆転パターンの信頼性は絶対的ではなく,誤った信号は損失を引き起こす可能性があります.

解決策:

  1. 逆転パターンのパラメータと確認条件を調整し,誤った信号を減らす.
  2. 信号の信頼性を向上させるため,他の技術指標や市場情勢指標を組み込む.
  3. 利回りやストップロスのレベルを 適正に調整し,異なる市場状況に適応する.

戦略の最適化方向

  1. 逆転パターンの有効性を確認するためのボリューム指標を導入する.高取引量の逆転パターンはより信頼性がある可能性があります.
  2. サポートとレジスタンスレベルの精度を向上するために,複数の時間枠からサポートとレジスタンスレベルを考慮します.
  3. 移動平均などのトレンド指標を組み合わせてトレンド方向に取引し,トレンドに反する取引を避ける.
  4. 市場変動に基づいて動的に調整して,より良いリスク/リターン比を達成することで,利益とストップ損失のレベルを最適化します.

概要

この戦略は,サポートとレジスタンスレベル近くの逆転パターンを特定することによって潜在的な取引機会を把握する. 簡単に使用し,異なる市場環境に適用できます. しかし,戦略の成功は逆転パターンとサポートとレジスタンスレベルを正確に特定することに依存します. 取引信号の確認条件を最適化し,他の技術指標を組み込み,動的に利益とストップ損失レベルを調整することで,戦略のパフォーマンスをさらに改善することができます.


/*backtest
start: 2024-05-07 00:00:00
end: 2024-06-06 00:00:00
period: 2h
basePeriod: 15m
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/
// © Kingcoinmilioner

//@version=5
strategy("Reversal Patterns at Support and Resistance", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Parameters
support_resistance_lookback = input.int(50, title="Support/Resistance Lookback Period")
reversal_tolerance = input.float(0.01, title="Reversal Tolerance (percent)", step=0.01) / 100
take_profit_percent = input.float(3, title="Take Profit (%)") / 100
stop_loss_percent = input.float(1, title="Stop Loss (%)") / 100

// Functions to identify key support and resistance levels
findSupport() =>
    ta.lowest(low, support_resistance_lookback)

findResistance() =>
    ta.highest(high, support_resistance_lookback)

// Identify reversal patterns
isHammer() =>
    body = math.abs(close - open)
    lowerWick = open > close ? (low < close ? close - low : open - low) : (low < open ? open - low : close - low)
    upperWick = high - math.max(open, close)
    lowerWick > body * 2 and upperWick < body

isEngulfing() =>
    (close[1] < open[1] and close > open and close > open[1] and open < close[1]) 
    (close[1] > open[1] and close < open and close < open[1] and open > close[1])

isDoji() =>
    math.abs(open - close) <= (high - low) * 0.1

// Identify support and resistance levels
support = findSupport()
resistance = findResistance()

// Check for reversal patterns at support and resistance
hammerAtSupport = isHammer() and (low <= support * (1 + reversal_tolerance))
engulfingAtSupport = isEngulfing() and (low <= support * (1 + reversal_tolerance))
dojiAtSupport = isDoji() and (low <= support * (1 + reversal_tolerance))

hammerAtResistance = isHammer() and (high >= resistance * (1 - reversal_tolerance))
engulfingAtResistance = isEngulfing() and (high >= resistance * (1 - reversal_tolerance))
dojiAtResistance = isDoji() and (high >= resistance * (1 - reversal_tolerance))

// Trading logic
if (hammerAtSupport or engulfingAtSupport or dojiAtSupport)
    strategy.entry("Long", strategy.long)
    stop_level = low * (1 - stop_loss_percent)
    take_profit_level = close * (1 + take_profit_percent)
    strategy.exit("Take Profit/Stop Loss", from_entry="Long", stop=stop_level, limit=take_profit_level)

if (hammerAtResistance or engulfingAtResistance or dojiAtResistance)
    strategy.entry("Short", strategy.short)
    stop_level = high * (1 + stop_loss_percent)
    take_profit_level = close * (1 - take_profit_percent)
    strategy.exit("Take Profit/Stop Loss", from_entry="Short", stop=stop_level, limit=take_profit_level)

// Plot support and resistance levels for visualization
plot(support, color=color.green, linewidth=1, title="Support Level")
plot(resistance, color=color.red, linewidth=1, title="Resistance Level")

// Plot reversal patterns on the chart for visualization
plotshape(series=hammerAtSupport, location=location.belowbar, color=color.green, style=shape.labelup, text="Hammer at Support")
plotshape(series=engulfingAtSupport, location=location.belowbar, color=color.green, style=shape.labelup, text="Engulfing at Support")
plotshape(series=dojiAtSupport, location=location.belowbar, color=color.green, style=shape.labelup, text="Doji at Support")

plotshape(series=hammerAtResistance, location=location.abovebar, color=color.red, style=shape.labeldown, text="Hammer at Resistance")
plotshape(series=engulfingAtResistance, location=location.abovebar, color=color.red, style=shape.labeldown, text="Engulfing at Resistance")
plotshape(series=dojiAtResistance, location=location.abovebar, color=color.red, style=shape.labeldown, text="Doji at Resistance")


もっと