
Подвижная средняя стратегия отскока - это стратегия, которая отслеживает прорыв цены под движущейся средней. Она проверяет, не отскочил ли криптовалюта от движущейся средней, и если да, то это многоголовый сигнал. Если криптовалюта отскочила вниз от движущейся средней, то это был сигнал головы.
Exponential Moving Average Bounce Strategy
Стратегия основана на экспоненциальной движущейся средней. Она вычисляет линию 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)