時系列データに基づく適応型動的閾値戦略


作成日: 2024-04-01 10:48:52 最終変更日: 2024-04-01 10:48:52
コピー: 2 クリック数: 613
1
フォロー
1617
フォロワー

時系列データに基づく適応型動的閾値戦略

概要

この戦略は,株式または他の金融資産の純価値時間序列データに基づいて,指数移動平均の平滑因子としての効率比 (ER) を動的に計算することで,順応的に上下を調整して,買入シグナルを触発する.この戦略の主な考え方は,純価値データ自体に含まれるすべての情報を利用して,純価値の変化の複雑さを計算することによって,動的にEMA平滑因子を調整して,動的に変化の上下を得ることである.価格が上下を突破するときにポジションを開く.

戦略原則

  1. 純資産データの効率比 (ER) を計算する.すなわち,純資産の変化量と総変化量との比である.ERの値が小さいほど,純資産の変化は平らである.ERの値が大きいほど,純資産の変化は激烈である.
  2. ERをpine_ema関数の平滑因子alphaとして,動的に計算される純値のEMA平均値と絶対偏差.
  3. EMAの平均値と絶対偏差を足して,動態の変化の上昇と下落を計測する.
  4. 現時点の純資産が上位を突破すると多額開設し,下位を突破すると平額開設する.

戦略的優位性

  1. 純時系列データに含まれるすべての情報を充分に活用し,パラメータや最適化を設定する必要なく,簡潔で自然に処理します.
  2. ERを動的に計算することでEMA平滑因子を調整し,純資産の変化の複雑さに対応し,市場の変化に柔軟に対応できる.
  3. 動的EMAは,従来の固定パラメータEMAと比較して,取引回数と保有時間を効率的に削減し,取引コストとリスクを削減します.
  4. 撤収を効果的に制御できる.この戦略は,買入保有と比較して最大撤収を2-3倍減らすか,同じ撤収で収益を2-3倍上げる.
  5. ポリシーの自動切り替えを目的として,複数のポリシーの組み合わせに簡単に適用できます.

戦略リスク

  1. この戦略は,純資産時間序列データに基づいており,価格動向が根本的に逆転した場合には,平仓を誘発する速度が遅い可能性があるため,利益に影響する.
  2. この戦略は自主的にパラメータを調整できるが,極端な状況への適応性については,さらに研究が必要である.
  3. この戦略は,現在,主に多額の投資を対象としているが,空調の場合はさらに改善が必要である.
  4. 実用的には,この戦略は,長期的に向上する標識を選び,標識の選択の質の要求が高くなります.

戦略最適化の方向性

  1. ERの計算方法のさらなる最適化を検討し,純資産の変化特性を反映した指標を導入し,ERの安定性と有効性を向上させることができる.
  2. 戦略の収益性とリスク抵抗性を向上させるため,移動ストップストップ,パーセントストップストップなどの追加を検討することで,平仓条件をさらに細かくすることができます.
  3. 異なる基準と市場環境に対応して,戦略のパラメータ最適化と適応性調整を行い,戦略の普遍性を向上させることができる.
  4. この戦略は,他の戦略 (トレンド追跡,平均回帰など) と組み合わせて,異なる戦略の優位性を発揮し,ポートフォリオの安定性と収益性を向上させることができる.

要約する

この戦略は,ダイナミックな計算効率比 (ER) を指数移動平均 (EMA) として平滑因子として,自主的に上下軌道に調整して,買賣シグナルを触発する.この戦略は,純資産時間序列データに含まれる情報を充分利用し,過度のパラメータ設定と最適化を必要とせず,方法は簡潔で自然であり,市場変化に柔軟に対応し,撤回を効果的に制御することができる.しかし,この戦略は,極端な状況への適応性については,さらなる調査が待っています.実際のアプリケーションで必要な指標の選択に注意してください.将来,計算方法,開設条件,パラメータ最適化,戦略の組み合わせなどに関して,この戦略をさらに最適化して完善し,戦略の安定性と収益性を向上させることができます.

ストラテジーソースコード
/*backtest
start: 2023-03-26 00:00:00
end: 2024-03-31 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy('Equity control', 'EC')
// study('Exponential bands', 'EB', overlay = true)


er(src) =>
    var start = src
    var total = 0.0

    total += abs(src - nz(src[1], src))
    net    = abs(src - start          )
    
    net / total

pine_ema(src, alpha) =>
    mean = 0.0
    dev  = 0.0

    mean := na(mean[1]) ? src : (1 - alpha) * mean[1] + alpha *     src
    dev  := na(dev [1]) ? 0   : (1 - alpha) * dev [1] + alpha * abs(src - mean)

    [mean, dev]


src = input(close)


a           = er      (src   )
[mean, dev] = pine_ema(src, a)

dev_lower = mean - dev
dev_upper = mean + dev


// plot(dev_lower, 'lower deviation', color.silver, 2, plot.style_stepline)
// plot(mean     , 'basis'          , color.purple, 1, plot.style_stepline)
// plot(dev_upper, 'upper deviation', color.silver, 2, plot.style_stepline)


if src > dev_upper
    strategy.entry('event', true, comment = 'on')
if src < dev_lower
    strategy.close('event', comment = 'off')


plot(strategy.equity)

//bigDope