Chiến lược này là một hệ thống giao dịch theo xu hướng dựa trên Dải hỗ trợ thị trường bò. Nó chủ yếu sử dụng các tín hiệu chéo giữa Trung bình di chuyển đơn giản (SMA) 20 tuần và Trung bình di chuyển biểu mô (EMA) 21 tuần để xác định hướng xu hướng thị trường và đưa ra quyết định giao dịch. Chiến lược tạo ra các tín hiệu dài khi các đường trung bình di chuyển vượt lên và thoát ra khi chúng vượt xuống, nhằm nắm bắt các cơ hội xu hướng trung hạn đến dài hạn.
Lý thuyết cốt lõi của chiến lược là theo dõi vị trí tương đối của SMA 20 tuần và EMA 21 tuần để đánh giá xu hướng thị trường. Khi trung bình ngắn hạn (20 tuần SMA) vượt qua mức trung bình dài hạn (21-tuần EMA), nó chỉ ra xu hướng tăng tiềm năng, kích hoạt nhập vị trí dài. Khi trung bình ngắn hạn giảm xuống dưới trung bình dài hạn, nó báo hiệu một kết thúc tiềm năng của xu hướng tăng, kích hoạt đóng vị trí. Chiến lược sử dụng quản lý vị trí phần trăm_of_equity, với phí giao dịch 0,1% và trượt 3 điểm cơ bản.
Chiến lược giao dịch Bull Market Support Band là một hệ thống theo dõi xu hướng dựa trên lý thuyết phân tích kỹ thuật cổ điển. Nó nắm bắt các cơ hội xu hướng trung và dài hạn thông qua các đường chéo trung bình chuyển động theo khung thời gian hàng tuần, có logic rõ ràng và rủi ro có thể kiểm soát được. Tuy nhiên, chiến lược hoạt động kém trong các thị trường khác nhau và có một số sự chậm trễ. Thông qua việc thêm các chỉ số phụ trợ, tối ưu hóa dừng lỗ và quản lý vốn cải thiện, chiến lược có không gian tối ưu hóa đáng kể. Nó phù hợp với các nhà đầu tư có vốn đáng kể và dung nạp rủi ro.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-25 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 // © zkdev //@version=6 strategy(title='Demo GPT - Bull Market Support Band', overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1, slippage=3) // ------------------------------------------------------------------------- // Compile-time timestamp constants for default date range // (2018-01-01 00:00:00 UTC -> 1514764800000 // 2069-12-31 23:59:59 UTC -> 3155759999000) // ------------------------------------------------------------------------- const int defaultFromDate = 1514764800000 const int defaultToDate = 3155759999000 // ------------------------------------------------------------------------- // Inputs: date range // ------------------------------------------------------------------------- fromDate = input(title='Start Date', defval=defaultFromDate) toDate = input(title='End Date', defval=defaultToDate) // ------------------------------------------------------------------------- // Indicator settings & calculations // ------------------------------------------------------------------------- smaLength = 20 emaLength = 21 source = close sma = ta.sma(source, smaLength) ema = ta.ema(source, emaLength) // ------------------------------------------------------------------------- // Fetch weekly SMA & EMA // ------------------------------------------------------------------------- outSma = request.security(syminfo.tickerid, 'W', sma, gaps=barmerge.gaps_on, lookahead=barmerge.lookahead_off) outEma = request.security(syminfo.tickerid, 'W', ema, gaps=barmerge.gaps_on, lookahead=barmerge.lookahead_off) // ------------------------------------------------------------------------- // Plot visuals (20w SMA, 21w EMA, fill in between) // ------------------------------------------------------------------------- smaPlot = plot(outSma, color=color.new(color.red, 0), title='20w SMA') emaPlot = plot(outEma, color=color.new(color.green, 0), title='21w EMA') fill(smaPlot, emaPlot, color=color.new(color.orange, 75), fillgaps=true) // ------------------------------------------------------------------------- // We evaluate crossover/crossunder on *every bar* and store the result // ------------------------------------------------------------------------- crossUp = ta.crossover(outSma, outEma) crossDown = ta.crossunder(outSma, outEma) // ------------------------------------------------------------------------- // Trade logic: only operate within chosen date range // Buy when outSma crosses above outEma; Sell (close) when outSma crosses below outEma // ------------------------------------------------------------------------- inDateRange = true if inDateRange // If we have a crossUp event on this bar, buy (go Long) if crossUp strategy.entry('Long', strategy.long) // If we have a crossDown event on this bar, sell (close Long) if crossDown strategy.close('Long')