Стратегия прорывного импульса, основанная на скользящей средней «золотом кресте»


Дата создания: 2024-02-06 14:39:22 Последнее изменение: 2024-02-06 14:39:22
Копировать: 2 Количество просмотров: 593
1
Подписаться
1617
Подписчики

Стратегия прорывного импульса, основанная на скользящей средней «золотом кресте»

Обзор

В качестве входного сигнала стратегия использует 12-дневную EMA и 26-дневную EMA. Для фильтрации ложных прорывов стратегия также включает MACD, чтобы определить рыночную тенденцию, а также RSI, чтобы определить, находится ли он в зоне перепродажи. В то же время, стратегия также определяет, будет ли цена пробиваться через сопротивление, чтобы подтвердить тенденцию.

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

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

  1. Сигнал входа

    • 12-й EMA на 26-й EMA составляет золотую галочку
    • MACD положительный, а линия MACD выше линии Signal
    • RSI в пределах установленного диапазона
    • Закрытие цены выше 21-й EMA и 7-й SMA
  2. Вход подтвержден

    • Выбор: цена пробивает динамическое сопротивление
  3. Стойкость

    • Следующий стоп: в зависимости от цены входа и процента отслеживаемого стоп-порога
    • Стоп средней линии: цена закрытия упала ниже 7-го SMA
    • Средняя линейная развязка: 12-дневная EMA, 26-дневная EMA-стоп
  4. Способы остановки

    • Установка двух последовательных целей остановки, продажа части количества после первого запуска остановки и продажа всего количества после второго запуска

Стратегические преимущества

  1. Фильтрация с использованием равнолинейной системы вводит в заблуждение и повышает точность входа в игру.
  2. Многочисленные варианты остановки для разных типов трейдеров
  3. Динамическое отслеживание убытков для управления рисками
  4. Цель “Остановить прибыль” заключается в том, чтобы выступать в группах и блокировать часть прибыли.

Стратегический риск

  1. При рыночных колебаниях EMA дает больше ложных сигналов
  2. Стоп-следующий может быть взломан после прорыва
  3. Среднелинейная стоп-смерть не может быть вовремя остановлена при обратном тренде

Соответствующие меры:

  1. Показатели MACD в сочетании с фактическим движением рынка
  2. Корректировка величины остановки отслеживания
  3. Другие методы или комбинированные методы остановки убытков

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

  1. Оптимизация параметров EMA для определения оптимальной комбинации параметров
  2. Тестирование различных методов и параметров сдерживания, чтобы найти оптимальный вариант сдерживания
  3. Тестирование различных параметров торможения и оптимизация торможения
  4. В сочетании с другими показателями для определения времени поступления
  5. Приспособление для различных сортов и циклов

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

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

Исходный код стратегии
/*backtest
start: 2023-01-30 00:00:00
end: 2024-02-05 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/
// © AbdulRahimShama
//@version=5


strategy('12/26-IT strategy', overlay=true,initial_capital = 100000)



Show_Only_12_26_Crossover_Entry = input.bool(true, group = "Entry_Exit Criteria")
Show_12_26_Crossover_and_resistance_Entry = input.bool(false, group = "Entry_Exit Criteria")


Show_TSL_StopLoss = input.bool(true, group = "Entry_Exit Criteria")
Show_Crossdown_StopLoss = input.bool(true, group = "Entry_Exit Criteria")
Show_SMA7_StopLoss = input.bool(false, group = "Entry_Exit Criteria")



////////////////////////////////////////////////
////////////////TARGETS INPUT
////////////////////////////////////////////////

////////Target1

TargetPerc1 = input.float(title="Target (%)", minval=0,defval=5, group="Target-1") / 100
TargetPrice1 = strategy.position_avg_price * (1 + TargetPerc1)
Target1_exit_qty = input.int(50, group="Target-1",tooltip = "% qty to sell when Target1 is reached")



////////Target2

TargetPerc2 = input.float(title="Target (%)", minval=0,defval=10, group="Target-2") / 100
TargetPrice2 = strategy.position_avg_price * (1 + TargetPerc2)
Target2_exit_qty = input.int(100, group="Target-2",tooltip = "% qty to sell when Target2 is reached")



////////////////////////////////////////////////
////////////////TRAILING STOP LOSS
////////////////////////////////////////////////


TSLsource = input(low, title="TSL Source", group="Trailing StopLoss")

longTrailPerc = input.float(title='Trail Long Loss (%)', minval=0.0, step=0.1, defval=1, group="Trailing StopLoss") * 0.01

TrailStopPrice = 0.0

TrailStopPrice := if strategy.position_size > 0
    sPIVOT_highValue = TSLsource * (1 - longTrailPerc)
    math.max(sPIVOT_highValue, TrailStopPrice[1])
else
    0

TSL = close < TrailStopPrice
plot(series=strategy.position_size > 0 and Show_TSL_StopLoss ? TrailStopPrice : na, color=color.new(color.fuchsia, 0), style=plot.style_linebr, linewidth=2, title='Trailing StopLoss')




////////////////////////////////////////////////
////////////////Moving Averages
////////////////////////////////////////////////



EMA_12=ta.ema(close, 12)
EMA_26=ta.ema(close, 26)
EMA_21=ta.ema(close,21)

plot(EMA_12, title="EMA_12", color=color.rgb(0, 255, 0), offset=0, linewidth=1)
plot(EMA_26, title="EMA_26", color=color.rgb(0, 0, 255), offset=0, linewidth=1)
plot(Show_SMA7_StopLoss ? ta.sma(close,7) : na, title="SMA_7", color=color.rgb(255, 0, 0), offset=0, linewidth=1)



////////////////////////////////////////////////
////////////////RESISTANCE INPUT and PLOTTING
////////////////////////////////////////////////

CrossOverLookbackCandles = input.int(10, group= "RESISTANCE")

resistanceSRC = input(high, group= "RESISTANCE")
resistanceLEFT = input(10, group= "RESISTANCE")
resistanceRIGHT = input(10, group= "RESISTANCE")

hih = ta.pivothigh(resistanceSRC, resistanceLEFT, resistanceRIGHT)
top = ta.valuewhen(hih, resistanceSRC[resistanceRIGHT], 0)

res = plot(top, color=top != top[1] ? na : color.new(#00ff00, 50), offset=-resistanceLEFT, linewidth=2, title="Resistance Line")

EMA_12_Low = ta.lowest(EMA_12, CrossOverLookbackCandles)
EMA_26_Low = ta.lowest(EMA_26, CrossOverLookbackCandles)


////////////////////////////////////////////////
////////////////RSI INPUT and PLOTTING
////////////////////////////////////////////////
RSI = ta.rsi(close, 14)
RSILowerRange = input.int(50, tooltip = "RSI value should be ABOVE this value for entry", group = "RSI")
RSIUpperRange = input.int(70, tooltip = "RSI value should be BELOW this value for entry", group = "RSI")



////////////////////////////////////////////////
////////////////MACD
////////////////////////////////////////////////
fast_length = 12
slow_length = 26
MACD_src = close
signal_length = 9

fast_ma = ta.ema(MACD_src, fast_length)
slow_ma = ta.ema(MACD_src, slow_length)
macd = fast_ma - slow_ma
signal = ta.ema(macd, signal_length)
hist = macd - signal



////////////////////////////////////////////////
////////////////ENTRY CRITERIA
////////////////////////////////////////////////


BUYVALUE= input(100000, tooltip = "Buy qty displayed on chart will be based on this value")

BASEENTRY = macd > signal and RSI > RSILowerRange and RSI < RSIUpperRange and close > EMA_21 and close > ta.sma(close, 7)


Entry= ta.crossover(EMA_12, EMA_26) and BASEENTRY
Entry2 = ta.crossover(close, top) and EMA_12_Low < EMA_26_Low and EMA_12 > EMA_26 and RSI < 70

////////////////////////////////////////////////
////////////////BUY SELL STRATEGY
////////////////////////////////////////////////

if ((Entry and Show_Only_12_26_Crossover_Entry))
    strategy.entry("buy", strategy.long, qty=BUYVALUE/close)

if (Entry2 and Show_12_26_Crossover_and_resistance_Entry)
    strategy.entry("buy", strategy.long, qty=BUYVALUE/close)

strategy.exit("Tg1", "buy", limit=TargetPrice1, qty_percent = Target1_exit_qty)
strategy.exit("Tg2", "buy", limit=TargetPrice2, qty_percent = Target2_exit_qty)



if TSL and Show_TSL_StopLoss and close < EMA_12 
    strategy.close_all ("sl")

if ta.crossunder(EMA_12, EMA_26) and Show_Crossdown_StopLoss
    strategy.close_all ("sl")

if ta.crossunder(close, ta.sma(close, 7)) and Show_SMA7_StopLoss
    strategy.close_all ("sl")