Chiến lược giao dịch xu hướng sóng dựa trên LazyBear

Tác giả:ChaoZhang, Ngày: 2023-12-19 12:07:14
Tags:

img

Tổng quan

Đây là một chiến lược giao dịch dựa trên chỉ số xu hướng sóng của LazyBear. Chiến lược xác định tâm lý thị trường thông qua tính toán xu hướng sóng của biến động giá, và đưa ra các quyết định dài và ngắn theo đó.

Chiến lược logic

Cốt lõi của chiến lược này là chỉ số xu hướng sóng của LazyBear. Nó đầu tiên tính toán giá trung bình (AP), sau đó là trung bình chuyển động theo cấp số nhân của AP (ESA) và chuyển động giá tuyệt đối (D). Dựa trên ESA và D, chiến lược tính toán Chỉ số biến động (CI), sau đó đưa vào một trung bình chuyển động theo cấp số nhân để tạo ra đường xu hướng sóng (WT). WT được xử lý thêm thành WT1 và WT2 bằng cách sử dụng các đường trung bình chuyển động đơn giản. Khi WT1 vượt qua WT2, nó kích hoạt chữ thập vàng và đi dài. Khi WT1 vượt dưới WT2, nó kích hoạt chữ thập chết và ngắn.

Phân tích lợi thế

Đây là một xu hướng rất đơn giản nhưng thực tế theo chiến lược.

  1. Nó xác định xu hướng giá và tâm lý thị trường rõ ràng dựa trên chỉ số xu hướng sóng
  2. Logic giao dịch đơn giản của việc đi dài / ngắn dựa trên đường chéo vàng / chết của các đường WT
  3. Các tham số có thể tùy chỉnh để điều chỉnh độ nhạy của WT cho các chu kỳ khác nhau
  4. Tính linh hoạt để thêm các bộ lọc bổ sung như cửa sổ thời gian giao dịch

Phân tích rủi ro

Có một số rủi ro cho chiến lược này:

  1. Là một xu hướng sau chiến lược, nó có thể tạo ra nhiều tín hiệu sai trong các thị trường giới hạn phạm vi
  2. Tính chất chậm của WT có thể gây ra các lượt bỏ lỡ
  3. Các thông số mặc định có thể không phù hợp với tất cả các sản phẩm và chu kỳ
  4. Không có cơ chế dừng lỗ, thời gian giữ có thể rất dài

Các giải pháp chính là:

  1. Tối ưu hóa các tham số để điều chỉnh độ nhạy của WT
  2. Thêm các chỉ số khác để xác nhận để tránh tín hiệu sai
  3. Sử dụng lệnh dừng lỗ và lấy lợi nhuận
  4. Giới hạn giao dịch hoặc vị trí hàng ngày

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

Có chỗ cho việc tối ưu hóa thêm:

  1. Tối ưu hóa các thông số WT để có độ nhạy hoặc ổn định tốt hơn
  2. Sử dụng các bộ tham số khác nhau dựa trên chu kỳ
  3. Thêm các chỉ số như khối lượng, biến động để xác nhận
  4. Thêm stop loss và take profit
  5. Làm giàu logic giao dịch như kim tự tháp, giao dịch lưới
  6. Khám phá các tính năng và quy tắc tốt hơn bằng cách sử dụng máy học

Tóm lại

Tóm lại, đây là một chiến lược theo xu hướng sóng rất đơn giản và thực tế. Bằng cách mô hình hóa xu hướng sóng của biến động giá, nó xác định các điều kiện thị trường mua quá mức và bán quá mức để tạo ra các tín hiệu giao dịch bằng cách sử dụng WTs thập giá vàng và thập giá chết. Chiến lược này dễ thực hiện nhưng có thể yêu cầu tối ưu hóa thêm về độ nhạy và ổn định. Là một chiến lược theo xu hướng, nó cũng cần các bộ lọc và logic bổ sung để tránh các tín hiệu sai. Nhìn chung, điều này phục vụ như một mẫu chiến lược hữu ích với nhiều phòng cải tiến.


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

//
// @author LazyBear
//
// If you use this code in its original/modified form, do drop me a note. 
//
//@version=4
     
// === INPUT BACKTEST RANGE ===
fromMonth = input(defval = 1,    title = "From Month",      type = input.integer, minval = 1, maxval = 12)
fromDay   = input(defval = 1,    title = "From Day",        type = input.integer, minval = 1, maxval = 31)
fromYear  = input(defval = 2021, title = "From Year",       type = input.integer, minval = 1970)
thruMonth = input(defval = 1,    title = "Thru Month",      type = input.integer, minval = 1, maxval = 12)
thruDay   = input(defval = 1,    title = "Thru Day",        type = input.integer, minval = 1, maxval = 31)
thruYear  = input(defval = 2112, title = "Thru Year",       type = input.integer, minval = 1970)

// === INPUT SHOW PLOT ===
showDate  = input(defval = true, title = "Show Date Range", type = input.bool)

// === FUNCTION EXAMPLE ===
start     = timestamp(fromYear, fromMonth, fromDay, 00, 00)        // backtest start window
finish    = timestamp(thruYear, thruMonth, thruDay, 23, 59)        // backtest finish window
window()  => true       // create function "within window of time"

n1 = input(10, "Channel Length")
n2 = input(21, "Average Length")
obLevel1 = input(60, "Over Bought Level 1")
obLevel2 = input(53, "Over Bought Level 2")
osLevel1 = input(-60, "Over Sold Level 1")
osLevel2 = input(-53, "Over Sold Level 2")
 
ap = hlc3 
esa = ema(ap, n1)
d = ema(abs(ap - esa), n1)
ci = (ap - esa) / (0.015 * d)
tci = ema(ci, n2)
 
wt1 = tci
wt2 = sma(wt1,4)

plot(0, color=color.gray)
plot(obLevel1, color=color.red)
plot(osLevel1, color=color.green)
plot(obLevel2, color=color.red, style=3)
plot(osLevel2, color=color.green, style=3)

plot(wt1, color=color.white)
plot(wt2, color=color.fuchsia)
plot(wt1-wt2, color=color.new(color.blue, 80), style=plot.style_area)

//Strategy
strategy(title="T!M - Wave Trend Strategy", overlay = false, precision = 8, max_bars_back = 200, pyramiding = 0, initial_capital = 1000, currency = currency.NONE, default_qty_type = strategy.cash, default_qty_value = 1000, commission_type = "percent", commission_value = 0.1, calc_on_every_tick=false, process_orders_on_close=true)
    
longCondition  = crossover(wt1, wt2)
shortCondition = crossunder(wt1, wt2)

strategy.entry(id="Long Entry", comment="buy", long=true, when=longCondition and window())
strategy.close("Long Entry", comment="sell", when=shortCondition and window())      

//strategy.entry(id="Short Entry", long=false, when=shortCondition)

Thêm nữa