Стратегия торговли, основанная на комбинации прорыва EMA и K-линейного паттерна с несколькими временными рамками

Автор:Чао Чжан, Дата: 2024-02-21 15:00:06
Тэги:

img

Обзор

Эта стратегия объединяет несколько индикаторов EMA временных рамок и суждения о моделях K-линии для достижения относительно чувствительного долгосрочного захвата сигнала и выхода стоп-лосса.

Принцип стратегии

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

  1. EMA: использует 2 набора из 13 и 21 цикла EMA для определения торгового сигнала при прорыве цены.

  2. K-линейный шаблон: оценивает направление K-линейного объекта и использует его с индикатором EMA для фильтрации ложных прорывов.

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

  4. Возвышение в временном делении: 120 цикл закрытия выше открыт для суждения как возвышение в временном делении, как вспомогательное суждение.

Правила генерации торговых сигналов:

  1. Бычий сигнал: Быстрая EMA прорывается через медленную EMA вверх с линией Ян K-линией, закрывает короткую позицию и открывает длинную.

  2. Медвежий сигнал: Быстрая EMA переходит через медленную EMA с линией Yin-линией K, плоской длинной позицией.

  3. Выход с остановкой потери: выход с остановкой потери на текущем положении при появлении обратного сигнала.

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

  1. Индикаторы EMA с несколькими временными рамками более надежно оценивают тенденцию и избегают ложных прорывов.
  2. В сочетании с направлением K-линии для фильтрации для более точного определения тенденций.
  3. Увеличьте распределение времени и поддержку сопротивления для обеспечения качества сигнала.
  4. Используйте обратные сигналы, чтобы уменьшить риск потери.

Риски

  1. Риск недействительных прорывов, приводящих к убыткам.
  2. Риск ненадлежащего выбора параметров. Неправильное настройка циклов EMA, циклов суждения K-линии приведет к снижению качества сигнала.
  3. Риск отказа в сопротивлении поддержки. Исторический отказ в сопротивлении поддержки распространен, это также приведет к отсутствию импульса при генерировании сигналов.
  4. Риск неудачи временного деления: ситуация временного деления меняется и не может полностью опираться на него для суждения.

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

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

  1. Внедрение моделей машинного обучения для оказания помощи в суждениях. Обучение моделей классификации для оценки направлений K-линейных объектов для повышения точности.
  2. Увеличьте адаптивный механизм остановки потери, такой как остановки отслеживания или остановки на основе волатильности.
  3. Сочетание сентиментального анализа. Введение определенных суждений о мнении СМИ, чтобы избежать серьезного негативного влияния новостей.
  4. Добавить модуль управления размером позиций. Ввести фиксированные коэффициенты размеров позиций или размеров на основе управления фондами.

Заключение

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


/*backtest
start: 2023-02-14 00:00:00
end: 2024-02-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title='ck - CryptoSniper Longs Only (Strategy)', shorttitle='ck - CryptoSniper Longs (S) v1', overlay=true, precision=2, commission_value=0.25, default_qty_type=strategy.percent_of_equity, pyramiding=0, default_qty_value=100, initial_capital=100)

open_long = 0
close_position = 0
last_long=close
last_short=close

//Candle body resistance Channel-----------------------------//
len = 34
src = input(close, title="Candle body resistance Channel")
out = sma(src, len)
last8h = highest(close, 13)
lastl8 = lowest(close, 13)
bearish = cross(close,out) == 1 and falling(close, 1)
bullish = cross(close,out) == 1 and rising(close, 1)
channel2=false

//-----------------Support and Resistance 
RST = input(title='Support / Resistance length:', defval=10) 
RSTT = valuewhen(high >= highest(high, RST), high, 0)
RSTB = valuewhen(low <= lowest(low, RST), low, 0)

//--------------------Trend colour ema------------------------------------------------// 
src0 = close, len0 = input(13, minval=1, title="EMA 1")
ema0 = ema(src0, len0)
direction = rising(ema0, 2) ? +1 : falling(ema0, 2) ? -1 : 0

//-------------------- ema 2------------------------------------------------//
src02 = close, len02 = input(21, minval=1, title="EMA 2")
ema02 = ema(src02, len02)
direction2 = rising(ema02, 2) ? +1 : falling(ema02, 2) ? -1 : 0

//=============Hull MA//
show_hma = false
hma_src = input(close, title="HullMA Source:")
hma_base_length = input(8, minval=1, title="HullMA Base Length:")
hma_length_scalar = input(5, minval=0, title="HullMA Length Scalar:")
hullma(src, length)=>wma(2*wma(src, length/2)-wma(src, length), round(sqrt(length)))

//============ signal Generator ==================================//
Period=input(title='Period', defval='120')
ch1 = request.security(syminfo.tickerid, Period, open)
ch2 = request.security(syminfo.tickerid, Period, close)

// Signals//
long = crossover(request.security(syminfo.tickerid, Period, close),request.security(syminfo.tickerid, Period, open))
short = crossunder(request.security(syminfo.tickerid, Period, close),request.security(syminfo.tickerid, Period, open))
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])
long_signal = crossover(last_long, last_short) ? 1 : -1
short_signal = crossover(last_short, last_long) ? -1 : 1

if (long_signal == 1)
    strategy.entry("Long Open", strategy.long)

if (short_signal == -1)
    strategy.close("Long Open")
    
if (long_signal[1] == 1 and short_signal[1] == 1)
    open_long := 1
    close_position := 0

if (short_signal[1] == -1 and long_signal[1] == -1)
    open_long := 0
    close_position := 1

plotshape(open_long == 1, title="Open Long", location=location.belowbar, style=shape.triangleup, size=size.small, color=green, transp=10)
plotshape(close_position == 1, title="Close Long", location=location.abovebar, style=shape.triangledown, size=size.small, color=red, transp=10)
//plot(0, title="Trigger", color=white)

///////////////////////////////////////////////////////////////////////////////////////////

Больше