Краткосрочная стратегия колебаний на основе CCI и EMA


Дата создания: 2024-01-31 16:01:21 Последнее изменение: 2024-01-31 16:01:21
Копировать: 0 Количество просмотров: 1117
1
Подписаться
1617
Подписчики

Краткосрочная стратегия колебаний на основе CCI и EMA

Обзор

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

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

Стратегия основана на использовании трех средних линий 10-й, 21-й и 50-й ЕМА, а также показателя CCI для определения времени входа и выхода из игры.

Вот логика: Когда кратковременная средняя линия ((10-дневная EMA) пересекает среднесрочную среднюю линию ((21-дневная EMA) и кратковременная средняя линия выше долгосрочной средней линии ((50-дневная EMA), а показатель CCI больше 0, рассматривайте его как многоголовый сигнал, сделайте больше; когда кратковременная средняя линия пересекает среднесрочную среднюю линию ниже и кратковременная средняя линия ниже долгосрочной средней линии, а показатель CCI меньше 0, рассматривайте его как пустой сигнал, сделайте пустоту.

Логика равновесия - это равновесие, когда краткосрочная средняя линия снова пересекает среднесрочную среднюю.

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

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

  2. Использование равных линейных форков и мертвых форков для определения entries и exists, простое и практичное.

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

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

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

  1. Большие колебания в работе коротких линий, возможны большие последовательные потери.

  2. Неправильная настройка параметров показателя CCI может привести к появлению фальшивых сигналов.

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

  4. Подходит только для трейдеров, которые часто работают на коротких линиях, не подходит для длинных линий.

Соответствующие меры реагирования на риск включают: оптимизацию параметров CCI, корректировку стоп-позиции, увеличение условий FILTER и т. д.

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

  1. Можно тестировать комбинацию средних линий ЭМА различной длины, оптимизировать параметры.

  2. Для фильтрации некоторых ложных сигналов можно добавить другие показатели или условия фильтрации. Например, MACD, KDJ и т. Д.

  3. Одноразовые потери можно контролировать с помощью динамического отслеживания стоп-лосса.

  4. Тенденционный индикатор может быть объединен с более высоким временным циклом, чтобы избежать обратной операции.

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

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

Исходный код стратегии
/*backtest
start: 2023-12-31 00:00:00
end: 2024-01-30 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//study(title="Strat CCI EMA scalping", shorttitle="EMA-CCI-strat", overlay=true)
strategy("Strat CCI EMA scalping", shorttitle="EMA-CCI-strat", overlay=true)

exponential = input(true, title="Exponential MA")

// the risk management inputs
inpTakeProfit   = input(defval = 1000, title = "Take Profit", minval = 0)
inpStopLoss     = input(defval = 200, title = "Stop Loss", minval = 0)
inpTrailStop    = input(defval = 200, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)

// === RISK MANAGEMENT VALUE PREP ===
// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

src = close

ma10 = exponential ? ema(src, 10) : sma(src, 10)
ma21 = exponential ? ema(src, 21) : sma(src, 21)
ma50 = exponential ? ema(src, 50) : sma(src, 50)

xCCI = cci(close, 200)

//buy_cond = cross(ma21, ma50) and ma10 > ma21 and (xCCI > 0)
//sell_cond = cross(ma21, ma50) and ma10 < ma21  and (xCCI < 0)

buy_cond = ma10 > ma21 and ma10 > ma50 and xCCI > 0
sell_cond = ma10 < ma21 and ma10 < ma50 and xCCI < 0



// === STRATEGY - LONG POSITION EXECUTION ===
enterLong() => buy_cond
exitLong() => ma10 < ma21
strategy.entry(id = "Long", long = true, when = enterLong()) // use function or simple condition to decide when to get in
strategy.close(id = "Long", when = exitLong()) // ...and when to get out
// === STRATEGY - SHORT POSITION EXECUTION ===
enterShort() => sell_cond
exitShort() => ma10 > ma21
strategy.entry(id = "Short", long = false, when = enterShort())
strategy.close(id = "Short", when = exitShort())

// === STRATEGY RISK MANAGEMENT EXECUTION ===
// finally, make use of all the earlier values we got prepped
//strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
//strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)




//longCondition = buy_cond
//if(longCondition)
//    strategy.entry("Long", strategy.long)
//    strategy.exit("Close Long", "Long", when = exitLong())
    
//shortCondition = sell_cond
//if(shortCondition)
//    strategy.entry("Short", strategy.short)
//    strategy.exit("Close Short", "Short",  when = exitShort())

//plotshape(buy_cond, style=shape.flag, color=green, size=size.normal)
//plotshape(sell_cond, style=shape.flag, color=red, size=size.normal)

c1 = buy_cond==1 ? lime : sell_cond==1 ? red : #a3a3a3 // color

plot( ma10, color=red, style=line, title="10", linewidth=1)
plot( ma21, color=orange, style=line, title="21", linewidth=1)
plot( ma50, color=c1, style=line, title="50", linewidth=3)

//alertcondition(buy_cond, title = "Buy Condition", message = "Buy Condition Alert")
//alertcondition(sell_cond, title = "Sell Condition", message = "Sell Condition Alert")