Chiến lược NoroBands theo vị trí động lượng


Ngày tạo: 2024-01-18 10:58:48 sửa đổi lần cuối: 2024-01-18 10:58:48
sao chép: 1 Số nhấp chuột: 561
1
tập trung vào
1617
Người theo dõi

Chiến lược NoroBands theo vị trí động lượng

Tổng quan

Chiến lược này là một chiến lược phá vỡ động lực dựa trên lý thuyết băng tần của Noro kết hợp với kỹ thuật định lượng. Nó tạo ra tín hiệu mua bán và thực hiện giao dịch phá vỡ băng tần bằng cách tính toán các chỉ số khác nhau như đường trung bình, RSI, băng tần và màu gấu.

Nguyên tắc chiến lược

  1. Tính ra đường lên xuống của một dải sóng bằng cách tính toán chiều dài sóng thực trung bình. Giá phá vỡ đường lên là tín hiệu đi lên, phá vỡ đường xuống là tín hiệu đi xuống.
  2. Các chỉ số RSI được sử dụng để đánh giá khu vực quá mua quá bán, RSI thấp hơn 30 và thấp hơn 70.
  3. Định hướng động lực của giá bằng cách phá vỡ giá cao nhất và giá thấp nhất.
  4. Xác định thị trường nhiều đầu và thị trường không đầu bằng màu bò và gấu. Xanh là thị trường nhiều đầu, đi lên; đỏ là thị trường không đầu, đi xuống.
  5. Các tín hiệu giao dịch được kết hợp với sự phân biệt phân định của đường cân bằng.

Phân tích lợi thế

  1. Một số chỉ số kết hợp với nhau để tăng độ chính xác.
  2. Sự kết hợp giữa lý thuyết băng tần và kỹ thuật định lượng giúp chiến lược này hiệu quả hơn.
  3. Động lực đột phá được kết hợp với giao dịch đảo ngược, tăng thêm lợi nhuận.
  4. Khả năng mở rộng, có thể điều chỉnh theo các tham số của thị trường.

Phân tích rủi ro

  1. Thiết lập tham số cần phải được tối ưu hóa và thử nghiệm liên tục.
  2. Không có phản ứng kịp thời khi chuyển đổi đa không gian, có thể gây thiệt hại.
  3. Có nhiều giao dịch, dễ bị ảnh hưởng bởi phí giao dịch và điểm trượt.
  4. Cần điều chỉnh các tham số băng tần phù hợp với các chu kỳ khác nhau.

Hướng tối ưu hóa

  1. Xác minh nhiều chu kỳ thời gian, tìm kiếm sự kết hợp tham số tốt nhất.
  2. Tăng chiến lược dừng lỗ và giảm tổn thất đơn lẻ.
  3. Tăng cường quản lý vị trí và tăng hiệu quả lợi nhuận.
  4. Tự động tối ưu hóa tham số kết hợp với học sâu.

Tóm tắt

Chiến lược này sử dụng tổng hợp nhiều chỉ số kỹ thuật định lượng điển hình để đạt được lợi nhuận hiệu quả thông qua kết hợp chỉ số động lực với chỉ số đảo ngược. Đồng thời sử dụng lý thuyết sóng trung bình thực tế để tìm điểm vào hợp lý. Có thể gọi là mô hình kết hợp chỉ số kỹ thuật với lý thuyết.

Mã nguồn chiến lược
/*backtest
start: 2023-01-11 00:00:00
end: 2024-01-17 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=2
strategy("Noro's Bands Strategy v1.5", shorttitle = "NoroBands str 1.5", overlay=true)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period")
color = input(true, defval = true, title = "Use ColorBar")
usecb = input(true, defval = true, title = "Use CryptoBottom")
usersi = input(true, defval = true, title = "Use RSI")
usemm = input(true, defval = true, title = "Use min/max")
usepyr = input(true, defval = true, title = "Use pyramiding")
needbb = input(false, defval = false, title = "Show Bands")
needbg = input(false, defval = false, title = "Show Background")
needlo = input(false, defval = false, title = "Show Locomotive")
needpy = input(false, defval = false, title = "Show Avg.price line")
src = close

//Fast RSI
fastup = rma(max(change(src), 0), 2)
fastdown = rma(-min(change(src), 0), 2)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//CryptoBottom
mac = sma(close, 10)
lencb = abs(close - mac)
sma = sma(lencb, 100)
max = max(open, close)
min = min(open, close)

//PriceChannel
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

//dist
dist = abs(src - center)
distsma = sma(dist, len)
hd = center + distsma
ld = center - distsma
hd2 = center + distsma * 2
ld2 = center - distsma * 2

//Trend
trend = close < ld and high < hd ? -1 : close > hd and low > ld ? 1 : trend[1]

//Lines
colo = needbb == false ? na : black
plot(hd2, color = colo, linewidth = 1, transp = 0, title = "High band 2")
plot(hd, color = colo, linewidth = 1, transp = 0, title = "High band")
plot(center, color = colo, linewidth = 1, transp = 0, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band")
plot(ld2, color = colo, linewidth = 1, transp = 0, title = "Low band 2")

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)

//Signals
up = trend == 1 and ((close < open or color == false) or close < hd) and (min < min[1] or usemm == false) and (close < strategy.position_avg_price or usepyr == false or strategy.position_size <= 0) ? 1 : 0
dn = trend == -1 and ((close > open or color == false) or close > ld) and (max > max[1] or usemm == false) and (close > strategy.position_avg_price or usepyr == false or strategy.position_size >= 0) ? 1 : 0 
up2 = close < open and lencb > sma * 3 and min < min[1] and fastrsi < 10 and (close < strategy.position_avg_price or usepyr == false or strategy.position_size <= 0) ? 1 : 0 //CryptoBottom
//dn2 = close > open and len > sma * 3 and max > max[1] and fastrsi > 90 ? 1 : 0 //CryptoBottom
up3 = fastrsi < 5 and usersi == true and (close < strategy.position_avg_price or usepyr == false or strategy.position_size <= 0) ? 1 : 0
//dn3 = fastrsi > 95 and usersi = true ? 1 : 0

//Avg Price
colpy = needpy == false ? na : black
plot(strategy.position_avg_price, color = colpy)

up4 = close < strategy.position_avg_price and usepyr == true and strategy.position_size >= 0 ? 1 : 0 
dn4 = close > strategy.position_avg_price and usepyr == true and strategy.position_size <= 0 ? 1 : 0 

//Locomotive
uploco = trend == 1 and close < open and min < min[1] and close < center ? 1 : 0
plotarrow(needlo == true and uploco == 1 ? 1 : 0, colorup = black, colordown = black, transp = 0)

longCondition = up == 1 or (up2 == 1 and usecb == true) or (up3 == 1 and usersi == true) or up4 == 1
if (longCondition)
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)

shortCondition = dn == 1 or dn4 == 1
if (shortCondition)
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)