Стратегия скальпинга, основанная на CCI и EMA

Автор:Чао Чжан, Дата: 2024-01-31 16:01:21
Тэги:

img

Обзор

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

Логика стратегии

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

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

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

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

  1. Сочетание системы скользящей средней и показателя CCI позволяет эффективно выявлять краткосрочные тенденции цен и уровни перекупленности/перепроданности.

  2. Использование скользящих средних перекресток для определения входов и выходов просто и практично.

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

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

Риски

  1. Большие колебания в краткосрочных операциях могут привести к последовательным стоп-лосс.

  2. Неправильные настройки параметров CCI могут увеличить количество ложных сигналов.

  3. В периоды ограничения диапазона и консолидации эта стратегия может иметь несколько небольших потерь.

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

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

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

  1. Для оптимизации параметров можно испытать различные комбинации длин EMA.

  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")

Больше