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

Автор:Чао Чжан, Дата: 2023-11-13 11:44:55
Тэги:

img

Обзор

Эта стратегия использует менее известный технический индикатор кривой Коппока для реализации количественной торговли. Кривая Коппока получена путем принятия взвешенной скользящей средней скорости изменения (ROC) рыночного индекса, такого как S&P 500 или торгового эквивалента, такого как SPY ETF. Сигналы покупки генерируются, когда кривая Коппока пересекает нуль, а сигналы продажи, когда она пересекает ниже. Для блокировки прибыли доступен дополнительный стоп-лосс. Стратегия использует кривую Коппока $SPY в качестве прокси для генерации торговых сигналов на другие ETF и акции.

Принципы

Стратегия использует кривую Коппока в качестве технического индикатора для генерации торговых сигналов.

Кривая Коппока = 10-периодическая WMA (14-периодическая ROC + 11-периодическая ROC)

В случае, когда ставка изменения ROC рассчитывается как: (Текущее закрытие - закрытие N периодов назад) / закрытие N периодов назад

Стратегия рассчитывает кривую Коппока на основе цены закрытия $SPY. Сигналы покупки генерируются, когда кривая пересекает нуль, и сигналы продажи, когда она пересекает ниже.

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

  • Использует уникальный индикатор кривой Коппока, который имеет лучшую предсказательную силу, чем обычные индикаторы, такие как скользящие средние
  • Конфигурируемые параметры для оптимизации, такие как период WMA, период ROC и т. д.
  • Использует $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)
    


Больше