Двойная скользящая средняя и MACD объединены в краткосрочную стратегию


Дата создания: 2023-10-09 16:47:42 Последнее изменение: 2023-10-09 16:47:42
Копировать: 0 Количество просмотров: 749
1
Подписаться
1617
Подписчики

Обзор

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

Принципы

Эта стратегия основана на следующих принципах:

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

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

  3. В сочетании с Stochastic RSI показатель определяет, перекупается ли перепродажа. Этот показатель в сочетании с KDJ и RSI показателями может показать, что рынок перекупается и перепродается. Когда показатель ниже 20, это перепродажа, в сочетании с другими показателями; когда показатель выше 80, это перекуп, в сочетании с другими показателями.

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

  5. Управление рисками с использованием стоп-стоп-пойнтов.

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

Эта стратегия имеет следующие преимущества:

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

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

  3. Параметры Stochastic RSI были оптимизированы, чтобы хорошо распознавать перекуп и перепродажу.

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

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

Риск

Однако эта стратегия также несет в себе некоторые риски:

  1. По данным агентства, в результате взлома в сети Facebook в июле этого года произошла крупная утечка данных.

  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 )