可変移動平均取引 VMA 戦略


作成日: 2024-02-21 11:47:43 最終変更日: 2024-02-21 11:47:43
コピー: 2 クリック数: 828
1
フォロー
1617
フォロワー

可変移動平均取引 VMA 戦略

概要

トレーディングVMA戦略は,変動移動平均に基づいた定量取引戦略である.この戦略は,変化する移動平均を利用して市場動向を捉え,それに応じて取引信号を生成する.

戦略原則

トレーディングVMA戦略の核心は,変動する周期の移動平均を計算することです.移動平均は,特定の周期内の平均価格を計算する広く知られた技術指標です.

具体的には,この戦略は,まず,価格方向運動指標 ((PDM,MDIM) のような一連の中間値を計算し,平滑処理したデータ ((PDMs,MDMs) を計算します.これらのデータは,最終的に指標の強度 ((iS) を得るために使用されます.この指標は,価格変動の強さを反映します.

その後,TradingVMA戦略は,指標の強さに応じて,移動平均の長さを動的に調整する.市場の波動が大きくなるにつれて,移動平均の周期は短くなり,逆に周期は長くなります.

最後に,戦略は,現在の価格とVMAの大きさを比較し,取引シグナルを生成する.価格がVMAより高いときは多し,価格がVMAより低いときは空し.

優位分析

トレーディングVMA戦略は以下の主な利点があります.

  1. 変数周期 Filters Noise より安定 - 変数移動平均の周期は,市場の変化に合わせて調整され,波のノイズをフィルターし,より安定したトレンド信号を得ることができる.

  2. 価格の変化に迅速に対応する 反応性を改善する - 変動平均は価格の変化に迅速に対応し,新しいトレンドの転換点を捉える.

  3. 取引頻度を減らす Reduce Overtrading - 固定周期指数と比較して,TradingVMAは不要な取引頻度を減らすことができます.

  4. カスタマイズ可能なパラメータ Flexible Parameters - このポリシーは,ユーザーが自分の好みに合わせてパラメータを選択し,異なる市場環境に対応できるようにします.

リスク分析

VMA取引には以下の主要なリスクがあります.

  1. Miss Rapid Reversals - トレンドが急速に逆転すると,継続的に調整された移動平均は反応を遅らせる可能性があります.

  2. フォロー偏差の影響による Lagging Bias - すべての移動平均戦略は多数か無数かで,一定程度のフォロー偏差がある.

  3. 多空数エラー Wrong Signals - 横横整理された市場で,TradingVMAは誤った多空信号を生成する可能性があります.

  4. パラメータ最適化の難しさ - 最適なパラメータの組み合わせを見つけることが困難である.

これらのリスクは,ストップ損失,パラメータの組み合わせの調整などによって制御できます.

最適化の方向

取引のVMA戦略は,以下の方向から最適化できます.

  1. 他の指標と統合する Combine Other Indicators - 他の傾向,傾向逆転などの指標の組み合わせを使用すると,信号の質が向上する.

  2. 最適パラメータ最適化 - 履歴回帰とパラメータ最適化により最適なパラメータの組み合わせを見つける.

  3. 適応的取引ルール - 異なる市場状況に応じて異なる開設ルール,停止ルールなどを採用する.

  4. アルゴリズム取引の体系化 Systemization - 戦略をアルゴリズム化して体系化して,追及して最適化できるようにする.

要約する

トレーディングVMAは自己適応的な量化戦略である.市場トレンドを捉えるために特別に設計されたVMA指標を使用し,迅速に反応し,ノイズをフィルターする優位性がある.この戦略は,より良いパフォーマンスを得るために,複数の方法で最適化することができます.しかし,偏差などの問題を完全に回避することはできません.全体的に,トレードVMAは非常に有望なトレンドフォロー戦略です.

ストラテジーソースコード
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-24 23:59:59
period: 1h
basePeriod: 15m
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/
// © laptevmaxim92

//@version=4
strategy("Variable Moving Average Strategy", overlay=true)

src=close
l =input(5, title="VMA Length") 
std=input(true, title="Show Trend Direction Colors")

utp = input(false, "Use take profit?")
pr = input(100, "Take profit pips")
usl = input(false, "Use stop loss?")
sl = input(100, "Stop loss pips")
fromday = input(01, defval=01, minval=01, maxval=31, title="From Day")
frommonth = input(01, defval=01, minval= 01, maxval=12, title="From Month")
fromyear = input(2000, minval=1900, maxval=2100, title="From Year")
today = input(31, defval=01, minval=01, maxval=31, title="To Day")
tomonth = input(12, defval=12, minval=01, maxval=12, title="To Month")
toyear = input(2019, minval=1900, maxval=2100, title="To Year")

use_date = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00))

k = 1.0/l
pdm = 0.0
pdm := max((src - src[1]), 0)
mdm = 0.0
mdm := max((src[1] - src), 0)
pdmS = 0.0
pdmS := ((1 - k)*nz(pdmS[1]) + k*pdm)
mdmS = 0.0
mdmS := ((1 - k)*nz(mdmS[1]) + k*mdm)
s = pdmS + mdmS
pdi = pdmS/s
mdi = mdmS/s
pdiS = 0.0
pdiS := ((1 - k)*nz(pdiS[1]) + k*pdi)
mdiS = 0.0
mdiS := ((1 - k)*nz(mdiS[1]) + k*mdi)
d = abs(pdiS - mdiS)
s1 = pdiS + mdiS
iS = 0.0
iS := ((1 - k)*nz(iS[1]) + k*d/s1)
hhv = highest(iS, l) 
llv = lowest(iS, l) 
d1 = hhv - llv
vI = (iS - llv)/d1
vma = 0.0
vma := (1 - k*vI)*nz(vma[1]) + k*vI*src
vmaC=(vma > vma[1]) ? color.lime : (vma<vma[1]) ? color.red : (vma==vma[1]) ? color.yellow : na 
plot(vma, color=std?vmaC:color.white, linewidth=3, title="VMA")

longCondition = vma > vma[1]
if (longCondition)
    strategy.entry("BUY", strategy.long and use_date)

shortCondition = vma < vma[1]
if (shortCondition)
    strategy.entry("SELL", strategy.short and use_date)

if (utp and not usl)
    strategy.exit("TP", "BUY", profit = pr)
    strategy.exit("TP", "SELL", profit = pr)
    
if (usl and not utp)
    strategy.exit("SL", "BUY", loss = sl)
    strategy.exit("SL", "SELL", loss = sl)
    
if (usl and utp)
    strategy.exit("TP/SL", "BUY", loss = sl, profit = pr)
    strategy.exit("TP/SL", "SELL", loss = sl, profit = pr)