이동평균 리바운드 축적 전략


생성 날짜: 2023-12-28 15:25:29 마지막으로 수정됨: 2023-12-28 15:25:29
복사: 1 클릭수: 701
avatar of ChaoZhang ChaoZhang
1
집중하다
1621
수행원

이동평균 리바운드 축적 전략

개요

평행 리버스 흡수 전략은 기술 지표와 가격 형태를 동시에 결합하여 지지 저항 지점에서 다중 하위 조작을 수행하는 전략이다. 이 전략은 평행 지표를 사용하여 시장 추세 방향을 식별하고, 가격 극치에 기반한 형태 지표를 사용하여 역점을 결정하는데 도움을 주며, 이전 고점 저점과 결합하여 중요한 지지 및 저항 위치를 판단하고, 이러한 지점에서 역행하는 것은 전형적인 의미의 역전 전략에 속한다.

전략 원칙

이 전략은 주로 다음과 같은 몇 가지 단계를 통해 실행 시기를 판단합니다.

  1. 삼평선 알리게이터 지표를 사용하여 트렌드 방향을 판단하십시오. 가격선이 지표의 립 라인을 뚫었을 때, 강한 뚫림 신호가 나타났습니다.

  2. 피크-트루 모드 지표를 사용하여 가격이 오버 바이 오버 셀 영역에서 역전되는 시점을 식별한다. 피크-트루의 특정 방향의 극한 지점을 돌파하면 가능한 역전 신호로 판단한다.

  3. 지원 및 저항 지점과 결합하여 역전 거래의 특정 입구 지점을 판단한다. 가격이 이전 지원 또는 저항 지점에 가까운 위치에 입점하면 더 많은 공백을 한다.

  4. EMA 평균선 지표를 사용하여 장기적인 트렌드 방향을 결정한다. 예를 들어, 충격적인 상황에서 단기간의 동작은 공중회전으로 주류를 이루고, 경향적인 상황에서는 유동적인 동작으로 주류를 이루고 있다.

  5. 이동적 손실을 조절하기 위해 이동적 손실을 조절하는 방법을 사용합니다.

전략적 이점

이 전략에는 다음과 같은 장점이 있습니다.

  1. 또한 여러 지표 신호를 결합하여 판단의 정확도를 높일 수 있습니다.

  2. 핵심 지지 저항을 이용해서 반전하는 것은 높은 확률의 동작이다.

  3. 이동식 상쇄 방식은 단편적 손실을 제한할 수 있다.

전략적 위험

이 전략에는 다음과 같은 위험도 있습니다.

  1. 다중 지표 포트폴리오 판단에 따르면, 거래 빈도가 높을 수 있으며, 거래 비용 통제에 주의를 기울여야 한다.

  2. 핵심 지점의 실패가 가장 큰 위험이며, 가격이 예상된 지지 또는 저항 지점 근처에서 반전하지 않으면 손실이 더 커질 수 있다.

  3. 시장이 급격하게 변동할 때, 이동식 중지 손실이 뚫릴 수 있으며, 이로 인해 손실이 확대됩니다.

전략 최적화 방향

이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.

  1. 다중 지수 중량에 대한 최적화된 조정을 통해 최적의 변수 조합을 찾습니다.

  2. 기계학습 알고리즘을 추가하여 핵심 점의 성공률을 판단하는 데 도움을 줍니다.

  3. 거래량 지표에 추가하여 가격의 급격한 변동과 거래량이 부족할 때 수축되는 것을 피합니다.

  4. 이동 상쇄 모형을 최적화하여 상쇄 효과를 보장하면서 불필요한 상쇄의 확률을 최소화한다.

요약하다

요약하자면, 이 평행선 반발 모금 전략은 평행선, 가격 형태, 지지부수치 등과 같은 여러 지표를 동시에 사용하여 판단하는 전형적인 기술 전략이다. 그것은 판단 정확도가 높고, 높은 확률 동작의 장점을 가지고 있지만, 또한 중요한 지점 실패와 이동 중지 손실이 뚫리는 위험을 주의해야 한다.

전략 소스 코드
/*backtest
start: 2022-12-21 00:00:00
end: 2023-12-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © vhurtadocos


//@version=5
strategy('Estrategia EMA Resistencia Soporte', shorttitle='Estrategia EMA RESISTENCIA Y SOPORTE', overlay=true, margin_long=100, margin_short=100, pyramiding = 10 )

//INICIO DE CONDICIONES BASICAS
/// Alligator
smma(src, length) =>
    smma = 0.0
    sma_1 = ta.sma(src, length)
    smma := na(smma[1]) ? sma_1 : (smma[1] * (length - 1) + src) / length
    smma
lipsLength = input(title='🐲 Lips Length', defval=5)
teethLength = input(title='🐲 Teeth Length', defval=8)
jawLength = input(title='🐲 Jaw Length', defval=13)
lipsOffset = input(title='🐲 Lips Offset', defval=3)
teethOffset = input(title='🐲 Teeth Offset', defval=5)
jawOffset = input(title='🐲 Jaw Offset', defval=8)
lips = smma(hl2, lipsLength)
teeth = smma(hl2, teethLength)
jaw = smma(hl2, jawLength)


// Fractals
n = input.int(title='📌 Period', defval=2, minval=2)
upFractal = high[n + 2] < high[n] and high[n + 1] < high[n] and high[n - 1] < high[n] and high[n - 2] < high[n] or high[n + 3] < high[n] and high[n + 2] < high[n] and high[n + 1] == high[n] and high[n - 1] < high[n] and high[n - 2] < high[n] or high[n + 4] < high[n] and high[n + 3] < high[n] and high[n + 2] == high[n] and high[n + 1] <= high[n] and high[n - 1] < high[n] and high[n - 2] < high[n] or high[n + 5] < high[n] and high[n + 4] < high[n] and high[n + 3] == high[n] and high[n + 2] == high[n] and high[n + 1] <= high[n] and high[n - 1] < high[n] and high[n - 2] < high[n] or high[n + 6] < high[n] and high[n + 5] < high[n] and high[n + 4] == high[n] and high[n + 3] <= high[n] and high[n + 2] == high[n] and high[n + 1] <= high[n] and high[n - 1] < high[n] and high[n - 2] < high[n]
dnFractal = low[n + 2] > low[n] and low[n + 1] > low[n] and low[n - 1] > low[n] and low[n - 2] > low[n] or low[n + 3] > low[n] and low[n + 2] > low[n] and low[n + 1] == low[n] and low[n - 1] > low[n] and low[n - 2] > low[n] or low[n + 4] > low[n] and low[n + 3] > low[n] and low[n + 2] == low[n] and low[n + 1] >= low[n] and low[n - 1] > low[n] and low[n - 2] > low[n] or low[n + 5] > low[n] and low[n + 4] > low[n] and low[n + 3] == low[n] and low[n + 2] == low[n] and low[n + 1] >= low[n] and low[n - 1] > low[n] and low[n - 2] > low[n] or low[n + 6] > low[n] and low[n + 5] > low[n] and low[n + 4] == low[n] and low[n + 3] >= low[n] and low[n + 2] == low[n] and low[n + 1] >= low[n] and low[n - 1] > low[n] and low[n - 2] > low[n]
plotshape(title='📌 Up-Fractal', series=upFractal, style=shape.triangleup, location=location.abovebar, offset=-2, color=color.new(color.olive, 0), text="R")
plotshape(title='📌 Down-Fractal', series=dnFractal, style=shape.triangledown, location=location.belowbar, offset=-2, color=color.new(color.maroon, 0), text="S", textcolor = color.new(color.maroon,0))

// Resistance, Support
showRS = input(title='⤒⤓ Show Res-Sup', defval=true)
lengthRS = input(title='⤒⤓ Res-Sup Length', defval=13)
highRS = ta.valuewhen(high >= ta.highest(high, lengthRS), high, 0)
lowRS = ta.valuewhen(low <= ta.lowest(low, lengthRS), low, 0)
plot(title='⤒ Resistance', series=showRS and highRS ? highRS : na, color=highRS != highRS[1] ? na : color.olive, linewidth=1, offset=0)
plot(title='⤓ Support', series=showRS and lowRS ? lowRS : na, color=lowRS != lowRS[1] ? na : color.maroon, linewidth=1, offset=0)




// EMA de 8 períodos
ema8 = ta.ema(close, 8)
plot(title='ema8', series=ema8, color=color.new(#dbef41, 0), offset=0)

// EMA de 21 períodos
ema21 = ta.ema(close, 21)
plot(title='ema21', series=ema21, color=color.new(#e12c0c, 0), offset=0)

// EMA de 50 períodos
ema50 = ta.ema(close, 50)
plot(title='ema50', series=ema50, color=color.new(#3419de, 0), offset=0)

// EMA de 200 períodos
ema200 = ta.ema(close, 200)
plot(title='ema200', series=ema200, color=color.new(#f6f6f4, 0), offset=0)



// Definiciones originales...
// ... (incluyendo tus definiciones de Alligator, Fractals, etc.)

// Guardamos el último soporte y resistencia
var float lastSupport = na
var float lastResistance = na

// Detectando un nuevo soporte y resistencia
newSupportDetected = low == lowRS


if newSupportDetected
    lastSupport := low

// Lógica de entrada y salida

// Condiciones de entrada basadas en soportes recién formados
longCondition = low == lowRS
if longCondition
    strategy.entry("Long", strategy.long)

// Salida (take profit) cuando detectamos una nueva resistencia después de entrar en una posición long
newResistanceDetected = high == highRS
if newResistanceDetected and strategy.position_size > 0
    strategy.close("Long")

// Agregar una condición para el stop loss
longStopLossPrice = close * 0.95
if strategy.position_size > 0 and close <= longStopLossPrice
    strategy.close("Long")

// Pintamos los soportes y resistencias
plotshape(longCondition, style=shape.triangledown, location=location.belowbar, color=color.red)
plotshape(newResistanceDetected, style=shape.triangleup, location=location.abovebar, color=color.green)

// Resto del código para plotear las EMAs y fractales
// ...