
Ini adalah sistem strategi yang menggabungkan pengenalan bentuk analisis teknikal berbilang dan tahap rintangan sokongan. Strategi ini digunakan untuk membuat keputusan perdagangan dengan mengenal pasti bentuk dasar ganda (bottom form of Adam and Eve), menggabungkan tahap pemulihan Fibonacci dan garis rintangan sokongan. Inti strategi ini adalah untuk meningkatkan kebolehpercayaan isyarat perdagangan melalui pengesahan indikator teknikal berbilang dimensi, sambil menggunakan tahap rintangan sokongan sebagai rujukan penting untuk kawalan risiko.
Strategi ini menggunakan mekanisme triple-verifikasi untuk membuat keputusan perdagangan: pertama, dengan algoritma tertentu untuk mengenal pasti bentuk dua-bottom, termasuk “bottom Adam” yang lebih tajam dan “bottom Eve” yang lebih bulat; kedua, menggunakan tahap regangan Fibonacci ((0.618 dan 1.618) untuk menentukan kawasan sasaran; dan terakhir, dengan pengesahan tahap rintangan sokongan untuk mengesahkan perdagangan. Penciptaan isyarat perdagangan memerlukan syarat untuk mengenali bentuk, tahap Fibonacci dan tahap rintangan sokongan.
Strategi ini membina sistem perdagangan yang agak sempurna dengan menggunakan pelbagai analisis teknikal seperti pengenalan bentuk, tahap Fibonacci dan garis rintangan sokongan. Kelebihan strategi ini adalah bahawa mekanisme pengesahan berganda memberikan kebolehpercayaan yang tinggi, dan kemampuan untuk menyesuaikan diri dengan keadaan pasaran yang berbeza. Walaupun terdapat beberapa risiko yang wujud, strategi ini dijangka dapat mencapai prestasi yang stabil dalam perdagangan sebenar dengan pengoptimuman dan penyempurnaan yang berterusan.
/*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)