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


Дата создания: 2023-12-08 16:47:39 Последнее изменение: 2023-12-08 16:47:39
Копировать: 0 Количество просмотров: 925
1
Подписаться
1621
Подписчики

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

Обзор стратегии

Подвижная средняя стратегия отскока - это стратегия, которая отслеживает прорыв цены под движущейся средней. Она проверяет, не отскочил ли криптовалюта от движущейся средней, и если да, то это многоголовый сигнал. Если криптовалюта отскочила вниз от движущейся средней, то это был сигнал головы.

Название стратегии

Exponential Moving Average Bounce Strategy

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

Стратегия основана на экспоненциальной движущейся средней. Она вычисляет линию EMA в реальном времени. Затем проверяется, происходит ли отскок цены выше или ниже линии EMA:

  • Если цена сначала опускается ниже линии EMA, а затем снова поднимается над линией EMA, то это многоголовый сигнал.
  • Если цена сначала преодолевает линию EMA, а затем снова падает и закрывается ниже линии EMA, это пустой сигнал

Такой ответный удар является начальным сигналом для стратегии.

Анализ преимуществ стратегии

Не поддавайтесь на провокации

EMA использует стратегию реверса только после определения обратного курса, чтобы избежать противоположных действий.

Небольшие отзывы, хорошая историческая прибыль

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

Легко понятный, гибкий для параметров

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

Анализ рисков

Поддельные сигналы

Обычно вблизи линии EMA имеются плотные ложные прорывы, которые могут вызвать ошибочный сигнал. Для фильтрации этого шума необходимо скорректировать параметры EMA.

Непредсказуемый поворотный момент

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

Стоп-позиция легко пробивается

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

Направление оптимизации

В сочетании с другими показателями фильтрует сигналы

Другие индикаторы, такие как RSI, MACD и другие, могут быть добавлены для подтверждения обратного курса и фильтрации ложных сигналов.

Оптимизация убытков

Можно использовать более гибкие способы остановки, такие как временная остановка, остановка колебаний и т. д., чтобы снизить риск пробивания.

Параметры оптимизации

Оптимизация параметров цикла EMA, чтобы найти оптимальное сочетание параметров. Можно также динамически изменять параметры EMA, чтобы отслеживать циклы рынка.

Подвести итог

Стратегия подвижного среднего отскока - это простая и практичная стратегия для отслеживания тенденций. Она работает плавно, имеет небольшие отступления и легко понятна. При этом существует определенный риск ложного сигнала и риск остановки.

Исходный код стратегии
/*backtest
start: 2022-12-01 00:00:00
end: 2023-12-07 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/
// © tweakerID

// Simple strategy that checks for price bounces over an Exponential Moving Average. If the CLOSE of the candle bounces
// back from having it's LOW below the EMA, then it's a Bull Bounce. If the CLOSE of the candle bounces down from having it's
// high above the EMA, then it's a Bear Bounce. This logic can be reverted.

//@version=4
strategy("EMA Bounce", overlay=true, 
     default_qty_type=strategy.percent_of_equity, 
     default_qty_value=100, 
     initial_capital=10000, 
     commission_value=0.04, 
     calc_on_every_tick=false, 
     slippage=0)

direction = input(0, title = "Strategy Direction", type=input.integer, minval=-1, maxval=1)
strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))

/////////////////////// STRATEGY INPUTS ////////////////////////////////////////
title1=input(true, "-----------------Strategy Inputs-------------------")  

i_EMA=input(20, title="EMA Length")

/////////////////////// BACKTESTER /////////////////////////////////////////////
title2=input(true, "-----------------General Inputs-------------------")  

// Backtester General Inputs
i_SL=input(true, title="Use Swing Stop Loss and Take Profit")
i_SPL=input(defval=10, title="Swing Point Loopback")
i_PercIncrement=input(defval=.2, step=.1, title="Swing Point SL Perc Increment")*0.01
i_TPRRR = input(1.2, step=.1, title="Take Profit Risk Reward Ratio")

// Bought and Sold Boolean Signal
bought = strategy.position_size > strategy.position_size[1] 
 or strategy.position_size < strategy.position_size[1]

// Price Action Stop and Take Profit
LL=(lowest(i_SPL))*(1-i_PercIncrement)
HH=(highest(i_SPL))*(1+i_PercIncrement)
LL_price = valuewhen(bought, LL, 0)
HH_price = valuewhen(bought, HH, 0)
entry_LL_price = strategy.position_size > 0 ? LL_price : na 
entry_HH_price = strategy.position_size < 0 ? HH_price : na 
tp=strategy.position_avg_price + (strategy.position_avg_price - entry_LL_price)*i_TPRRR
stp=strategy.position_avg_price - (entry_HH_price - strategy.position_avg_price)*i_TPRRR


/////////////////////// STRATEGY LOGIC /////////////////////////////////////////

EMA=ema(close, i_EMA)
LowAboveEMA=low > EMA
LowBelowEMA=low < EMA
HighAboveEMA=high > EMA
HighBelowEMA=high < EMA
BullBounce=LowAboveEMA[1] and LowBelowEMA and close > EMA //and close > open
BearBounce=HighBelowEMA[1] and HighAboveEMA and close < EMA //and close < open
plot(EMA)

BUY=BullBounce
SELL=BearBounce

//Inputs
DPR=input(false, "Allow Direct Position Reverse")
reverse=input(false, "Reverse Trades")

// Entries
if reverse
    if not DPR
        strategy.entry("long", strategy.long, when=SELL and strategy.position_size == 0)
        strategy.entry("short", strategy.short, when=BUY and strategy.position_size == 0)
    else     
        strategy.entry("long", strategy.long, when=SELL)
        strategy.entry("short", strategy.short, when=BUY)
else
    if not DPR 
        strategy.entry("long", strategy.long, when=BUY and strategy.position_size == 0)
        strategy.entry("short", strategy.short, when=SELL and strategy.position_size == 0)
    else
        strategy.entry("long", strategy.long, when=BUY)
        strategy.entry("short", strategy.short, when=SELL)


SL=entry_LL_price
SSL=entry_HH_price
TP=tp
STP=stp

strategy.exit("TP & SL", "long", limit=TP, stop=SL, when=i_SL)
strategy.exit("TP & SL", "short", limit=STP, stop=SSL, when=i_SL)

/////////////////////// PLOTS //////////////////////////////////////////////////

plot(strategy.position_size > 0 ? SL : na , title='SL', style=plot.style_cross, color=color.red)
plot(strategy.position_size < 0 ? SSL : na , title='SSL', style=plot.style_cross, color=color.red)
plot(strategy.position_size > 0 ? TP : na, title='TP', style=plot.style_cross, color=color.green)
plot(strategy.position_size < 0 ? STP : na, title='STP', style=plot.style_cross, color=color.green)
// Draw price action setup arrows
plotshape(BUY ? 1 : na, style=shape.triangleup, location=location.belowbar, 
 color=color.green, title="Bullish Setup", transp=80, size=size.auto)
plotshape(SELL ? 1 : na, style=shape.triangledown, location=location.abovebar, 
 color=color.red, title="Bearish Setup", transp=80, size=size.auto)