Chiến lược này dựa trên các tín hiệu chéo vàng và chéo chết của đường trung bình động ALMA kép, kết hợp với các tín hiệu dài và ngắn của chỉ số MACD, để đạt được các vị trí dài và ngắn tự động. Chiến lược này phù hợp với khung thời gian từ 4 giờ trở lên và dữ liệu thử nghiệm là BNB / USDT từ năm 2017 đến nay, với tỷ lệ hoa hồng được đặt ở mức 0,03%.
Chiến lược này sử dụng các đường nhanh và chậm được xây dựng từ ALMA để xây dựng đường trung bình di chuyển kép. Chiều dài đường nhanh là 20 và đường chậm là 40, cả hai đều áp dụng độ dịch chuyển 0,9 và độ lệch chuẩn 5. Khi đường nhanh vượt qua đường chậm, một tín hiệu dài được tạo ra. Khi đường nhanh vượt dưới đường chậm, một tín hiệu ngắn được tạo ra.
Đồng thời, chiến lược kết hợp tín hiệu histogram của chỉ số MACD. Chỉ khi histogram MACD dương tính (tăng), tín hiệu dài là hợp lệ; chỉ khi histogram MACD âm tính (giảm), tín hiệu ngắn là hợp lệ.
Chiến lược cũng thiết lập các điều kiện lấy lợi nhuận và dừng lỗ. Lợi nhuận dài là 2 lần và lỗ dừng là 0,2 lần; Lợi nhuận ngắn là 0,05 lần và lỗ dừng là 1 lần.
Chiến lược này kết hợp phán đoán xu hướng của đường trung bình động đôi và phán đoán năng lượng của chỉ số MACD, có thể lọc hiệu quả các tín hiệu sai và cải thiện độ chính xác của việc nhập.
Dữ liệu backtest được áp dụng từ năm 2017, bao gồm nhiều chu kỳ chuyển đổi tăng và giảm. Chiến lược vẫn hoạt động tốt qua các giai đoạn. Điều này chứng minh rằng chiến lược thích nghi với cả đặc điểm tuyến tính và phi tuyến tính của thị trường.
Chiến lược có những rủi ro sau:
Giải pháp:
Chiến lược cũng có thể được tối ưu hóa trong các khía cạnh sau:
Chiến lược này kết hợp thành công phán đoán xu hướng của các đường trung bình động và phán đoán phụ của MACD, và thiết lập lợi nhuận và dừng lỗ hợp lý, có thể đạt được lợi nhuận ổn định trong các điều kiện thị trường khác nhau. Sự ổn định và lợi nhuận của chiến lược có thể được tăng thêm bằng cách tối ưu hóa liên tục các thiết lập tham số, thêm các điều kiện lọc bổ sung, v.v.
/*backtest start: 2023-11-04 00:00:00 end: 2023-12-04 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © exlux99 //@version=4 strategy(title = "Full Crypto Swing Strategy ALMA Cross", overlay = true, pyramiding=1,initial_capital = 1, default_qty_type= strategy.percent_of_equity, default_qty_value = 100, calc_on_order_fills=false, slippage=0,commission_type=strategy.commission.percent,commission_value=0.03) //time condition fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) fromYear = input(defval = 2010, title = "From Year", minval = 1970) //monday and session // To Date Inputs toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31) toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12) toYear = input(defval = 2031, title = "To Year", minval = 1970) startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00) finishDate = timestamp(toYear, toMonth, toDay, 00, 00) time_cond = time >= startDate and time <= finishDate UseHAcandles = input(false, title="Use Heikin Ashi Candles in Algo Calculations") haClose = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, close) : close haOpen = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, open) : open haHigh = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, high) : high haLow = UseHAcandles ? security(heikinashi(syminfo.tickerid), timeframe.period, low) : low //alma fast and slow src = haClose windowsize = input(title="Length Size Fast", type=input.integer, defval=20) windowsize2 = input(title="Length Size Slow", type=input.integer, defval=40) offset = input(title="Offset", type=input.float, defval=0.9, step=0.05) sigma = input(title="Sigma", type=input.float, defval=5) outfast=alma(src, windowsize, offset, sigma) outslow=alma(src, windowsize2, offset, sigma) //macd fast_length = input(title="Fast Length", type=input.integer, defval=6) slow_length = input(title="Slow Length", type=input.integer, defval=25) signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9) // Calculating fast_ma = ema(src, fast_length) slow_ma = ema(src, slow_length) macd = fast_ma - slow_ma signal = ema(macd, signal_length) hist = macd - signal long=crossover(outfast,outslow) and hist > hist[1] and time_cond short=crossunder(outfast,outslow) and hist < hist[1] and time_cond takeProfit_long=input(2.0, step=0.005) stopLoss_long=input(0.2, step=0.005) takeProfit_short=input(0.05, step=0.005) stopLoss_short=input(1.0, step=0.005) strategy.entry("long",1,when=long) strategy.entry("short",0,when=short) strategy.exit("short_tp/sl", "long", profit=close * takeProfit_long / syminfo.mintick, loss=close * stopLoss_long / syminfo.mintick, comment='LONG EXIT', alert_message = 'closeshort') strategy.exit("short_tp/sl", "short", profit=close * takeProfit_short / syminfo.mintick, loss=close * stopLoss_short / syminfo.mintick, comment='SHORT EXIT', alert_message = 'closeshort')