適応正規化移動平均に基づくクロスマーケット裁定戦略


作成日: 2023-11-16 16:20:11 最終変更日: 2023-11-16 16:20:11
コピー: 0 クリック数: 642
1
フォロー
1617
フォロワー

適応正規化移動平均に基づくクロスマーケット裁定戦略

概要

この戦略は,適応的正規化移動平均を計算することによって,異なる市場間の値取引を実現する.この戦略は,クロスマーケットの値,動的パラメータ調整,リスク制御などの特徴を有する.

戦略原則

この策略は,まず,タイムシーケンスを指定範囲に標準化するためのscaleMinimax関数を定義する。それから,自主正規化移動平均rema関数を定義し,滑らかな信号線sigを計算する。その信号線の計算方法は:

  1. スライドウィンドウを定義し,デフォルトの長さは5日です.
  2. 日々のシグ値は,前日のシグ値と当日の閉盘価格の加重平均である.加重平均は,自己適応加重メカニズムを採用し,現在の値に近づくほど,重さが大きい.
  3. 規則項としてλ参数を加え,sigの変換をより滑らかにする。

信号線を手に入れた後,戦略は信号線と価格の金叉死叉を判断して多空を決定する.具体的には:

  1. 価格が上がった時,もっともっとする.
  2. 価格が上がった時,空を空けてください.

さらに,この策略は,滑らかな因子と表示信号ラインのshow_lineを調整可能なパラメータとして追加し,策略の柔軟性を高めます.

優位分析

従来の移動平均策略と比較して,この策略は以下の利点があります.

  1. 価格の変動に対してより迅速に反応できる自己調整加重メカニズムを導入する.
  2. 正規化項を加え,信号線をより滑らかにし,価格の激変による誤信号を避ける.
  3. 市場間での価格差を利用して利益を得ることができる.
  4. 調整可能なパラメータの設計は柔軟で,市場の状況に応じて最適化することができます.

リスクと解決策

この戦略にはいくつかのリスクがあります.

  1. 双面交差で誤信号が発生する確率は高い. 解決策は,適切な平滑パラメータを調整し,信号線の振動を避けることである.

  2. 市場間レバレッジは,価格関係性があり,動きが一致していることを確認する必要があります. 解決策は,高い関連性のある市場を選択してレバレッジを行うことです.

  3. パラメータの最適化には,十分な歴史データを蓄積し,それを反省する必要があります. 解決策は,実際の取引でパラメータを慎重に調整することです.

最適化の方向

この戦略は,以下の点で最適化できます.

  1. 参数選択では,機械学習アルゴリズムを導入して,自動的に最適化する参数组を導入することができる.

  2. 信号生成では,より多くの指標を組み合わせて,より安定した取引信号を構築することができます.

  3. リスク管理では,単一の損失を制御するためにストップ・ローンを設定できます.

  4. 市場横断の利回りでは,より多くの関連性のある取引品種に拡張できます.

要約する

この戦略は,自主的に移動平均を計算することで,市場間でのレバレッジ取引を可能にします.従来の移動平均戦略と比較して,パラメータ自主化,スムーズな処理,市場間でのレバレッジなどの利点があります.次に,機械学習,組合せシグナル,リスク管理などの方法で戦略をさらに最適化します.

ストラテジーソースコード
/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Crossover82%", overlay=true)

//
// Functions
//
scaleMinimax(X, p, min, max) => 
    hi = highest(X, p), lo = lowest(X, p)
    (max - min) * (X - lo)/(hi - lo) + min

rema(ts, p) => // regularized ma
    rm = 0.0, lambda = .5, a = 2 / (p + 1)
    rm := (nz(rm[1]) + a * (ts - nz(rm[1])) + lambda * (2 * nz(rm[1]) - nz(rm[2]))) / (lambda + 1)
    rm
    
//
// Inputs
//
X = input(close, title="Data source")
smooth = input(2, title="REMA smooth factor")
show_line = input(true, title="Show signal line")

//
// Main
//
p = 5
sig = rema(scaleMinimax(pow(X*p,-X) - 0.1, 100, lowest(X, 100), highest(X, 100)), smooth)

plot(show_line ? sig : na, linewidth=1)
plot(cross(sig, X) ? ohlc4 : na, style=circles, linewidth=8, color=blue, transp=50)

longCondition = crossover(sig, X)
if (longCondition)
    strategy.entry("LE", strategy.long)

shortCondition = crossunder(sig, X)
if (shortCondition)
    strategy.entry("SE", strategy.short)