Chiến lược giao dịch định lượng siêu xu hướng trung bình động kép

Tác giả:ChaoZhang, Ngày: 2024-02-05 12:05:10
Tags:

img

Tổng quan

Chiến lược này kết hợp các chỉ số chuyển động trung bình và Supertrend để xây dựng các tín hiệu giao dịch và đánh giá hướng xu hướng thông qua các kết hợp chu kỳ khác nhau để đạt được lợi nhuận cao.

Nguyên tắc

Chiến lược này sử dụng các chỉ số MACD và Supertrend để xác định thời gian tham gia thị trường.

Khi đường nhanh vượt qua đường chậm lên, đó là tín hiệu mua. Tại thời điểm này, nếu Supertrend trung hạn đến dài hạn cũng là xu hướng tăng, tín hiệu mua cuối cùng được tạo ra để mua dài. Ngược lại, khi đường nhanh vượt qua đường chậm xuống, đó là tín hiệu bán. Tại thời điểm này, nếu Supertrend trung hạn đến dài hạn cũng là xu hướng giảm, tín hiệu bán cuối cùng được tạo ra để bán ngắn.

Stop loss và take profit được thiết lập ở các giá trị cố định.

Phân tích lợi thế

Ưu điểm lớn nhất của chiến lược này là nó sử dụng cả trung bình di chuyển kép và Supertrend để xác định hướng thị trường, kết hợp phân tích trung hạn ngắn hạn và trung hạn dài hạn để cải thiện đáng kể hiệu quả ra quyết định và tránh các sự đột phá sai. Ngoài ra, Supertrend có thể điều chỉnh các tham số theo biến động của thị trường để thích nghi với nhiều môi trường thị trường hơn.

Phân tích rủi ro

Rủi ro chính của chiến lược này là các thiết lập dừng lỗ cố định và lấy lợi nhuận có thể bỏ lỡ cơ hội lợi nhuận lớn hơn. Ngoài ra, nếu có sự khác biệt giữa các phán quyết trung hạn ngắn hạn và trung hạn dài hạn, chiến lược sẽ không hoạt động đúng cách. Chúng ta có thể giảm rủi ro này thông qua các thiết lập dừng lỗ và lấy lợi nhuận nổi.

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

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

  1. Tăng cơ chế điều chỉnh năng động cho dừng lỗ và lấy lợi nhuận, và thiết lập dừng lỗ và lấy lợi nhuận theo biến động và xu hướng thị trường.

  2. Tối ưu hóa các thông số MACD để tìm các thông số trung bình động phù hợp hơn với phạm vi mục tiêu.

  3. Tối ưu hóa các thông số Supertrend để điều chỉnh độ nhạy của nó với thị trường.

  4. Tăng các chỉ số khác để đánh giá để cung cấp các tín hiệu nhiều chiều và cải thiện hiệu suất chiến lược.

Tóm lại

Chiến lược này kết hợp thành công những lợi thế của các đường trung bình động kép và các chỉ số siêu xu hướng. Bằng cách kết hợp các phán đoán chu kỳ khác nhau, nó lọc ra các tín hiệu sai và có được lợi nhuận tốt hơn trong các thị trường xu hướng. Chúng ta có thể tăng thêm sự ổn định và lợi nhuận của chiến lược này thông qua tối ưu hóa tham số và điều chỉnh cơ chế.


/*backtest
start: 2024-01-28 00:00:00
end: 2024-02-04 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
//Supertrend Strategy by breizh29 using *rajandran.r* Supertrend Indicator

strategy("Super Trend 2 MACD", overlay=true)
// MACD input
source = input(close)
fastLength = input(12, minval=1, title="MACD fast moving average")
slowLength=input(26,minval=1, title="MACD slow moving average")
signalLength=input(9,minval=1, title="MACD signal line moving average")

// Calculation
fastMA = sma(source, fastLength)
slowMA = sma(source, slowLength)

Macd = fastMA - slowMA
Signal = sma(Macd, signalLength)


res = input(title="Main SuperTrend Time Frame",  defval="120")
Factor=input(1, minval=1,maxval = 100)
Pd=input(1, minval=1,maxval = 100)

tp = input(500,title="Take Profit")
sl = input(400,title="Stop Loss")


Up=hl2-(Factor*atr(Pd))
Dn=hl2+(Factor*atr(Pd))
MUp=request.security(syminfo.tickerid,res,hl2-(Factor*atr(Pd)))
MDn=request.security(syminfo.tickerid,res,hl2+(Factor*atr(Pd)))

Mclose=request.security(syminfo.tickerid,res,close)

TrendUp=close[1]>TrendUp[1]? max(Up,TrendUp[1]) : Up
TrendDown=close[1]<TrendDown[1]? min(Dn,TrendDown[1]) : Dn

MTrendUp=Mclose[1]>MTrendUp[1]? max(MUp,MTrendUp[1]) : MUp
MTrendDown=Mclose[1]<MTrendDown[1]? min(MDn,MTrendDown[1]) : MDn

Trend = close > TrendDown[1] ? 1: close< TrendUp[1]? -1: nz(Trend[1],1)
Tsl = Trend==1? TrendUp: TrendDown

MTrend = Mclose > MTrendDown[1] ? 1: Mclose< MTrendUp[1]? -1: nz(MTrend[1],1)
MTsl = MTrend==1? MTrendUp: MTrendDown

linecolor = Trend == 1 ? green : red
plot(Tsl, color = linecolor , style = line , linewidth = 2,title = "SuperTrend")

Mlinecolor = MTrend == 1 ? blue : orange
plot(MTsl, color = Mlinecolor , style = line , linewidth = 2,title = "Main SuperTrend")

plotshape(cross(close,Tsl) and close>Tsl , "Up Arrow", shape.triangleup,location.belowbar,green,0,0)
plotshape(cross(Tsl,close) and close<Tsl , "Down Arrow", shape.triangledown , location.abovebar, red,0,0)

up = Trend == 1 and Trend[1] == -1 and MTrend == 1 
down = Trend == -1 and Trend[1] == 1 and MTrend == -1 
plotarrow(up ? Trend : na, title="Up Entry Arrow", colorup=lime, maxheight=60, minheight=50, transp=0)
plotarrow(down ? Trend : na, title="Down Entry Arrow", colordown=red, maxheight=60, minheight=50, transp=0)


golong = Trend == 1 and Trend[1] == -1 and MTrend == 1 and Macd > Signal
goshort = Trend == -1 and Trend[1] == 1 and MTrend == -1 and Macd < Signal

strategy.entry("Buy", strategy.long,when=golong)
strategy.exit("Close Buy","Buy",profit=tp,loss=sl)
   
   
strategy.entry("Sell", strategy.short,when=goshort)
strategy.exit("Close Sell","Sell",profit=tp,loss=sl)


Thêm nữa