定量取引に基づくシグナル対ノイズ移動平均取引戦略

作者: リン・ハーンチャオチャン,日付: 2024-01-02 12:24:35 詳細はこちら
タグ:

img

I. 戦略名

シグナルからノイズへの移動平均取引戦略

戦略の概要

この戦略は,一定の期間における信号対ノイズ比を計算し,移動平均取引信号と組み合わせることで,定量的な取引を実現する.基本的なアイデアは:

  1. 特定の期間における信号/ノイズ比を計算する (調整可能)
  2. シグナルとノイズ比を平らにする移動平均を適用する
  3. 取引シグナルを生成するために,現在の信号/ノイズ比を移動平均値と比較する
  4. トレーディング・シグナルに基づく長または短

戦略の原則

  1. 信号とノイズ比 (StN) を計算する式は StN = -10*log ((Σ(1/close) /n で,n は周期長さである.
  2. 均等なStNを得るため,信号/ノイズ比に単純な移動平均 (SMA) を適用する.
  3. 現在のStNとスムーズ化されたSMAStNを比較する: (1) SMAStN > StN で,ショート (2) SMAStN < StN ならば,長引く (3) そうでなければ,閉ざされたポジション

IV 利点分析

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

  1. StNは市場変動とリスクを判断できる SMAはノイズ削減能力がある
  2. 市場リスクを判断するためのStNとSMAを組み合わせて取引信号を生成することで,異なる指標の利点が利用されます.
  3. 調整可能なパラメータ
  4. Stdout信号は,市場特性の直感的な判断を直接表示し,長か短か

V.リスク分析

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

  1. StNとMAの間の交差判断に偏差リスクがある
  2. 誤った周期設定は,誤った信号を引き起こす可能性があります.
  3. パラメータ調整によって最適化できる,比較的少ない短い機会
  4. ブラック・スワンによる極端な変動がストップ・ロスを引き起こす可能性があります.

解決策:

  1. オーバースムージングを避けるためにMAパラメータを調整する
  2. 期間パラメータを最適化し,異なる市場で適応性をテストする
  3. 短期間条件を調整し,より短い機会を提供
  4. 最大損失を制御するためにストップ損失を設定する

VI.最適化の方向性

戦略は以下の方法で最適化できます.

  1. 移動平均の種類を複数組み合わせた試験
  2. リスク管理にストップ・ロスのメカニズムを追加する
  3. ポジション管理を追加し,変動に基づいてポジションを調整
  4. 安定性を高めるためにより多くの要素を組み込む
  5. パラメータを自動的に最適化するために機械学習方法を使用する

VII.要約

この戦略は,シグナル対ノイズ比による市場リスクを判断し,移動平均から取引信号を生成することによって定量的な取引を実現する.単一の技術指標と比較して,この戦略は,リスクを制御しながら安定性を向上させるために,StNと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)

もっと