# My語言怎么實現成交量指數加權策略
## 一、策略原理概述
成交量指數加權策略(Volume Weighted Moving Average, VWMA)是一種將成交量信息融入價格均線的技術指標。與傳統簡單移動平均線(SMA)不同,VWMA通過賦予不同交易日的價格不同的權重(成交量越大權重越高),從而更真實地反映市場實際交易情況。
### 核心公式
VWMA = Σ(Price * Volume) / ΣVolume
其中:
- Price:當前K線價格(可選用收盤價/開盤價等)
- Volume:當前K線成交量
## 二、My語言實現基礎版VWMA
### 1. 基礎參數設置
```my
//@version=5
strategy("VWMA Strategy", overlay=true)
// 參數輸入
length = input.int(20, title="均線周期", minval=1)
src = input(close, title="價格源")
// 計算加權和
sum_price_volume = 0.0
sum_volume = 0.0
for i = 0 to length - 1
sum_price_volume := sum_price_volume + src[i] * volume[i]
sum_volume := sum_volume + volume[i]
// 計算VWMA
vwma = sum_price_volume / sum_volume
plot(vwma, title="VWMA", color=color.blue, linewidth=2)
// 生成交易信號
longCondition = ta.crossover(close, vwma)
shortCondition = ta.crossunder(close, vwma)
// 執行交易
if (longCondition)
strategy.entry("Long", strategy.long)
if (shortCondition)
strategy.entry("Short", strategy.short)
// 添加快速線參數
fast_length = input.int(10, title="快速線周期")
// 計算快速VWMA
sum_price_volume_fast = 0.0
sum_volume_fast = 0.0
for i = 0 to fast_length - 1
sum_price_volume_fast := sum_price_volume_fast + src[i] * volume[i]
sum_volume_fast := sum_volume_fast + volume[i]
vwma_fast = sum_price_volume_fast / sum_volume_fast
// 雙線交叉策略
dualConditionLong = ta.crossover(vwma_fast, vwma)
dualConditionShort = ta.crossunder(vwma_fast, vwma)
// 根據波動率調整周期
atr_length = input(14, "ATR周期")
atr_value = ta.atr(atr_length)
dynamic_length = math.round(math.max(10, 20 - (atr_value / close * 100)))
// 添加成交量閾值
vol_threshold = input(100000, title="最小成交量")
valid_volume = volume > vol_threshold
// 修改信號條件
filteredLong = longCondition and valid_volume
filteredShort = shortCondition and valid_volume
// 獲取更高時間框架數據
higher_vwma = request.security(syminfo.tickerid, "D", vwma)
// 結合多時間框架信號
multiTF_long = longCondition and close > higher_vwma
multiTF_short = shortCondition and close < higher_vwma
//@version=5
strategy("Advanced VWMA Strategy", overlay=true, margin_long=100, margin_short=100)
// 參數設置
length = input.int(20, title="基礎周期")
fast_length = input.int(10, title="快速周期")
vol_filter = input(true, title="啟用成交量過濾")
vol_threshold = input(100000, title="成交量閾值")
use_multi_tf = input(true, title="啟用多時間框架")
// VWMA計算函數
vwma_function(calc_length) =>
sum_pv = 0.0
sum_vol = 0.0
for i = 0 to calc_length - 1
sum_pv := sum_pv + close[i] * volume[i]
sum_vol := sum_vol + volume[i]
sum_pv / sum_vol
// 計算指標
vwma_slow = vwma_function(length)
vwma_fast = vwma_function(fast_length)
higher_vwma = request.security(syminfo.tickerid, "D", vwma_slow)
// 信號生成
basic_long = ta.crossover(close, vwma_slow)
basic_short = ta.crossunder(close, vwma_slow)
dual_long = ta.crossover(vwma_fast, vwma_slow)
dual_short = ta.crossunder(vwma_fast, vwma_slow)
// 條件過濾
valid_volume = volume > vol_threshold or not vol_filter
higher_tf_cond = close > higher_vwma or not use_multi_tf
// 最終信號
enter_long = (basic_long or dual_long) and valid_volume and higher_tf_cond
enter_short = (basic_short or dual_short) and valid_volume and not higher_tf_cond
// 執行交易
if (enter_long)
strategy.entry("Long", strategy.long)
if (enter_short)
strategy.entry("Short", strategy.short)
// 繪制指標
plot(vwma_slow, title="VWMA Slow", color=color.blue)
plot(vwma_fast, title="VWMA Fast", color=color.red)
參數優化建議:
品種適配性:
風險控制:
// 添加止損止盈
stop_loss = input(1.0, title="止損百分比") / 100
take_profit = input(2.0, title="止盈百分比") / 100
strategy.exit("Exit", loss=close * stop_loss, profit=close * take_profit)
優勢: - 相比SMA更能反映真實交易成本 - 在放量突破時信號更可靠 - 可有效過濾低成交量下的假突破
局限性: - 在持續縮量行情中可能失效 - 對數據精度要求較高(需準確成交量數據) - 不適合極短線交易(TICK級別)
結合其他指標:
rsi_value = ta.rsi(close, 14)
macd_line = ta.ema(close, 12) - ta.ema(close, 26)
構建多品種對沖系統:
corr_threshold = input(0.7, title="相關性閾值")
機器學習參數優化:
// 可通過外部Python腳本優化參數
提示:實際應用中建議先進行3年以上歷史數據回測,并至少包含一次完整牛熊周期。 “`
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。