信号対雑音比と移動平均に基づく定量的取引戦略


作成日: 2024-01-02 12:24:35 最終変更日: 2024-01-02 12:24:35
コピー: 1 クリック数: 868
1
フォロー
1621
フォロワー

信号対雑音比と移動平均に基づく定量的取引戦略

1. 戦略の名称

シグナル・トゥ・ノイズ・ムービング・アベレッジ・トレーディング・ストラテジー

2 戦略概要

この戦略は,一定周期間の信噪比を計算し,均線取引信号と組み合わせて,定量取引を実現する.その基本的考え方は:

  1. 特定の周期 ((設定可能) の信噪比を計算する
  2. 対信ノイズ比は平行平行
  3. 現在の通信ノイズ比と平均線值を比較して取引信号を生成
  4. 取引信号に応じて多頭または空頭にする

3つ目 戦略の原則

  1. シグナル・トゥ・ノイズ・レシオの計算式は:StN = -10*log(Σ(1/close)/n) nは周期長です.
  2. 対信ノイズ比は,シンプル移動平均 ((SMA)) を適用して平滑な通信ノイズ比が得られる.
  3. 現在の通信ノイズ比StNと平滑通信ノイズ比SMAStNを比較する: (1) SMAStN > StN,空白する (2) SMAStN < StN ならば,さらに (3) 清算する

4 戦略的優位性分析

この戦略の利点は以下の通りです.

  1. 信用ノイズ比は市場の波動とリスクを判断し,SMAはノイズ消し機能を持っています.
  2. 通信ノイズ比率とSMAを組み合わせて市場リスクを判断し,異なる指標の優位性を活用して取引シグナルを生成
  3. 異なる市場状況に合わせてパラメータ調整戦略を設定できます.
  4. Stdout信号指示で多空を指示し,市場特性を直感的に判断する

5 戦略的リスク分析

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

  1. 音信比と平均線交差判断の誤差のリスク
  2. 周期が正しく設定されていない場合,偽信号が発生する可能性があります.
  3. 空き場は比較的少ないので,パラメータで調整して最適化できます.
  4. 突発的な出来事により,急激な波動が発生し,停止を誘発する可能性があります.

リスクの解決:

  1. 平均線パラメータを調整し,滑りすぎを避ける
  2. サイクルパラメータを最適化して,異なる市場の適応性をテストする
  3. “空き室の条件を調整して空き室の機会を増やす”
  4. 最大損失をコントロールするストップを設定します.

6 戦略の最適化方向

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

  1. より多くの種類の均線の組み合わせをテストする
  2. リスクコントロールの強化
  3. ポジション管理の強化,変動に応じてポジションの調整
  4. 戦略の安定性を高めるために,より多くの判断要素を組み合わせる
  5. 機械学習によるパラメータの自動最適化

VII. 結論

この戦略は,信噪比によって市場の変動リスクを判断し,均線を利用して取引信号を生じ,取引を量化することを実現する.単一の技術指標と比較して,この戦略は,信噪比とSMAのそれぞれの優位性を統合し,リスクを制御しながら安定性を向上させる.パラメータ最適化や機械学習などの方法によって,この戦略には大きな改善の余地があり,信頼できる,効果的な量化取引戦略である.

ストラテジーソースコード
/*backtest
start: 2023-12-25 00:00:00
end: 2023-12-29 10:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
////////////////////////////////////////////////////////////
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © HPotter 05/01/2021
// The signal-to-noise (S/N) ratio. 
// And Simple Moving Average.
// Thank you for idea BlockchainYahoo
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors. 
////////////////////////////////////////////////////////////
SignalToNoise(length) =>
    StN = 0.0
    for i = 1 to length-1
        StN := StN + (1/close[i])/length
    StN := -10*log(StN)

strategy(title="Backtest Signal To Noise ", shorttitle="StoN", overlay=false)
length = input(title="Days", type=input.integer, defval=21, minval=2)
Smooth =  input(title="Smooth", type=input.integer, defval=7, minval=2)
reverse = input(false, title="Trade reverse")
StN = SignalToNoise(length)
SMAStN = sma(StN, Smooth)
pos = iff(SMAStN[1] > StN[1] , -1,
	   iff(SMAStN[1] < StN[1], 1, 0)) 
possig = iff(reverse and pos == 1, -1,
          iff(reverse and pos == -1 , 1, pos))	   
if (possig == 1) 
    strategy.entry("Long", strategy.long)
if (possig == -1)
    strategy.entry("Short", strategy.short)	 
if (possig == 0) 
    strategy.close_all()
barcolor(possig == -1 ? #b50404: possig == 1 ? #079605 : #0536b3 )
plot(StN, title='StN' )
plot(SMAStN, title='Smooth', color=#00ff00)