取引量の標準偏差に基づく取引戦略

作者: リン・ハーンチャオチャン,日付: 2023年11月21日 11:11:51
タグ:

img

概要

この戦略は,取引量の移動平均値と標準偏差値を用いて取引量モデルを構築し,取引量が正常なときに取引信号を生成するために価格の移動平均値でトレンド方向を決定する.また,取引量が異常なときに間違った信号を避けるために取引量の上限と下限を設定する.

戦略の論理

基本論理は 取引量モデルを構築し 価格動向を判断することです

  1. トレーディング・ボリュームモデルを構築する
    • バランスラインとして 40 期間の移動平均値を計算します.
    • 常軌波動範囲として体積vsdの40期標準偏差を計算する.
    • 最新のボリュームレベルとして,ボリューム vavgn の 5 期間の移動平均を計算する.
    • 容量の下限を vavg-1×vsdとして設定する
    • 容量の上限を vavg + 2 × vsd として設定する
  2. 裁判官価格の動向
    • 価格動向の指標として,閉値MAVGの20期間の移動平均を計算する.
  3. 取引信号を生成する
    • Mvgが前日の値を超え,vvgnが低限を超えると,ロング
    • Mvgが前日の値を下回り,vvgnが低限を超えると,ショート
    • MAVG トレンドが逆転したとき,ポジションを閉じる

この戦略は,取引量モデルと価格傾向を組み合わせて,取引量が異常なときに価格傾向を追いかけるのを避けるため,いくつかの誤った信号をフィルタリングすることができます.

利点分析

  1. 価格動向を判断するためにボリューム変化を組み合わせることで,いくつかの偽信号をフィルターし,取引信号をより信頼性のあるものにすることができます.
  2. 標準偏差を用いた取引量モデルを構築することで,極端な取引量影響が回避される.
  3. 移動平均の調整可能なパラメータは,異なるサイクルにおける価格変化に適応できる.

リスク分析

  1. 価格の動向が欠落するため,短期的に価格と価格が異なる可能性があります.
  2. 音量パラメータの設定が正しくない場合,モデルが故障する可能性があります.
  3. ストップ・ロスの戦略がない場合,大きな損失につながる可能性があります.

解決策:

  1. モデルを最適化するために移動平均パラメータを適切に調整
  2. 単一の損失を制御するストップ損失論理を追加

オプティマイゼーションの方向性

  1. 価格動向を判断するためにより多くの指標を追加し,より信頼性の高いシグナルを作ります
  2. データに基づく量と価格モデルのパラメータを訓練するための機械学習モジュールを増やす
  3. 過剰な単一の損失を防ぐためにストップ損失ロジックを追加
  4. トレンドを捉える可能性が高いようにエントリーロジックを最適化する
  5. ATR のような指標を組み合わせて,ストップ損失距離を自動的に調整します.

概要

この戦略の全体的な論理は明確で,誤ったトレンドを追いかけるのを避けるためにボリュームを使用し,エントリーシグナルは比較的信頼性があります.しかし,戦略自体は拡張のための広い余地でシンプルです.より多くの指標,機械学習,ストップ損失および他のモジュールを追加することで,安定性とトレンドを捕捉する能力をさらに向上させることができます.これは典型的なトレンドを追いかける戦略です.最適化後,非常に実践的な定量戦略になることができます.


/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © dongyun

//@version=4
strategy("交易量底部标准差系统", overlay=true)

options = input(1,'')
length = input(40,'')
nlow = input(5,'')
factor = input(1.0,'')

vavg = 0.0
vavgn = 0.0
vsd = 0.0
lowlimit = 0.0
uplimit = 0.0
mavg = 0.0
aror = 0.0
adjvol = 0.0
savevol = 0.0


//Find average volume, replacing bad values
adjvol := volume

if (volume != 0)
	savevol := volume
else
	savevol := savevol[1]
	adjvol := savevol


// Replace high volume days because they distort standard deviation
if (adjvol > 2 * factor * nz(vsd[1]))
	adjvol := savevol
else
	adjvol := adjvol[1]

vavg := sma(adjvol,length)
vsd := stdev(adjvol,length)
vavgn := sma(adjvol,nlow)

// Extreme volume limits
lowlimit := vavg - factor * vsd
uplimit := vavg + 2 * factor * vsd

// System rules based on moving average trend
mavg := sma(close,length/2)

// Only enter on new trend signals
if (options == 2)
	if (mavg > mavg[1] and mavg[1] <= mavg[2])
		strategy.entry("Long", strategy.long)
	if (mavg<mavg[1] and mavg[1]>=mavg[2])
		strategy.entry("Short", strategy.short)
else
	if (mavg > mavg[1] and vavgn > lowlimit)
		strategy.entry("Long", strategy.long)
	if (mavg < mavg[1] and vavgn > lowlimit)
		strategy.entry("Short", strategy.short)

// Exit on low volume
if (options != 1)
	if (mavg<mavg[1] or (strategy.position_size > 0 and vavgn<= lowlimit))
		strategy.close("Long")
	if (mavg>mavg[1] or (strategy.position_size > 0 and vavgn<= lowlimit))
		strategy.close("Short")
else
	if (mavg < mavg[1])
		strategy.close("Long")
	if (mavg > mavg[1])
		strategy.close("Short")

もっと