
Chiến lược này dựa trên tín hiệu Gold Fork Dead Fork của đường trung bình di chuyển ALMA kép, kết hợp với tín hiệu đa trống của chỉ số MACD, để thực hiện tự động nhiều trống. Chiến lược này áp dụng cho chu kỳ thời gian 4 giờ trở lên, dữ liệu thử nghiệm là BNB / USDT, khoảng thời gian từ năm 2017 đến nay, phí xử lý được đặt là 0,03%
Chiến lược sử dụng đường nhanh và đường chậm ALMA để xây dựng đường trung bình di chuyển kép. Dài đường nhanh là 20 và dài đường chậm là 40, với độ lệch 0,9 và chênh lệch chuẩn là 5.
Trong khi đó, các chiến lược kết hợp với MACD chỉ số của đường thẳng biểu đồ tín hiệu. Chỉ khi MACD đường thẳng là tích cực () tăng, nhiều tín hiệu là có hiệu quả; chỉ khi MACD đường thẳng là âm () giảm, tín hiệu là không có hiệu quả.
Chiến lược này đồng thời đặt các điều kiện dừng lỗ. Đặt nhiều lần dừng là 2 lần, dừng là 0,2 lần; Đặt trần là 0,05 lần, dừng là 1 lần.
Chiến lược này kết hợp sự phán đoán xu hướng của đường trung bình di chuyển đôi và sự 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 giả, cải thiện độ chính xác của nhập cảnh. Thiết lập dừng lỗ là hợp lý, tối đa hóa lợi nhuận và tránh thua lỗ lớn.
Dữ liệu phản hồi được áp dụng từ năm 2017, bao gồm nhiều lần chuyển đổi bò và gấu, chiến lược vẫn hoạt động tốt trong điều kiện xuyên chu kỳ. Điều này chứng minh rằng chiến lược thích nghi với đặc điểm tuyến tính và phi tuyến tính của thị trường.
Chiến lược này có những rủi ro như sau:
Giải pháp:
Chiến lược này cũng có thể được tối ưu hóa theo các khía cạnh sau:
Chiến lược này kết hợp thành công với phán đoán xu hướng của đường trung bình di chuyển và phán đoán hỗ trợ của MACD, và thiết lập các điểm dừng lỗ hợp lý, có thể đạt được lợi nhuận ổn định trong nhiều trường hợp. Bằng cách tiếp tục tối ưu hóa các thiết lập tham số và thêm các điều kiện lọc bổ sung, sự ổn định và khả năng lợi nhuận của chiến lược có thể được nâng cao hơn nữa.
/*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')