
Es un sistema de estrategias que combina la identificación de formas de análisis técnico múltiple y los niveles de resistencia de soporte. La estrategia se basa principalmente en la identificación de formas de doble fondo (formas de fondo de Adán y Eva), en la combinación de niveles de regresión de Fibonacci y líneas de resistencia de soporte para la toma de decisiones comerciales. El núcleo de la estrategia consiste en mejorar la fiabilidad de las señales de negociación mediante la verificación de indicadores técnicos multidimensionales, mientras que los niveles de resistencia de soporte son una referencia importante para el control de riesgos.
La estrategia utiliza un mecanismo de triple verificación para la toma de decisiones comerciales: primero, mediante el uso de un algoritmo específico para identificar las formas de doble fondo, que incluyen el “fondo de Adán” más afilado y el “fondo de Eva” más redondeado; segundo, utilizando los niveles de regresión de Fibonacci ((0.618 y 1.618) para determinar la zona de destino; y finalmente, mediante la verificación de los niveles de resistencia de soporte para confirmar la transacción. La generación de señales comerciales requiere que se cumplan las condiciones de identificación de la forma, el nivel de Fibonacci y el nivel de resistencia de soporte. En concreto, se activa una señal múltiple cuando el nivel de resistencia de soporte es superior a la posición de extensión de Fibonacci de 1.618 y se activa una señal de aire cuando el nivel de resistencia de soporte es inferior a la posición de regresión de Fibonacci de 0.618.
La estrategia construye un sistema de negociación relativamente completo a través de la aplicación integral de múltiples técnicas de análisis, como la identificación de formas, los niveles de Fibonacci y las líneas de resistencia de soporte. La ventaja de la estrategia es que su mecanismo de verificación múltiple ofrece una alta fiabilidad, y su ajustabilidad también le permite adaptarse a diferentes entornos de mercado. Aunque existen algunos riesgos inherentes, la estrategia espera obtener un rendimiento estable en el comercio real mediante la optimización y el perfeccionamiento continuos.
/*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)