Стратегия накопления отскока скользящей средней


Дата создания: 2023-12-28 15:25:29 Последнее изменение: 2023-12-28 15:25:29
Копировать: 1 Количество просмотров: 701
1
Подписаться
1621
Подписчики

Стратегия накопления отскока скользящей средней

Обзор

Стратегия равнолинейного отскока - это стратегия, которая одновременно сочетает в себе технические показатели и ценовую форму, выполняет множество операций по ликвидации в поддерживающих устойчивых точках. Эта стратегия использует равнолинейные показатели для определения направления рыночной тенденции, использует устойчивые показатели, основанные на ценовых максимумах, чтобы помочь определить поворотные точки, в сочетании с предыдущими высокими и низкими точками, чтобы определить ключевые позиции поддержки и сопротивления.

Стратегический принцип

Стратегия определяет время операции, основываясь на следующих этапах:

  1. Используйте трехуровневый индикатор Alligator для определения направления тренда. Когда ценовая линия прорывает липовые линии этого индикатора, считается, что появился сильный сигнал прорыва.

  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
// ...