Двойная скользящая средняя и комбинация MACD краткосрочная стратегия торговли

Автор:Чао Чжан, Дата: 2023-10-09 16:47:42
Тэги:

Обзор

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

Принцип

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

  1. Для определения направления тренда используйте 50-периодную и 100-периодную EMA. EMA с более коротким периодом может быстро реагировать на изменения цен. Пересечение 50-периодной EMA выше 100-периодной EMA означает установление длинной позиции; пересечение вниз означает установление короткой позиции.

  2. Используйте разницу между MACD для определения точек входа и выхода. Когда разница превышает 0, она показывает усиление силы быка и приводит к длинному вхождению; когда она превышает 0, она показывает усиление силы медведя и приводит к короткому вхождению.

  3. Комбинировать показатель СТОХАСТИЧЕСКОГО РСИ для оценки ситуации с перекупленностью и перепроданностью. Этот показатель сочетает в себе преимущества KDJ и RSI и может хорошо показать условия с перекупленностью и перепроданностью. Когда он ниже 20, рынок перепродан, и длинный вход может рассматриваться как сочетание других индикаторов; когда он выше 80, рынок перекуплен, и короткий вход может рассматриваться.

  4. После определения направления входа, если 4 из последних 5 свечей имеют цены закрытия, касающиеся скользящих средних, это показывает, что есть поддержка/сопротивление вокруг скользящих средних, и позиции могут быть открыты.

  5. Используйте стоп-лосс и прибыль для управления рисками.

Преимущества

Преимущества этой стратегии включают:

  1. Сочетание нескольких индикаторов улучшает показатель выигрыша, используя скользящие средние, индикатор перекупленности/перепроданности и индикатор импульса вместе.

  2. Краткосрочные скользящие средние могут быстро улавливать тенденции и переломы.

  3. Стохастические параметры RSI оптимизированы для того, чтобы хорошо идентифицировать условия перекупа/перепродажи.

  4. Использование поддержки/сопротивления вокруг скользящих средних для контроля времени позволяет избежать ловушки поддельных прорывов.

  5. Разумный стоп-лосс и прибыль эффективно контролируют риски для каждой сделки.

Риски

В этой стратегии также есть некоторые риски:

  1. Неудача полностью избежать потерь, вызванных фальшивыми побегами.

  2. Дивергенция может произойти между индикаторами, вызывая несоответствующие торговые сигналы.

  3. Фиксированные стоп-лосс и прибыль могут не адаптироваться к изменениям на рынке.

  4. Сложный код со многими параметрами трудно оптимизировать.

Решения:

  1. Оптимизируйте параметры, чтобы улучшить качество сигнала и снизить вероятность фальшивого прорыва.

  2. Определите приоритеты между показателями, чтобы избежать конфликтов.

  3. Принять динамические стоп-лосс и прибыль на основе диапазонов ATR.

  4. Упростить логику и извлечь основные параметры для тестирования и оптимизации.

Руководство по оптимизации

Стратегия может быть оптимизирована в следующих аспектах:

  1. Проверить и найти оптимальные комбинации скользящих средних периодов и параметров MACD.

  2. Проверить различные показатели перекупленности/перепроданности для замены стохастического RSI.

  3. Попробуйте динамический стоп-лосс и сделайте прибыль, остановитесь, чтобы сделать управление рисками более умным.

  4. Добавьте условия фильтрации, такие как увеличение громкости, чтобы улучшить качество сигнала.

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

  6. Установите лимиты стоп-лосса в зависимости от размера счета, количества сделок в день для контроля общих рисков.

Резюме

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


/*backtest
start: 2023-01-01 00:00:00
end: 2023-10-08 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4

strategy(title="Forex scalper 2xEMA + SRSI + MACD", shorttitle="Forex scalper 5-15min", overlay=true)
src = input(title="Source", type=input.source, defval=close)

src_0 = src[0]
src_1 = src[1]
src_2 = src[2]
src_3 = src[3]
src_4 = src[4]

len50 = input(50, minval=1, title="Length")
src50 = input(close, title="Source")
out50 = ema(src50, len50)
len100 = input(100)
src100 = input(close, title="Source")
out100 = ema(src100, len100)

len1 = input(1, minval=1, title="Length")
src1 = input(close, title="Source")
out1 = sma(src1, len1)

length = input(4, minval=1)
OverBought = input(80)
OverSold = input(20)
smoothK = 3
smoothD = 3

k = sma(stoch(close, high, low, length), smoothK)
d = sma(k, smoothD)
cu = crossover(k,OverSold)
co = crossunder(k,OverBought)

sma_down = crossunder(out1, out50)
sma_up = crossover(out1,out50)

//if (not na(k) and not na(d))
  //  if (co and k < OverSold)
    //    strategy.entry("StochLE", strategy.long, comment="StochLE")
    //if (cu and k > OverBought)
     //   strategy.entry("StochSE", strategy.short, comment="StochSE")

crossCandle_4 = crossover(src[4],out50)
crossCandleUnder_4= cross(src[4],out50)
crossCandle_3 = crossover(src[3],out50)
crossCandleUnder_3= crossunder(src[3],out50)
crossCandle_2 = crossover(src[2],out50)
crossCandleUnder_2= crossunder(src[2],out50)
crossCandle_1 = crossover(src[1],out50)
crossCandleUnder_1= crossunder(src[1],out50)
crossCandle_0 = crossover(src[0],out50)
crossCandleUnder_0= crossunder(src[0],out50)

conditionOver = (crossCandle_4 or crossCandle_3 or crossCandle_2 or crossCandle_1 or crossCandle_0)
conditionUnder =(crossCandleUnder_4 or crossCandleUnder_3 or crossCandleUnder_2 or crossCandleUnder_1 or crossCandleUnder_0)

touch4 = (cross(low[4],out50) or cross(high[4],out50))
touch3 = (cross(low[3],out50) or cross(high[3],out50))
touch2 = (cross(low[2],out50) or cross(high[2],out50))
touch1 = (cross(low[1],out50) or cross(high[1],out50))

touch = touch1 or touch2 or touch3 or touch4

//and sma_up
//and sma_down

// Getting inputs
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src_macd = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 10)
sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=false)

// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00

// Calculating
fast_ma = sma_source ? sma(src_macd, fast_length) : ema(src_macd, fast_length)
slow_ma = sma_source ? sma(src_macd, slow_length) : ema(src_macd, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal

//plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 )
//plot(macd, title="MACD", color=col_macd, transp=0)
//plot(signal, title="Signal", color=col_signal, transp=0)


// plot((conditionOver or conditionUnder or touch)  and src[0] >= out50 and close >= out50 and  (cu) and out50 > out100 and hist>=0 , title="Buy", style=columns, color=lime)
// plot((conditionOver or conditionUnder or touch)  and src[0] <= out50 and close <= out50 and  (co) and out50< out100 and hist<=0 , title="sell", style=columns, color=red)


long_cond = ((conditionOver or conditionUnder or touch)  and src[0] >= out50 and close > out50 and  (cu) and out50 > out100 and hist>=0)
short_cond = ((conditionOver or conditionUnder or touch)  and src[0] <= out50 and close < out50 and  (co) and out50< out100 and hist<=0)

tp=input(200)
sl=input(200)

strategy.entry("long",strategy.long, when=long_cond)
strategy.entry("short",strategy.short, when=short_cond)

strategy.exit("X_long", "long", profit=tp,  loss=sl, when=touch  )
strategy.exit("x_short", "short",profit=tp, loss=sl,when = touch )

Больше