Эта стратегия использует менее известный технический индикатор кривой Коппока для реализации количественной торговли. Кривая Коппока получена путем принятия взвешенной скользящей средней скорости изменения (ROC) рыночного индекса, такого как S&P 500 или торгового эквивалента, такого как SPY ETF. Сигналы покупки генерируются, когда кривая Коппока пересекает нуль, а сигналы продажи, когда она пересекает ниже. Для блокировки прибыли доступен дополнительный стоп-лосс. Стратегия использует кривую Коппока $SPY в качестве прокси для генерации торговых сигналов на другие ETF и акции.
Стратегия использует кривую Коппока в качестве технического индикатора для генерации торговых сигналов.
Кривая Коппока = 10-периодическая WMA (14-периодическая ROC + 11-периодическая ROC)
В случае, когда ставка изменения ROC рассчитывается как: (Текущее закрытие - закрытие N периодов назад) / закрытие N периодов назад
Стратегия рассчитывает кривую Коппока на основе цены закрытия $SPY. Сигналы покупки генерируются, когда кривая пересекает нуль, и сигналы продажи, когда она пересекает ниже.
Стратегия использует уникальные характеристики кривой кривой Коппока для генерации торговых сигналов. По сравнению с обычными индикаторами кривая Коппока имеет более сильную предсказательную способность. Но как самостоятельный индикатор, ее надежность нуждается в проверке. Рекомендуется комбинировать ее с другими факторами для фильтрации ложных сигналов. Благодаря оптимизации параметров, оптимизации стоп-лосса и комбинации с другими индикаторами эта стратегия может стать эффективной количественной торговой системой.
/*backtest start: 2023-10-13 00:00:00 end: 2023-11-12 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © RolandoSantos //@version=4 strategy(title = "Coppock Curve", shorttitle = "Copp Curve Strat", default_qty_type=strategy.cash, default_qty_value=10000, initial_capital=10000) ///trail stop longTrailPerc = input(title="Trail Long Loss (%)", minval=0.0, step=0.1, defval=100) * 0.01 // Determine trail stop loss prices longStopPrice = 0.0 longStopPrice := if (strategy.position_size > 0) stopValue = close * (1 - longTrailPerc) max(stopValue, longStopPrice[1]) else 0 //Use SPY for Copp Curve entries and exits// security = input("SPY") ticker = security(security, "D", close) ///Copp Curve//// wmaLength = input(title="WMA Length", type=input.integer, defval=10) longRoCLength = input(title="Long RoC Length", type=input.integer, defval=14) shortRoCLength = input(title="Short RoC Length", type=input.integer, defval=11) source = ticker curve = wma(roc(source, longRoCLength) + roc(source, shortRoCLength), wmaLength) ///Lower Band Plot/// band1 = hline(0) band0 = hline(100) band2 = hline(-100) fill(band1, band0, color=color.green, transp=90) fill(band2, band1, color=color.red, transp=90) plot(curve, color=color.white) ///Trade Conditions/// Bull = curve > 0 Bear = curve < 0 ///Entries and Exits// if (Bull) strategy.entry("Long", strategy.long, comment = "LE") if (Bear) strategy.close("Long", qty_percent=100, comment="close") // Submit exit orders for trail stop loss price if (strategy.position_size > 0) strategy.exit(id="Long Trail Stop", stop=longStopPrice)