Đâ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 đó.
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.
Đây là một xu hướng rất đơn giản nhưng thực tế theo chiến lược.
Có một số rủi ro cho chiến lược này:
Các giải pháp chính là:
Có chỗ cho việc tối ưu hóa thêm:
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 WT
/*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)