
Chiến lược cá mập Williams là một chiến lược theo dõi xu hướng, sử dụng hình dạng cá mập hình thành từ các đường trung bình di chuyển của ba chu kỳ khác nhau để xác định xu hướng. Khi đường nhanh cao hơn đường trung bình, đường trung bình cao hơn đường chậm, tạo thành một cá mập xu hướng tăng, làm nhiều hơn; khi đường nhanh thấp hơn đường trung bình, đường trung bình thấp hơn đường chậm, tạo thành một cá mập xu hướng giảm, làm trống.
Chiến lược này sử dụng đường trung bình di chuyển SMA với 3 chu kỳ khác nhau, tức là đường nhanh sma1, đường trung sma2 và đường chậm sma3. Trong đó, chu kỳ sma1 ngắn nhất và chu kỳ sma3 dài nhất.
Khi sma1 đi qua sma2 và sma2 đi qua sma3, nó cho thấy thị trường đang trong xu hướng tăng, tạo ra một miệng cá mập tăng, theo lý thuyết giao dịch xu hướng, khi đó nên tham gia nhiều hơn.
Ngược lại, khi sma1 đi qua sma2 và sma2 đi qua sma3, thị trường đang ở trong xu hướng giảm, tạo ra một con cá mập giảm, và khi đó nên tham gia vào.
Các điều kiện ra ngoài của over và short được sắp xếp lại thành ba đường đồng bằng, đường nhanh thấp hơn đường trung tâm hoặc đường trung tâm thấp hơn đường chậm, tại thời điểm này phải cân bằng vị trí.
Chiến lược này cũng vẽ màu nền để biểu thị xu hướng, màu xanh lá cây đại diện cho xu hướng tăng, màu đỏ đại diện cho xu hướng giảm.
Nhìn chung, chiến lược này sử dụng lợi thế của các đường trung bình di chuyển để đánh giá xu hướng theo hình dạng của con cá mập và tiến vào thị trường, một chiến lược theo dõi xu hướng điển hình.
Các biện pháp sau đây có thể được áp dụng để tối ưu hóa các rủi ro trên:
Tăng các điều kiện lọc xu hướng để tránh các thị trường chấn động thường xuyên mở các vị trí.
Tối ưu hóa các điều kiện ra sân, kết hợp với các chỉ số xu hướng để xác định thời gian thanh toán.
Tăng chiến lược dừng lỗ, kiểm soát tổn thất đơn lẻ.
Sử dụng trung bình di chuyển thích ứng để thay đổi năng lượng theo chu kỳ.
Chiến lược này có thể được tối ưu hóa hơn nữa ở những khía cạnh sau:
Tăng phán đoán mạnh hoặc yếu của xu hướng, tránh xu hướng ổn định hoặc dao động vào sớm. Các phán đoán phụ trợ như MACD, KDJ có thể được đưa vào.
Tối ưu hóa các tham số chu kỳ trung bình di chuyển, tìm kiếm sự kết hợp tốt nhất. Các tham số tối ưu có thể được tìm thấy bằng cách kiểm tra lại các tham số đa nhóm.
Sử dụng trung bình di chuyển thích ứng để chu kỳ có thể thích ứng với sự thay đổi theo động lực thị trường.
Tăng các chiến lược dừng lỗ, chẳng hạn như theo dõi dừng lỗ, dừng lỗ dư, để kiểm soát rủi ro.
Tối ưu hóa các điều kiện nhập học, có thể xem xét các chỉ số như số lượng giao dịch, bạch cầu và lọc để tăng độ chính xác nhập học.
Tối ưu hóa các điều kiện ra sân, kết hợp với các chỉ số xu hướng để xác định xác suất đảo ngược xu hướng khi giao ba đường, giảm rủi ro ra sân.
Chiến lược cá mập của Williams là một chiến lược theo dõi xu hướng điển hình. Nó tạo ra hướng định hướng xu hướng cá mập bằng cách sử dụng ba đường trung bình di chuyển nhanh và chậm, và tiến bộ vào thị trường. Ưu điểm của chiến lược này là logic giao dịch đơn giản và rõ ràng, dễ vận hành; Nhược điểm là tính chính xác của định xu hướng và khả năng kiểm soát rủi ro yếu.
/*backtest
start: 2023-10-13 00:00:00
end: 2023-11-12 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2019
//@version=3
strategy(title = "Noro's Alligator Strategy by Bill Williams", shorttitle = "Alligator", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)
//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
len1 = input(50, defval = 50, minval = 1, title = "MA 1 Length")
len2 = input(100, defval = 100, minval = 1, title = "MA 2 Length")
len3 = input(200, defval = 200, minval = 1, title = "MA 3 Length")
src = input(close, title = "Source")
showbg = input(false, title = "Show Background")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
//MAs
sma1 = sma(src, len1)
sma2 = sma(src, len2)
sma3 = sma(src, len3)
plot(sma1, color = lime, linewidth = 2)
plot(sma2, color = blue, linewidth = 2)
plot(sma3, color = red, linewidth = 2)
//Signals
up = sma1 > sma2 and sma2 > sma3
dn = sma1 < sma2 and sma2 < sma3
//Background
trend = 0
trend := up ? 1 : dn ? -1 : trend[1]
col = showbg == false ? na : trend == 1 ? lime : red
bgcolor(col)
//Trading
size = strategy.position_size
lot = 0.0
lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1]
if up
strategy.entry("Long", strategy.long, needlong ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if dn
strategy.entry("Short", strategy.short, needshort ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if time > timestamp(toyear, tomonth, today, 23, 59)
strategy.close_all()