Chiến lược theo dõi tự động SMA ba lần

Tác giả:ChaoZhang, Ngày: 2024-01-26 15:05:58
Tags:

img

Tổng quan

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 logic

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 ba lần. StochClose xác định mức mua quá mức / bán quá mức và cung cấp tín hiệu dài khi vượt trên 95 và tín hiệu ngắn khi vượt dưới 5.

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%.

Phân tích lợi thế

Ư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.

Phân tích rủi ro

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.

Hướng dẫn tối ưu hóa

Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:

  1. 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ể

  2. Thêm các chỉ số bổ sung như KDJ và MACD để lọc combo và các mục tốt hơn

  3. 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

  4. 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

  5. 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

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)




Thêm nữa