ボリューム標準偏差に基づくトレンドフォロー戦略


作成日: 2023-11-21 11:11:51 最終変更日: 2023-11-21 11:11:51
コピー: 0 クリック数: 706
1
フォロー
1617
フォロワー

ボリューム標準偏差に基づくトレンドフォロー戦略

概要

この戦略は,取引量の移動平均と標準差を利用して取引量モデルを構築し,価格の移動平均と組み合わせてトレンドの方向を判断し,取引量が正常な場合に取引信号を発信する.この戦略は,取引量の高低限界を設定し,取引量が異常な場合に誤った信号を発信することを避ける.

戦略原則

取引量モデルと価格トレンドの判断を 構築する中心的な論理である.

  1. 取引量モデルを構築する
    • 取引量を計算する 40 サイクル長さの移動平均vavg 取引量基準として
    • 取引量の標準差vsdを,取引量の正常な波動範囲として計算する
    • 取引量の計算 5 周期の長さの移動平均vavgn 最新の取引量レベルとして
    • 取引額を1倍減算してVavgに設定します.
    • 取引額の最大値uplimitをvavg+2倍vsdに設定する
  2. 価格の動向を判断する
    • 20周期の移動平均を価格のトレンド指標として計算する
  3. 取引信号を発信する
    • mavgが前日越えたとき,vavgnがlowlimitより高い場合,さらに実行する
    • mavgが前日を通過すると,vavgnがlowlimitより高い場合空白
    • 逆転すると平仓

この戦略は,取引量モデルと価格トレンドを組み合わせて,取引量が異常な場合の価格トレンドを追跡することを避け,いくつかの偽信号をフィルターすることができます.

戦略的優位分析

  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")