Это краткосрочная стратегия колебаний торговли, которая объединяет индикатор EMA и индикатор CCI для выявления краткосрочных тенденций и уровней перекупленности/перепроданности на рынке, с тем чтобы использовать возможности от краткосрочных колебаний цен.
Стратегия в основном использует 10-дневные, 21-дневные и 50-дневные линии EMA и индикатор CCI для определения сроков входа и выхода.
Конкретная логика такова: Когда краткосрочная скользящая средняя (10-дневная EMA) пересекается выше средней скользящей средней (21-дневной EMA) и краткосрочная скользящая средняя выше долгосрочной скользящей средней (50-дневной EMA), и в то же время индикатор CCI больше 0, это считается бычьим сигналом для длинного хода. Когда краткосрочная скользящая средняя пересекается ниже средней скользящей средней и краткосрочная скользящая средняя ниже долгосрочной скользящей средней, и в то же время индикатор CCI меньше 0, это считается медвежьим сигналом для короткого хода.
Логика выхода заключается в том, чтобы закрыть позицию, когда краткосрочная скользящая средняя пересекает обратно среднесрочную скользящую среднюю.
Сочетание системы скользящей средней и показателя CCI позволяет эффективно выявлять краткосрочные тенденции цен и уровни перекупленности/перепроданности.
Использование скользящих средних перекресток для определения входов и выходов просто и практично.
Параметры CCI и настройки цикла более разумны для фильтрации некоторых ложных сигналов.
Принятие нескольких временных рамок скользящих средних может получить лучшие возможности для торговли на колеблющихся рынках.
Большие колебания в краткосрочных операциях могут привести к последовательным стоп-лосс.
Неправильные настройки параметров CCI могут увеличить количество ложных сигналов.
В периоды ограничения диапазона и консолидации эта стратегия может иметь несколько небольших потерь.
Подходит только для краткосрочных постоянных трейдеров, не подходит для долгосрочного хранения.
В соответствии с этим, в качестве мер по снижению риска следует учитывать: оптимизацию параметров CCI, корректировку позиции стоп-лосса, добавление условий фильтрации и т.д.
Для оптимизации параметров можно испытать различные комбинации длин EMA.
Другие индикаторы или условия фильтрации могут быть добавлены для фильтрации некоторых ложных сигналов, таких как MACD, KDJ и т. д.
Используйте динамические стоп-потери для контроля одиночных потерь.
Объединение более высоких индикаторов тренда может избежать торговли против тренда.
В целом, это типичная краткосрочная стратегия колебаний, которая использует перекрестный переход скользящих средних линий в сочетании со статусом перекупленности / перепроданности индикатора 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")