Chiến lược Beyond The Clouds

Tác giả:ChaoZhang, Ngày: 2023-11-03 16:10:33
Tags:

img

Tổng quan

Chiến lược này sử dụng chỉ số siêu xu hướng để hỗ trợ đặt lệnh và lọc theo lớp mây và màu nến để đặt lệnh giới hạn để tăng lợi nhuận. Mục tiêu của nó là nhanh chóng nắm bắt xu hướng sau khi chúng bắt đầu và giảm rủi ro trong quá trình hợp nhất.

Chiến lược logic

  1. Tính toán giá trung bình của giá cao nhất và giá thấp nhất trong thời gian ATR như đường cơ sở.

  2. Tính toán các dải trên và dưới dựa trên nhân nhân.

  3. Khi đóng là trên dải trên, đánh dấu là 1; dưới dải dưới, đánh dấu là -1. Nếu không, duy trì trạng thái trước đó.

  4. Điều chỉnh động đường dừng lỗ dựa trên vị trí giá đóng tương đối với dải trên / dưới.

  5. Tính toán phạm vi lớp mây dựa trên một tỷ lệ phần trăm nhất định của khoảng băng tần trên/dưới.

  6. Đối với dài, cần đóng < mở khi siêu xu hướng là 1.

  7. Đặt lệnh mua giới hạn tại giá đóng cửa trước đây cho dài. Đặt lệnh bán giới hạn cho ngắn.

  8. Lọc theo khoảng thời gian, đóng tất cả các vị trí có sẵn.

Phân tích lợi thế

Chiến lược này kết hợp Super Trend và khái niệm đám mây, cho phép nắm bắt xu hướng nhanh chóng sau khi xu hướng bắt đầu. Super Trend stop loss phản ứng nhanh hơn so với stop loss di chuyển bình thường. Các lớp đám mây tránh tổn thất từ các đột phá sai. Lệnh giới hạn làm giảm trượt và tăng lợi nhuận.

  1. Super Trend rất nhạy cảm và theo dõi các xu hướng mạnh mẽ.

  2. Bộ lọc lớp mây làm giảm tổn thất từ các vụ phá vỡ giả.

  3. Màu nến giúp tránh đảo ngược.

  4. Lệnh giới hạn làm giảm tác động trượt và tăng tỷ lệ thắng.

  5. Phạm vi thời gian và quản lý vị trí tùy chỉnh phù hợp với nhu cầu giao dịch khác nhau.

Phân tích rủi ro

Ngoài ra còn có một số rủi ro cần lưu ý:

  1. Các thông số siêu xu hướng không chính xác có thể gây ra quá nhiều độ nhạy và chém.

  2. Phạm vi mây quá mức có thể lọc các tín hiệu đột phá hợp lệ, ảnh hưởng đến lợi nhuận.

  3. Lệnh giới hạn có thể không được thực hiện trong thời gian biến động cao, cơ hội bị bỏ lỡ.

  4. Không có dừng lỗ có thể tránh hoàn toàn rủi ro hệ thống và tổn thất lớn.

  5. Kích thước vị trí lớn hơn cũng làm tăng tổn thất.

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

Chiến lược này có thể được cải thiện trong các khía cạnh sau:

  1. Kiểm tra các thị trường và công cụ khác nhau cho các thông số Super Trend tối ưu.

  2. Điều chỉnh động mức dừng lỗ dựa trên biến động thị trường.

  3. Tối ưu hóa phạm vi đám mây để cân bằng lọc tiếng ồn và giữ tín hiệu.

  4. Thêm mô-đun định kích thước vị trí vào các vị trí định kích thước năng động dựa trên điều kiện thị trường.

  5. Sử dụng các bộ tham số khác nhau cho các phiên giao dịch khác nhau để thích nghi với nhịp thị trường.

  6. Hiệu quả thử nghiệm khi kết hợp với các chỉ số khác.

Kết luận

Kết luận, chiến lược này có logic rõ ràng và lợi thế rõ ràng trong việc bắt xu hướng. Nhưng không có chiến lược nào có thể hoàn toàn tránh rủi ro hệ thống. Cần kiểm soát kích thước vị trí, tiếp tục tối ưu hóa để giảm thiểu rủi ro trong giao dịch trực tiếp và tối đa hóa lợi thế. Chiến lược này có tiềm năng lớn để thử nghiệm và cải tiến hơn nữa để thích nghi với động lực thị trường đang phát triển.


/*backtest
start: 2023-10-03 00:00:00
end: 2023-11-02 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy("Noro's SuperTrend Strategy v2.0 Limit", shorttitle = "STL str", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
cloud = input(25, defval = 25, minval = 5, maxval = 50, title = "cloud, % of ATR")
Factor = input(title = "Super Trend", defval = 3, minval = 1, maxval = 100)
ATR = input(title = "ATR", defval = 7, minval = 1,maxval = 100)
centr = input(true, defval = true, title = "need center of ATR?")
border = input(false, defval = false, title = "need border?")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Super Trend ATR 1
src = close
Up=hl2-(Factor*atr(ATR))
Dn=hl2+(Factor*atr(ATR))
TUp=close[1]>TUp[1]? max(Up,TUp[1]) : Up
TDown=close[1]<TDown[1]? min(Dn,TDown[1]) : Dn
Trend = close > TDown[1] ? 1: close< TUp[1]? -1: nz(Trend[1],1)
Tsl1 = Trend==1? TUp: TDown
Tsl2 = Trend==1? TDown: TUp
limit = (Tsl1 - Tsl2) / 100 * cloud
upcloud = Tsl1 - limit
dncloud = Tsl2 + limit

//Cloud
linecolor = Trend == 1 ? green : red
centercolor = centr == true ? blue : na
cloudcolor = Trend == 1 ? green : red
cline = (Tsl1 + Tsl2) / 2
P1 = plot(Tsl1, color = border == false ? na : linecolor , style = line , linewidth = 1,title = "SuperTrend ATR-1")
P2 = plot(Tsl2, color = border == false ? na : linecolor , style = line , linewidth = 1,title = "SuperTrend ATR-2")
P3 = plot(cline, color = centercolor , style = line , linewidth = 1,title = "SuperTrend Center")
P4 = plot(upcloud, color = border == false ? na : linecolor , style = line , linewidth = 1,title = "SuperTrend Center+1")
P5 = plot(dncloud, color = border == false ? na : linecolor , style = line , linewidth = 1,title = "SuperTrend Center-1")
fill(P1, P4, color = linecolor == red ? red : lime, transp = 50)
fill(P2, P5, color = linecolor == red ? red : lime, transp = 50)

//Signals
up = 0.0
dn = 0.0
up := Trend != 1 ? 0 : Trend == 1 and close < open ? close : up[1]
dn := Trend != -1 ? close * 1000 : Trend == -1 and close > open ? close : dn[1]

//Trading
size = strategy.position_size
lot = 0.0
lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1]
if true
    strategy.entry("Long", strategy.long, needlong ? lot : 0, limit = up, when = (Trend == 1 and time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    strategy.entry("Short", strategy.short, needshort ? lot : 0, limit = dn, when = (Trend == -1 and time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()

Thêm nữa