Xu hướng theo chiến lược dựa trên các vùng ma sát giá

Tác giả:ChaoZhang, Ngày: 2023-09-20 16:46:17
Tags:

Tổng quan

Chiến lược này đo thời gian giá ở lại trong các vùng khác nhau để xác định các khu vực ma sát thấp và giao dịch đột phá trong các khu vực này.

Chiến lược logic

  1. Tính toán tỷ lệ giá tồn tại xung quanh mức hiện tại trong N giai đoạn trước như ma sát giá.

  2. Xác định xem giá có đi vào các vùng ma sát thấp với thời gian tồn tại tối thiểu gần đây không.

  3. Sử dụng MA cân nhắc nhanh để xác định hướng xu hướng gần đây.

  4. Lấy lợi nhuận khi giá lại vào vùng ma sát cao dự đoán sự đảo ngược xu hướng.

  5. Các tham số có thể tùy chỉnh bao gồm sự quay lại ma sát, khu vực thoát ra vv

Ưu điểm

  1. Sự ma sát giá tránh các thị trường khác nhau và tìm thấy các khu vực bùng phát xu hướng.

  2. MA nhanh kết hợp với ma sát để xác định hướng.

  3. Hình ảnh trực quan hiển thị mức độ ma sát giá.

  4. Các thông số mặc định được tối ưu hóa cho giao dịch tần số cao tiền điện tử.

  5. Logic đơn giản và rõ ràng dễ hiểu và tùy chỉnh.

Rủi ro

  1. Sự ma sát giá không thể dự đoán đầy đủ các động thái trong tương lai.

  2. MA nhanh có thể tạo ra thời gian không chính xác.

  3. Không hiệu quả trong và ra khỏi giao dịch.

  4. Tối ưu hóa có nguy cơ quá phù hợp.

  5. Các thông số cố định có thể hoạt động kém hơn ở các thị trường biến động.

Tăng cường

  1. Kiểm tra các khoảng thời gian khác nhau để tính toán ma sát giá.

  2. Đánh giá các loại MA khác nhau để xác định xu hướng gần đây.

  3. Tối ưu hóa các thông số khu vực thoát hiểm để tăng sự ổn định.

  4. Thêm stop loss và take profit để quản lý rủi ro.

  5. Xem xét các thông số năng động để thích nghi với thị trường thay đổi.

  6. Kiểm tra lại trên nhiều biểu tượng và khung thời gian.

Kết luận

Chiến lược này giao dịch các vùng ma sát giá có tiềm năng đột phá có khả năng cao, với ưu và nhược điểm.


/*backtest
start: 2023-08-20 00:00:00
end: 2023-09-19 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//made for 30m chart with BTCUSD or other cryptocurrency
strategy("LUBE",overlay=false )
friction=0.0
barsback=input(500,"bars back to measure friction",step=100)
flevel=input(50,"0-100 friction level to stop trade",step=2)
tlevel=input(-10,"pic lower than 0 to number selected above to initiate trade",step=2)
fl=flevel/100
tl=tlevel/100

for i = 1 to barsback
    friction := if high[i] >= close and low[i] <= close 
        friction+(1+barsback)/(i+barsback)
    else
        friction

range=input(100,"bars back to measure lowest friction",step=10)
lowf = lowest(friction,range)
highf = highest(friction,range)
midf = (lowf*(1-fl)+highf*fl)
lowf2 = (lowf*(1-tl)+highf*tl)
plot(friction)
m=plot(midf[5],color=color.red)
l=plot(lowf2[5],color=color.white)
h=plot(highf[5],color=color.white)
fill(l,h,color.white)

src = input(title="Source", type=input.source, defval=close)

//FIR Filter
_fir(src) =>
    (4 * src + 3 * nz(src[1]) + 2 * nz(src[2]) + nz(src[3])) / 10

fir = _fir(src)

trend =  fir > fir[1]? 1:-1

//bgcolor(trend==1?color.lime:color.red,transp=50)

long=friction<lowf2[5] and trend == 1
short=friction<lowf2[5] and trend == -1
end=friction > midf[5]

keeplong=0
keeplong:=long?1:nz(keeplong[1])
keeplong:=short or end?0:keeplong

keepshort=0
keepshort:=short?1:nz(keepshort[1])
keepshort:=long or end?0:keepshort

bgcolor(keeplong==1?color.lime:keepshort==1?color.red:na,transp=50)

leverage=input(2,"leverage",step=.5)
enableshort=input(true,"enable shorts?")

barcount=0
barcount:=nz(barcount[1])+1

contracts=min(max(.000001,(strategy.equity/close)*leverage),50000)
strategy.entry("Long",strategy.long,when=long and barcount>20, qty=contracts)

strategy.close("Long",when=short or end )

strategy.entry("Short",strategy.short,when=short and enableshort==true and barcount>20, qty=contracts)

strategy.close("Short",when=(long or end) and enableshort==true)

alertcondition(keeplong==1 and keeplong[1]==0,"LONG")
alertcondition(keepshort==1 and keepshort[1]==0,"SHORT")
alertcondition((keeplong[1]==1 or keepshort[1]==1) and (keeplong==0 and keepshort==0),"CLOSE TRADE")


Thêm nữa