適応型規則化移動平均市場間仲裁戦略

作者: リン・ハーンチャオチャン,日付: 2023-11-16 16:20:11
タグ:

img

概要

この戦略は,適応型正規化移動平均線を計算することによって,異なる市場間の仲介取引を実装する.この戦略には,クロスマーケット仲介,動的パラメータ調整,リスク管理などがあります.

戦略原則

この戦略は,まずスケールミニマックス関数を定義し,指定範囲に時間列を標準化します.次に,調整式正規化移動平均関数 rema を定義して,スムーズ信号線 sig を計算します.信号線の計算は:

  1. スライドウィンドウを定義します デフォルトの長さは5日です

  2. 各日の sig 値は,前の sig 値と現在の閉場価格の重度の平均である.重度は適応型重量化メカニズムを使用して,現在の価格に近い値がより重量化される.

  3. シグの移行をスムーズにするため, λパラメータを規則化器として追加する.

シグナルラインを取得した後,戦略は信号ラインと価格の黄金/死十字に基づいて,ロング/ショートを決定します.具体的には:

  1. SIGが価格を超えると,ロングする.

  2. SIGが価格を下回るとショートします

さらに,この戦略は柔軟性を高めるために調整可能なパラメータとしてスムーズファクターとshowlineを追加します.

利点分析

伝統的な移動平均戦略と比較して,この戦略には以下の利点があります.

  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)



もっと