サポートとレジスタンスの反転パターンに基づく定量取引戦略


作成日: 2024-06-07 16:45:09 最終変更日: 2024-06-07 16:45:09
コピー: 3 クリック数: 611
1
フォロー
1617
フォロワー

サポートとレジスタンスの反転パターンに基づく定量取引戦略

概要

この戦略は,技術分析の逆転形状 ((頭線,吞食形状,十字星) とサポートとレジスタンス位置に基づいて,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")