コッポック曲線に基づく量的な取引戦略

作者: リン・ハーンチャオチャン,日付: 2023年11月13日 11:44:55
タグ:

img

概要

この戦略は,定量的な取引を実施するために,あまり知られていないコポック曲線技術指標を利用している.コポック曲線は,S&P 500などの市場指数またはSPY ETFのような取引対価の変動率 (ROC) の重度の移動平均を採取することによって導かれる.コポック曲線がゼロを超えると買い信号が生成され,下を横切ると売り信号が生成される.利益をロックするためにオプションのトライルストップ損失が利用可能である.この戦略は,他のETFや株式に対する取引信号を生成するための代理として$SPYコポック曲線を使用する.

原則

この戦略は,取引信号を生成するための技術指標としてコポック曲線を使用しています.コポック曲線式は:

コッポック曲線 = 10 期間の WMA (14 期間の ROC + 11 期間の ROC)

ローナンス・レジスタンス・レジスタンス・レジスタンス・レジスタンス・レジスタンス・レジスタンス

この戦略は,$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)
    


もっと