
Chiến lược SMA ba lần là một chiến lược để đánh giá xu hướng và các mục dựa trên trung bình di chuyển đơn giản của ba chu kỳ khác nhau. Nó có thể tự động theo dõi xu hướng, sử dụng sự đảo ngược trong xu hướng để gia tăng vị trí.
Chiến lược này sử dụng ba chu kỳ SMA khác nhau làm chỉ số định hướng chính, bao gồm 200 chu kỳ, 400 chu kỳ và 600 chu kỳ SMA. Giá được đánh giá là xu hướng tăng khi nằm trên ba SMA và ngược lại là xu hướng giảm.
Như một chỉ số vào, chiến lược kết hợp với việc sử dụng giá đóng cửa và dao động StochClose. Chỉ số StochClose được sử dụng để xác định xem có quá mức hay quá mức bán khi StochClose vượt 95 và trống khi vượt 5.
Tiêu chuẩn dừng là dừng khi giá chạm SMA chậm nhất.
Chiến lược có thể đặt cược tối đa là 10 lần. Và có ba tỷ lệ dừng khác nhau, lần lượt là 1%, 2% và 6%.
Ưu điểm lớn nhất của chiến lược SMA ba chiều là nó có khả năng lọc các tín hiệu giả mạnh hơn so với một SMA đơn lẻ.
Ngoài ra, kết hợp với chỉ số StochClose để xác định xem có quá mua hay quá bán, bạn có thể tránh nhập vào gần điểm đảo ngược xu hướng, do đó giảm các mục sai.
Tiêu chuẩn dừng lỗ đơn giản và trực tiếp, sử dụng SMA có chu kỳ chậm nhất làm đường dừng lỗ, tối đa tránh dừng lỗ quá sớm.
Việc cho phép gia tăng cổ phiếu cũng cho phép chiến lược này có thể tiếp tục theo dõi xu hướng và kiếm được lợi nhuận.
Rủi ro chính của chiến lược này là ba SMA có thể không hoàn toàn lọc ra tất cả các tín hiệu giả và có thể gây thiệt hại nếu không tạo ra xu hướng và điều chỉnh lại sau khi giá phá vỡ. Điều này thường xảy ra gần mức hỗ trợ quan trọng.
Ngoài ra, chỉ số StochClose cũng có thể tạo ra các tín hiệu sai, dẫn đến các mục không phù hợp. Điều này thường xảy ra trong khu vực biến động giá.
Để giảm thiểu những rủi ro này, bạn có thể điều chỉnh chu kỳ SMA một cách thích hợp; hoặc thêm các chỉ số khác để phán đoán kết hợp, chẳng hạn như KDJ, MACD, v.v., để đảm bảo chất lượng tín hiệu đi vào.
Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:
Tăng hoặc điều chỉnh số lượng chu kỳ của SMA để tìm các tham số chu kỳ phù hợp hơn cho các giống cụ thể
Thêm các chỉ số khác để đánh giá kết hợp, chẳng hạn như KDJ, MACD, để cải thiện chất lượng các mục
Tối ưu hóa tiêu chuẩn dừng lỗ để phù hợp hơn với phạm vi biến động của thị trường
Tối ưu hóa số lần và tỷ lệ gia tăng, tìm chiến lược gia tăng phù hợp hơn
Kiểm tra các tham số khác nhau để làm cho tham số chiến lược phù hợp với nhiều giống hơn
Chiến lược SMA ba là một chiến lược theo dõi xu hướng rất thực tế. Nó thực hiện hiệu quả đánh giá xu hướng tốt hơn bằng cách kết hợp áp dụng ba chu kỳ khác nhau của SMA và chỉ số StochClose, có thể tránh hiệu quả các tín hiệu sai. Đồng thời cho phép đặt cược thích hợp, do đó có thể luôn theo dõi xu hướng tham gia lợi nhuận.
/*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)