
Chiến lược này sử dụng trung bình di chuyển và chênh lệch tiêu chuẩn của khối lượng giao dịch để xây dựng mô hình khối lượng giao dịch, kết hợp với trung bình di chuyển của giá để đánh giá xu hướng và phát tín hiệu giao dịch trong trường hợp khối lượng giao dịch bình thường. Chiến lược cũng đặt giới hạn khối lượng giao dịch cao và thấp, có thể tránh phát tín hiệu sai trong trường hợp khối lượng giao dịch bất thường.
Logic cốt lõi là xây dựng mô hình khối lượng giao dịch và định giá xu hướng.
Chiến lược này kết hợp mô hình khối lượng giao dịch và xu hướng giá, tránh theo dõi xu hướng giá trong trường hợp khối lượng giao dịch không bình thường, có thể lọc ra một số tín hiệu giả.
Phương pháp giải quyết rủi ro:
Chiến lược này có ý tưởng tổng thể rõ ràng, sử dụng khối lượng giao dịch để tránh theo dõi xu hướng giả, tín hiệu nhập cảnh đáng tin cậy hơn. Tuy nhiên, chính chiến lược này rất đơn giản, có thể mở rộng rất nhiều, có thể tối ưu hóa bằng cách thêm các mô-đun như chỉ số, học máy, dừng lỗ, có thể cải thiện hơn nữa sự ổn định và khả năng nắm bắt xu hướng. Chiến lược này là một chiến lược theo dõi xu hướng điển hình, sau khi được tối ưu hóa có thể trở thành một chiến lược định lượng rất hữu ích.
/*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")