
Chiến lược này kết hợp với việc sử dụng Heiken Ashi chậm và chỉ số di chuyển trung bình để nhận ra xu hướng, giao dịch dài và ngắn theo hai hướng trong tình huống xu hướng. Giao dịch tháo khi giá vượt quá 100 ngày EMA, tháo khi giá thấp hơn 100 ngày EMA, và tháo khi có điều kiện cụ thể.
Chiến lược này sử dụng các chỉ số kết hợp sau:
Heiken Ashi chậm: Một loại biểu đồ K đặc biệt, sử dụng giá trị trung bình của một đường K trước để vẽ, có thể lọc tiếng ồn thị trường, nhận ra xu hướng. Đây được thực hiện bằng cách tự điều chỉnh bộ lọc Kama.
Đường trung bình di chuyển chỉ số: đường trung bình sau khi giá được làm mịn chỉ số, trong đó có EMA từ 5 ngày đến nhiều chu kỳ 100 ngày.
Các giao dịch được thực hiện theo các logic sau:
Khi giá vượt qua 100 ngày EMA, làm nhiều hơn; khi giá vượt qua 100 ngày EMA, làm trống.
Điều kiện vị trí bằng phẳng: Khi giá mở của Heiken Ashi đi ngang giá đóng cửa của nó (các tín hiệu đảo ngược tiềm năng), vị trí đa đầu tương ứng sẽ bị bằng phẳng bằng cách đi ngang ngược, vị trí đầu trống đồng nghĩa.
Chiến lược này kết hợp với sự phán đoán xu hướng và tín hiệu đảo ngược, có thể nắm bắt sự biến động giá lớn hơn trong tình huống xu hướng, đồng thời tránh sự gia tăng tổn thất thông qua tín hiệu đảo ngược.
Sử dụng EMA để đánh giá xu hướng toàn cầu và tránh bị trục trặc địa phương đánh lừa.
Các tín hiệu giao nhau của Heiken Ashi có thể phát hiện sớm cơ hội đảo ngược.
Bộ lọc Kama thích nghi làm giảm khả năng tín hiệu giả.
Bước vượt quá EMA có thể gây ra sự gia tăng lỗ. Có thể rút ngắn thời gian nắm giữ hoặc thiết lập dừng lỗ một cách thích hợp.
Tín hiệu đảo ngược có thể bị chậm trễ, nên xem xét giảm quy mô vị trí để kiểm soát rủi ro.
Cài đặt tham số EMA không chính xác cũng ảnh hưởng đến hiệu suất chiến lược, nên điều chỉnh theo các giống và môi trường thị trường khác nhau.
Có thể kết hợp nhiều chỉ số để tránh xác suất phát ra tín hiệu sai của cả EMA và Heiken Ashi. Ví dụ: cộng với MACD, Brin và vân vân.
Các tham số EMA có thể được tối ưu hóa theo thời gian thực theo tỷ lệ biến động của thị trường, thắt chặt điểm dừng khi biến động cao và nới lỏng điểm trượt khi biến động thấp.
Các thiết lập tham số và quy tắc lọc được tự động tối ưu hóa dựa trên thuật toán học máy, giúp các chiến lược trở nên vững chắc hơn.
Chiến lược này nói chung là khá đơn giản và thực tế, đồng thời kết hợp xu hướng và đảo ngược, trong trường hợp tối ưu hóa tham số và kiểm soát rủi ro, vẫn có một không gian lợi nhuận tốt. Tiếp theo, có thể bắt đầu từ hướng tối ưu hóa để chiến lược phù hợp hơn với sự thay đổi của môi trường thị trường.
/*backtest
start: 2023-12-14 00:00:00
end: 2023-12-19 10:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("NoScoobies Slow Heiken Ashi and Exponential Moving average Strategy 2.2", overlay=true)
//SHA
p=input(6,title='Period')
fastend=input(0.666,step=0.001)
slowend=input(0.0645,step=0.0001)
kama(close,amaLength)=>
diff=abs(close[0]-close[1])
signal=abs(close-close[amaLength])
noise=sum(diff, amaLength)
efratio=noise!=0 ? signal/noise : 1
smooth=pow(efratio*(fastend-slowend)+slowend,2)
kama=nz(kama[1], close)+smooth*(close-nz(kama[1], close))
kama
hakamaper=1
Om=sma(open,p)
Hm=sma(high,p)
Lm=sma(low,p)
Cm=sma(close,p)
vClose=(Om+Hm+Lm+Cm)/4
vOpen= kama(vClose[1],hakamaper)
vHigh= max(Hm,max(vClose, vOpen))
vLow= min(Lm,min(vClose, vOpen))
asize=vOpen-vClose
size=abs(asize)
//MMAR
exponential = input(true, title="Exponential MA")
src = close
ma05 = exponential ? ema(src, 05) : sma(src, 05)
ma10 = exponential ? ema(src, 10) : sma(src, 10)
ma15 = exponential ? ema(src, 15) : sma(src, 15)
ma20 = exponential ? ema(src, 20) : sma(src, 20)
ma25 = exponential ? ema(src, 25) : sma(src, 25)
ma30 = exponential ? ema(src, 30) : sma(src, 30)
ma35 = exponential ? ema(src, 35) : sma(src, 35)
ma40 = exponential ? ema(src, 40) : sma(src, 40)
ma45 = exponential ? ema(src, 45) : sma(src, 45)
ma50 = exponential ? ema(src, 50) : sma(src, 50)
ma55 = exponential ? ema(src, 55) : sma(src, 55)
ma60 = exponential ? ema(src, 60) : sma(src, 60)
ma65 = exponential ? ema(src, 65) : sma(src, 65)
ma70 = exponential ? ema(src, 70) : sma(src, 70)
ma75 = exponential ? ema(src, 75) : sma(src, 75)
ma80 = exponential ? ema(src, 80) : sma(src, 80)
ma85 = exponential ? ema(src, 85) : sma(src, 85)
ma90 = exponential ? ema(src, 90) : sma(src, 90)
ma95 = exponential ? ema(src, 95) : sma(src, 95)
ma100 = exponential ? ema(src, 100) : sma(src, 100)
longcondition=src>ma100
shortcondition=src<ma100
long=longcondition and size<size[1] and (vOpen<vClose or vOpen>vClose)
short=shortcondition and size<size[1] and (vOpen>vClose or vOpen<vClose)
close_long=longcondition and crossunder(open, vClose)
close_short=shortcondition and crossover(open, vClose)
_close=close_long[2] or close_short[2]
if long
strategy.entry("LONG", strategy.long)
strategy.close("LONG", when = _close)
if short
strategy.entry("SHORT", strategy.short)
strategy.close("SHORT", when = _close)