
これは,複数の技術分析の形状識別と,サポートレジスタンスレベルを組み合わせた戦略システムである. この戦略は,主に,双底形状 ((アダムとエバの底形状) を識別し,フィボナッチ回帰レベルとサポートレジスタンスラインを組み合わせて取引決定を行う. この戦略の核心は,多次元的な技術指標の検証によって,取引信号の信頼性を高め,同時にサポートレジスタンスレベルを,リスク管理の重要な参照として利用することである.
戦略は,トリプル検証メカニズムを用いて取引決定を行う.まずは,特定のアルゴリズムによって,より鋭い”アダム底”とより円形の”エヴァ底”を含む二重底形状を識別する.次に,フィボナッチ反調レベル ((0.618と1.618) を利用して,ターゲット領域を決定する.最後に,サポートレジスタンスレベルの検証によって取引シグナルを確認する.取引シグナルの生成は,形状識別,フィボナッチレベルとサポートレジスタンスレベルの両方の条件を満たす必要がある.具体的には,サポートレジスタンスレベルが1.618フィボナッチ伸縮位を超えると多信号を触発し,サポートレジスタンスレベルが0.618フィボナッチ反調位を下回ると空中信号を触発する.
この戦略は,形状認識,フィボナッチレベル,サポートレジスタンスラインなどの複数の技術分析方法を統合して,比較的完ぺきな取引システムを構築している.戦略の優点は,複数の検証機構が高い信頼性を提供していることであり,その調整性も異なる市場環境に適応できるようにしていることである.いくつかの固有のリスクがあるものの,継続的な最適化と改善によって,この戦略は,実際の取引で安定したパフォーマンスを期待されている.より多くの技術指標と最適化アルゴリズムを追加することで,戦略の性能を向上させる大きな余地がある.
/*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)