Chiến lược Scalping trong ngày theo dõi xu hướng nhiều khung thời gian

Tác giả:ChaoZhang, Ngày: 2023-11-16 17:47:06
Tags:

img

Tổng quan

Chiến lược này kết hợp các chỉ số trung bình động trên nhiều khung thời gian để xác định tính nhất quán của xu hướng và thực hiện các hành động scalping trong ngày để theo xu hướng và kiếm lợi nhuận.

Chiến lược logic

Chiến lược này sử dụng trung bình động 8 giai đoạn và 20 giai đoạn trên khung thời gian 5 phút, 15 phút, 30 phút và 60 phút để tạo ra tín hiệu giao dịch. Một tín hiệu mua được tạo ra khi MA 8 giai đoạn vượt qua MA 20 giai đoạn. Một tín hiệu bán được tạo ra khi MA 8 giai đoạn vượt qua dưới MA 20 giai đoạn.

Chiến lược này đòi hỏi các tín hiệu nhất quán trên bốn khung thời gian trước khi phát hành lệnh giao dịch.

Một khi được đưa vào một vị trí, chiến lược đặt mục tiêu lợi nhuận cố định để lấy lợi nhuận trong ngày.

Cụ thể, chiến lược này sử dụng hàm an ninh để lấy các giá trị MA từ các khung thời gian khác nhau. Nó tính toán sự khác biệt giữa các MA 8 giai đoạn và 20 giai đoạn trên biểu đồ 5 phút, 15 phút, 30 phút và 60 phút.

Các tín hiệu mua và bán được xác định bởi đường chênh lệch vượt qua trên/dưới đường không. Nhiều cờ islong và isshort được sử dụng để ghi lại tín hiệu trên mỗi khung thời gian. Các lệnh được đặt khi các điều kiện islong và isshort được đáp ứng.

Sau khi tham gia giao dịch, chiến lược sử dụngstrategy.exit() để thiết lập một mục tiêu lợi nhuận cố định cho scalping.

Phân tích lợi thế

Những lợi thế của chiến lược này bao gồm:

  1. Thiết kế nhiều khung thời gian lọc tiếng ồn và giảm tần suất giao dịch.

  2. Vận động nội ngày với tối ưu hóa lợi nhuận tích lũy lợi nhuận nhỏ một cách nhất quán.

  3. Cấu trúc mã rõ ràng, dễ hiểu và tối ưu hóa.

  4. Các điều kiện hợp lý giúp kiểm soát rủi ro.

Phân tích rủi ro

Các rủi ro tiềm ẩn của chiến lược này:

  1. Nhiều khung thời gian có thể bỏ qua những thay đổi xu hướng tinh tế.

  2. Các giao dịch thường xuyên tăng chi phí.

  3. Mục tiêu lợi nhuận cố định thiếu sự linh hoạt.

  4. Tùy thuộc vào các chỉ số, có nguy cơ bị lừa.

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

Tối ưu hóa có thể:

  1. Thêm nhiều khung thời gian cho tín hiệu mạnh hơn.

  2. Mục tiêu lợi nhuận động dựa trên ATR.

  3. Các bộ lọc bổ sung như tăng âm lượng hoặc lịch sử cực đoan.

  4. Tối ưu hóa thời gian MA cho các thông số tốt nhất.

  5. Thêm máy học để đánh giá độ tin cậy tín hiệu.

Tóm lại

Nhìn chung, đây là một chiến lược theo dõi xu hướng đa khung thời gian điển hình bằng cách sử dụng scalping trong ngày. Logic rõ ràng và mã được cấu trúc tốt. Với tối ưu hóa thích hợp, nó có thể trở thành một mẫu chiến lược scalping rất thực tế.


/*backtest
start: 2022-11-09 00:00:00
end: 2023-11-15 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy(title="PeBAS $JPY Scalper 15m ",overlay=true) 
zeigeallebars= input(false, title="Zeige alle (Show all) Candles/Bars?")
profitwert=input(52, title="Profit")
myatr=  input(title="ATR", type=float, defval=0.00002, minval=0.00001,step=0.00001)


//Plot  EMA-Differenz Aktueller Timeframe

dif=(ema(close,8)+ema(close,20))/2
mcolor=ema(close,8) > ema(close,20) ? green : red
bs = ema(close,8) > ema(close,20) ? true : false
ThisATR=atr(16)

//trans = zeigeallebars == true ? 00 : 100
//plot(dif,"dif",color=mcolor,linewidth=6,transp=trans)


//1M EMA
htf_ma1Mema8 = ema(close, 5)
htf_ma1Mema20 = ema(close, 20)
ema81m=request.security(syminfo.tickerid, "1", htf_ma1Mema8)
ema201m=request.security(syminfo.tickerid, "1", htf_ma1Mema20)
dif1M = (ema81m + ema201m) / 2
Close1M = request.security(syminfo.tickerid, "1", close)
color1=ema81m > ema201m ? green : red
//plot(dif1M,"dif",color1,linewidth=6)
//plotshape(1, style=shape.cross, color=color1,location=location.top)
ls1 = ema81m > ema201m ? 1 : 0



//5M EMA

htf_ma5Mema8 = ema(close, 8)
htf_ma5Mema20 = ema(close, 20)
ema85m=request.security(syminfo.tickerid, "5", htf_ma5Mema8)
ema205m=request.security(syminfo.tickerid, "5", htf_ma5Mema20)
dif5M = (ema85m + ema205m) / 2
 
color5=ema85m > ema205m ? green : red
plot(dif5M,"dif",color5,linewidth=5)
ls5 = ema85m > ema205m ? 1 : 0
alert1= ema85m > ema205m and ema85m[1] < ema205m[1] ? 1 : 0
islong5 = ema85m > ema205m ? 1 : 0
isshort5 = ema85m < ema205m ? 1 : 0

//15M EMA

htf_ma15Mema8 = ema(close, 8)
htf_ma15Mema20 = ema(close, 20)
ema815m=request.security(syminfo.tickerid, "15", htf_ma15Mema8)
ema2015m=request.security(syminfo.tickerid, "15", htf_ma15Mema20)
dif15M = (ema815m + ema2015m) / 2
 
color15=ema815m > ema2015m ? green : red
plot(dif15M,"dif",color15,linewidth=3)
ls15= ema815m > ema2015m ? 1 : 0
alert2= ema815m > ema2015m and ema815m[1] < ema2015m[1] ? 1 : 0
islong15 = ema815m > ema2015m ? 1 : 0
isshort15 = ema815m < ema2015m ? 1 : 0





//30M EMA
htf_ma30Mema8 = ema(close, 8)
htf_ma30Mema20 = ema(close, 20)
ema830m=request.security(syminfo.tickerid, "30", htf_ma30Mema8)
ema2030m=request.security(syminfo.tickerid, "30", htf_ma30Mema20)
dif30M = (ema830m + ema2030m) / 2
 
color30=ema830m > ema2030m ? green : red
ls30= ema830m > ema2030m ?1 : 0
islong30 = ema830m > ema2030m ? 1 : 0
isshort30 = ema830m < ema2030m ? 1 : 0



//60M EMA

htf_ma60Mema8 = ema(close, 8)
htf_ma60Mema20 = ema(close, 20)
ema860m=request.security(syminfo.tickerid, "60", htf_ma60Mema8)
ema2060m=request.security(syminfo.tickerid, "60", htf_ma60Mema20)
dif60M = (ema860m + ema2060m) / 2
 
color60=ema860m > ema2060m ? green : red
ls60= ema860m > ema2060m ?1 : 0

islong60 = ema860m > ema2060m ? 1 : 0
isshort60 = ema860m < ema2060m ? 1 : 0

plot(dif60M,"dif",color60,linewidth=3,transp=70)

islong = islong5 ==1 and islong15 ==1 and islong60 ==1 and year > 2017 ? 1 : 0
isshort = isshort5 ==1 and isshort15 ==1 and  isshort60 ==1 and year > 2017 ? 1 : 0


condition2l= 0 
condition2s = 0

c= alert1 == alert2  and alert1[1] != alert2[1] ? 1 : 0
alertcondition(c, title='Da tat sich was ', message='Da tat sich was!')

strategy.entry("enter long", strategy.long,1,when = islong ==1 and islong[1] == 0  ) 
strategy.entry("enter short", strategy.short,1,when = isshort == 1  and isshort [1] == 0) 
strategy.exit("close",profit=profitwert)
strategy.exit("close",profit=profitwert)





Thêm nữa