Chiến lược này xây dựng mô hình khối lượng giao dịch bằng cách sử dụng trung bình động và độ lệch chuẩn của khối lượng giao dịch, và xác định hướng xu hướng với mức trung bình động của giá để tạo ra tín hiệu giao dịch khi khối lượng bình thường. Nó cũng đặt giới hạn trên và dưới cho khối lượng giao dịch để tránh các tín hiệu sai khi khối lượng 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 giá.
Chiến lược kết hợp mô hình khối lượng giao dịch và xu hướng giá để tránh theo đuổi xu hướng giá khi khối lượng bất thường, có thể lọc ra một số tín hiệu sai.
Giải pháp:
Chiến lược này sử dụng khối lượng để tránh theo đuổi xu hướng sai và các tín hiệu đầu vào tương đối đáng tin cậy. Nhưng chính chiến lược là đơn giản với không gian mở rộng lớn. Bằng cách thêm nhiều chỉ số, học máy, dừng lỗ và các mô-đun khác, nó có thể cải thiện thêm sự ổn định và khả năng bắt được xu hướng. Đây là một chiến lược theo đuổi xu hướng điển hình. Sau khi tối ưu hóa, nó có thể trở thành một chiến lược định lượng rất thực tế.
/*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")