カルマンフィルターと平均逆転に基づいたトランシティブ比率取引戦略

作者: リン・ハーンチャオチャン開催日:2023年12月29日 17:23:14
タグ:

img

概要

この戦略は,株式価格の異常な短期変動を把握し,株式の指向取引を実施するために,カルマンフィルターと平均逆転の概念を利用する.この戦略は,まず株式と市場指数との間の価格比モデルを確立し,その後,比率を予測しフィルタリングするためにカルマンフィルター技術を使用する.比率が通常のレベルから逸脱すると取引信号が生成される.さらに,この戦略は偽取引を避けるためにボリュームフィルタリングも組み込む.

戦略原則

この戦略の核心理念は,株式そのものの価格と市場指数の価格との間の価格比率モデルを確立することである.この比率は,全体市場との関係で個々の株式の価格水準を反映する.比率が高くなった場合,個々の株式が過大評価され,販売信号が生成されると考えられる.比率が低くなった場合,個々の株式が過大評価され,購入信号が生成されると考えられる.

カルマンフィルターは,比率信号をスムーズにフィルタリングするために,カルマンフィルターアルゴリズムを採用する. カルマンフィルターは比率の実際の観測値と予測値を重み付け,比率の予測をリアルタイムで更新する. そしてスムーズなカルマンフィルター値を計算する. フィルタリング値が通常の値以上または以下の2標準偏差を超えると取引信号が生成される.

また,戦略は取引量要因も考慮する.実際の取引信号は,取引量が大きいときにのみ生成される.これはいくつかの偽取引を回避する.

利点分析

この戦略の最大の利点は,カルマンフィルターアルゴリズムを使用して価格比率の効率的なスムーズ化と予測である.単純な平均逆転モデルと比較して,カルマンフィルターは,特に価格が急激に変動するときに,価格の動的変化をよりよく反映することができる. これにより,戦略は価格異常を間に合って検出し,正確な取引信号を生成することができます.

第二に,取引量の組み合わせは,戦略の実用的な適用性を高めます.合理的な取引量のフィルタリングは,いくつかの誤った信号を回避し,不必要な取引コストを削減するのに役立ちます.

全体的に見ると,この戦略はカルマンフィルタリング,平均逆転,取引量分析,その他の技術をうまく組み合わせて,堅牢な定量的な取引戦略を形成しています.

リスク分析

この戦略は理論的にも技術的にも妥当ですが 実際の使用には注意を払う必要がある 潜在的なリスクがあります

第"はモデルリスクである.カルマンフィルターモデルのいくつかのキーパラメータ,例えばプロセスノイズバリアンス,観測ノイズバリアンスなど,歴史的なデータに基づいて推定する必要がある.推定が不正確であるか,市場状況が大きく変化した場合,それはモデル予測の偏差につながる.

2つ目は滑り込みコストのリスクである.頻繁な取引により,より高い滑り込みコストが発生し,戦略の収益が損なわれる.パラメータ最適化と取引量フィルタリングは,不必要な取引を一定程度減らすことができます.

最後に,市場指数を基準値として用いることは,ある程度のシステム市場リスクがある.市場全体が急激に変動すると,個々の株式と市場との価格比も異常になる.この戦略は間違った信号を生む.より安定した指数を基準値として選ぶことを検討することができます.

オプティマイゼーションの方向性

戦略をさらに最適化できる余地があります.

  1. より複雑なディープラーニングモデルを使用して価格比を調整し予測します. これによりモデルの正確性と信頼性が向上します.

  2. 取引量フィルタリングルールを最適化して,より動的でスマートなスロージック設定を達成します.これは不正取引の確率を減らすことができます.

  3. 戦略のベンチマークとして異なる市場指数をテストし,より小さく安定した変動を持つ指数を選択します.これは市場のシステムリスクの影響を軽減します.

  4. 基本面が著しく悪化した一部の株式の取引を避けるために,株の基本的分析を組み込む.これはより高い品質の取引目標のスクリーンをします.

  5. 戦略のバックテストと最適化のために高周波のイントラデイデータを使用する.これは戦略の実際の取引パフォーマンスを向上させる.

結論

カルマンフィルターモデルを用いて,この戦略は株式の異常な短期価格変動を成功裏に把握している.一方,ボリュームシグナルの導入は,戦略の実用性を向上させる.まだいくつかのモデルリスクと市場リスクがあるにもかかわらず,これは非常に有望な定量的な取引戦略である.将来のモデルとシグナル最適化において改善と応用の可能性が大きい.


/*backtest
start: 2023-12-21 00:00:00
end: 2023-12-28 00:00:00
period: 1m
basePeriod: 1m
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/
// © xXM3GAXx

//@version=5
strategy("My strategy", overlay=true)

//SPY or QQQ
context = request.security("BTC_USDT:swap", timeframe.period, input(close))
//our stock
particular = input(close)

//ratio
src = ta.roc(particular, 1) / math.abs(ta.roc(context, 1))

//kalman calculation
Sharpness = input.float(1.0)
K = input.float(1.0)


greencolor =  color.lime
redcolor =  color.red

velocity = 0.0
kfilt = 0.0

Distance = src - nz(kfilt[1], src)
Error = nz(kfilt[1], src) + Distance * math.sqrt(Sharpness*K/ 100)
velocity := nz(velocity[1], 0) + Distance*K / 100
kfilt := Error + velocity

//2 std devs up and down
upper = kfilt[1] + 2 * ta.stdev(kfilt, input(20))
lower = kfilt[1] - 2 * ta.stdev(kfilt, input(20))

//plotting for visuals
plot(kfilt, color=velocity > 0 ? greencolor : redcolor, linewidth = 2)
plot(upper)
plot(lower)
//plot(ta.ema(ta.roc(particular, 1)/ta.roc(context, 1), 5), color = #00ffff, linewidth=2)

//volume data
vol = volume
volema = ta.ema(volume, 10)

//buy when ratio too low
longCondition = kfilt<=lower and vol>=volema
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

//sell when ratio too high
shortCondition = kfilt>=upper and vol>=volema
if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)


もっと