複数のパターン認識とSRパーセンタイル取引戦略

SR BP TP FIBO ATR SMA
作成日: 2024-12-05 16:30:14 最終変更日: 2024-12-05 16:30:14
コピー: 0 クリック数: 400
1
フォロー
1617
フォロワー

複数のパターン認識とSRパーセンタイル取引戦略

概要

これは,複数の技術分析の形状識別と,サポートレジスタンスレベルを組み合わせた戦略システムである. この戦略は,主に,双底形状 ((アダムとエバの底形状) を識別し,フィボナッチ回帰レベルとサポートレジスタンスラインを組み合わせて取引決定を行う. この戦略の核心は,多次元的な技術指標の検証によって,取引信号の信頼性を高め,同時にサポートレジスタンスレベルを,リスク管理の重要な参照として利用することである.

戦略原則

戦略は,トリプル検証メカニズムを用いて取引決定を行う.まずは,特定のアルゴリズムによって,より鋭い”アダム底”とより円形の”エヴァ底”を含む二重底形状を識別する.次に,フィボナッチ反調レベル ((0.618と1.618) を利用して,ターゲット領域を決定する.最後に,サポートレジスタンスレベルの検証によって取引シグナルを確認する.取引シグナルの生成は,形状識別,フィボナッチレベルとサポートレジスタンスレベルの両方の条件を満たす必要がある.具体的には,サポートレジスタンスレベルが1.618フィボナッチ伸縮位を超えると多信号を触発し,サポートレジスタンスレベルが0.618フィボナッチ反調位を下回ると空中信号を触発する.

戦略的優位性

  1. 多重検証により取引信号の信頼性が向上
  2. 形状認識アルゴリズムによる市場転換点を正確に捉える
  3. ファイポナッチレベルと組み合わせた正確なターゲット領域
  4. サポートレジスタンスレベルの検証により,取引の安全性が向上する
  5. 戦略パラメータは高度に調整可能であり、さまざまな市場環境に適応できます。
  6. 高度な自動化により,主観的な判断による偏差が軽減されます.

戦略リスク

  1. 形状認識の遅れが,入学タイミングに影響する可能性がある
  2. 波動の激しい市場では,偽信号が生じる可能性があります.
  3. 市場環境による抵抗レベルの有効性
  4. パラメータの不適切な設定は,過剰取引につながる可能性があります.
  5. 観測周期が長くなり,迅速な機会を逃す可能性もあります.

戦略最適化の方向性

  1. 市場環境をフィルタリングする波動性指標の導入
  2. トレンドフィルターを追加して形状認識の正確性を向上させる
  3. サポート抵抗レベルを最適化する計算方法
  4. 取引量指標を補足して確認する
  5. より柔軟な止損防止装置の開発
  6. 機械学習アルゴリズムを導入し,形状認識の精度を向上させる

要約する

この戦略は,形状認識,フィボナッチレベル,サポートレジスタンスラインなどの複数の技術分析方法を統合して,比較的完ぺきな取引システムを構築している.戦略の優点は,複数の検証機構が高い信頼性を提供していることであり,その調整性も異なる市場環境に適応できるようにしていることである.いくつかの固有のリスクがあるものの,継続的な最適化と改善によって,この戦略は,実際の取引で安定したパフォーマンスを期待されている.より多くの技術指標と最適化アルゴリズムを追加することで,戦略の性能を向上させる大きな余地がある.

ストラテジーソースコード
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-04 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Double Bottom with Support/Resistance Strategy - Aynet", overlay=true)

// Inputs
lookbackPeriod = input(21, "Lookback Period")
swingLowThreshold = input(1.5, "Swing Low Threshold")
fibLevel1 = input(0.618, "Fibonacci Level 1")
fibLevel3 = input(1.618, "Fibonacci Level 2")
srPeriod = input(21, "Support/Resistance Period") 
srThreshold = input(3, "Support/Resistance Touch Points")

// Support/Resistance Function
get_sr_level(idx) =>
    var level = 0.0
    var count = 0
    
    if bar_index % srPeriod == 0
        highCount = 0
        lowCount = 0
        for i = 0 to srPeriod - 1
            if math.abs(high[i] - high) < (high * 0.001)
                highCount += 1
            if math.abs(low[i] - low) < (low * 0.001)
                lowCount += 1
                
        if highCount >= srThreshold
            level := high
            count := highCount
        if lowCount >= srThreshold
            level := low
            count := lowCount
            
    [level, count]

// Pattern Detection Functions
isSwingLow(src, left, right) =>
    isLow = true
    for i = 0 to left + right
        if src[i] < src[right]
            isLow := false
    isLow

getSpikeSharpness(index) =>
    priceRange = high[index] - low[index]
    bodyRange = math.abs(close[index] - open[index])
    sharpness = priceRange / bodyRange
    sharpness

// Pattern Variables
var float firstBottom = na
var float secondBottom = na
var bool isAdam = false
var bool isEve = false
var float level1Value = na
var float level3Value = na

// Pattern Detection
bottom = isSwingLow(low, lookbackPeriod, lookbackPeriod)
if bottom
    sharpness = getSpikeSharpness(0)
    if na(firstBottom)
        firstBottom := low
        isAdam := sharpness > swingLowThreshold
    else if low <= firstBottom * 1.02 and low >= firstBottom * 0.98
        secondBottom := low
        isEve := sharpness <= swingLowThreshold

// Calculate Fibonacci
if not na(secondBottom)
    highPoint = ta.highest(high, lookbackPeriod)
    fibDistance = highPoint - math.min(firstBottom, secondBottom)
    level1Value := math.min(firstBottom, secondBottom) + fibDistance * fibLevel1
    level3Value := math.min(firstBottom, secondBottom) + fibDistance * fibLevel3

// Get S/R Level
[srLevel, srCount] = get_sr_level(0)

// Trading Logic
longCondition = srLevel > level3Value
shortCondition = srLevel < level1Value

if longCondition
    strategy.entry("Long", strategy.long)

if shortCondition
    strategy.entry("Short", strategy.short)

// Reset Pattern
if high > ta.highest(high[1], lookbackPeriod)
    firstBottom := na
    secondBottom := na
    isAdam := false
    isEve := false
var table logo = table.new(position.top_right, 1, 1)
table.cell(logo, 0, 0, 'Double Bottom with Support/Resistance Strategy - Aynet', text_size=size.large, text_color=color.white)
// Plots
plot(level1Value, "0.236", color=color.rgb(245, 0, 0), style=plot.style_line)
plot(level3Value, "0.618", color=color.rgb(82, 166, 255), style=plot.style_line)
plot(srLevel, "S/R Level", color=color.white)

plotshape(bottom and not na(firstBottom) and na(secondBottom), "Adam Bottom", shape.circle, location.belowbar, color.green)
plotshape(bottom and not na(secondBottom), "Eve Bottom", shape.circle, location.belowbar, color.yellow)