Chiến lược SMA ba lần là một chiến lược theo xu hướng dựa trên ba trung bình di chuyển đơn giản (SMA) của các giai đoạn khác nhau để xác định xu hướng và mục nhập. Nó có thể tự động theo dõi xu hướng và thêm các vị trí trong thời gian giảm xu hướng.
Chiến lược sử dụng ba SMA của các giai đoạn khác nhau làm chỉ số xu hướng chính, bao gồm 200-, 400- và 600-thời gian SMA. Khi giá trên tất cả ba SMA, nó chỉ ra xu hướng tăng, và ngược lại cho xu hướng giảm.
Đối với các mục nhập, chiến lược kết hợp việc sử dụng giá đóng và dao động StochClose. Các tín hiệu chỉ được tạo ra khi giá phù hợp với hướng SMAs
Stop loss được thiết lập để giá vượt qua dưới SMA chậm nhất.
Chiến lược cho phép kim tự tháp lên đến 10 lần. Ba mức lợi nhuận được xây dựng với lợi nhuận 1%, 2% và 6%.
Ưu điểm lớn nhất của chiến lược Triple SMA là bằng cách kết hợp ba SMA của các giai đoạn khác nhau, nó có thể xác định rõ hơn hướng và sức mạnh của xu hướng.
Ngoài ra, việc kết hợp StochClose cho phân tích mua quá mức / bán quá mức tránh nhận tín hiệu xung quanh các điểm đảo ngược xu hướng tiềm năng.
Việc dừng lỗ dựa trên SMA chậm nhất cũng tối đa hóa khả năng của chiến lược để đi theo xu hướng trong khi giảm thiểu dừng sớm.
Cho phép hình thành kim tự tháp cho phép chiến lược liên tục tham gia vào các xu hướng.
Rủi ro chính của chiến lược này là các SMA ba có thể không hoàn toàn lọc ra tất cả các tín hiệu sai. Nếu giá không hình thành xu hướng sau khi phá vỡ các SMA và rút lui sớm, tổn thất có thể xảy ra. Điều này thường xảy ra xung quanh các mức hỗ trợ / kháng cự lớn.
Ngoài ra, StochClose có thể tạo ra các tín hiệu không chính xác, dẫn đến các mục nhập không phù hợp, đặc biệt là trong các thị trường dao động.
Để giảm thiểu những rủi ro này, các thông số như thời gian SMA có thể được điều chỉnh.
Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:
Thêm / điều chỉnh thời gian SMA để tìm ra các giá trị tối ưu phù hợp với các sản phẩm cụ thể
Thêm các chỉ số bổ sung như KDJ và MACD để lọc combo và các mục tốt hơn
Tối ưu hóa tiêu chuẩn dừng lỗ và lấy lợi nhuận để phù hợp hơn với phạm vi biến động thị trường
Tối ưu hóa cài đặt kim tự tháp để tìm chiến lược kim tự tháp lý tưởng
Kiểm tra trên các sản phẩm khác nhau và làm cho các thông số thích nghi với nhiều sản phẩm hơn
Kết luận, chiến lược Triple SMA là một cách tiếp cận theo xu hướng rất thực tế. Bằng cách kết hợp ba SMA và StochClose, nó đạt được nhận dạng xu hướng vững chắc và tránh các tín hiệu sai. Cho phép kim tự tháp cũng cho phép theo dõi xu hướng. Với điều chỉnh tham số và tối ưu hóa, nó có thể trở thành một trình theo dõi xu hướng mạnh mẽ.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="Tripla Sma with entries based on sma price closes ", shorttitle="TRIPLE SMA STRATEGY", overlay=true) ////resolution="" len = input(200, minval=1, title="sma 1 length") len1 = input(400, minval=1, title="sma 2 length") len2 = input(600, minval=1, title="sma 3 length") src = input(close, title="Source") //////////////////////////////////////////// smma = 0.0 smma := na(smma[1]) ? sma(src, len) : (smma[1] * (len - 1) + src) / len up = smma > smma [1] down =smma < smma[1] mycolor = up ? #64b5f6 : down ? #d32f2f : na fastma = sma(hl2, 1) fastplot = plot(fastma, color=#000000, transp=100, title='sma on candle') slowplot = plot(smma, color=mycolor, transp=55, title='sma1') //////////////////////////////////////////// smma1 = 0.0 smma1 := na(smma1[1]) ? sma(src, len1) : (smma1[1] * (len1 - 1) + src) / len1 up2 = smma1 > smma1 [1] down2 =smma1 < smma1[1] mycolor2 = up2 ? #64b5f6 : down2 ? #d32f2f : na slowplot2 = plot(smma1, color=mycolor2, transp=45, title='sma2') //////////////////////////////////////////// smma2 = 0.0 smma2 := na(smma2[1]) ? sma(src, len2) : (smma2[1] * (len2 - 1) + src) / len2 up3 = smma2 > smma2 [1] down3 =smma2 < smma2[1] mycolor3 = up3 ? #64b5f6 : down3 ? #d32f2f : na slowplot3 = plot(smma2, color=mycolor3, transp=35, title='sma3') //////////////////////////////////////////////////////////////////////////////////////// //Fill gaps fillData = smma > fastma fillData2 = smma < fastma fillDtat = smma1 > smma fillDtat2 = smma1 < smma fillDat = smma2 > smma1 fillDat2 = smma2 < smma1 fillCol1 = fillData ? #ef5350 : fillData2 ? #64b5f6 : na fillCol2 = fillDtat ? #ef5350 : fillDtat2 ? #64b5f6 : na fillCol3 = fillDat ? #ef5350 : fillDat2 ? #64b5f6 : na fill(slowplot, fastplot, color=fillCol1, transp=90, title="sma1 fill") fill(slowplot, slowplot2, color=fillCol2, transp=80, title="sma2 fill") fill(slowplot2, slowplot3, color=fillCol3, transp=60, title="sma3 fill") uc = (close > smma) and (close > smma1) dc = (close < smma) and (close < smma1) barColor = uc ? #64b5f6 : dc ? #e91e63 : #b2b5be barcolor(color=barColor) //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //StochClose from @trendinvestpro periods = input(50, minval=1, title="length for the oscillator") smooth = input(5, minval=1, title="oscillator smoothing") hhc=highest(close,periods) llc=lowest(close,periods) StochClose = sma((close-llc)/(hhc-llc)*100, smooth) shortline = input(95, minval=0, title="signal when oscillator crosses above") longline = input(5, minval=0, title="signal when oscillator crosses below") //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// longs = close > smma2 shorts = close < smma2 long = longs == true and crossunder(StochClose, longline) short = shorts == true and crossover(StochClose, shortline) stoplong = close < smma and close < smma1 and close < smma2 stopshort = close > smma and close > smma1 and close > smma2 p1 = strategy.position_avg_price / 100 / syminfo.mintick maxx = input(2500, title="max orders filled on a day", minval=0) takeprofit1 = input(1, title="take profit level 1", minval=0) takeprofit2 = input(2, title="take profit level 2", minval=0) takeprofit3 = input(6, title="take profit level 3", minval=0) takeprofitqt1 = input(30, title="take profit quantity first", minval=0) takeprofitqt2 = input(30, title="take profit quantity second", minval=0) takeprofitqt3 = input(30, title="take profit quantity third", minval=0) ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////Strategy entries///////////////////////////////////////////////////////////////////////////////////////// // strategy.risk.max_intraday_filled_orders(maxx) strategy.entry("long", strategy.long, when=long) strategy.exit("tpl1", "long", qty_percent = takeprofitqt1, profit = takeprofit1 * p1) strategy.exit("tpl2", "long", qty_percent = takeprofitqt2, profit = takeprofit2 * p1) strategy.exit("tpl3", "long", qty_percent = takeprofitqt3, profit = takeprofit3 * p1) strategy.close("long", when=stoplong == true) strategy.entry("short", strategy.short, when=short) strategy.exit("tpl1", "short", qty_percent = takeprofitqt1, profit = takeprofit1 * p1) strategy.exit("tpl2", "short", qty_percent = takeprofitqt2, profit = takeprofit2 * p1) strategy.exit("tpl3", "short", qty_percent = takeprofitqt3, profit = takeprofit3 * p1) strategy.close("short", when=stopshort == true)