Tóm tắt: Đây là một chiến lược theo dõi xu hướng bằng cách áp dụng các chỉ số sóng. Nó lấy ra một đường sóng bằng cách tính toán đường trung bình di chuyển chỉ số của giá trung bình và đường trung bình di chuyển của giá tuyệt đối. Chiến lược này tạo ra tín hiệu giao dịch bằng cách giám sát đường sóng giao thoa với khu vực mua quá nhiều và bán quá nhiều.
Các chiến lược:
Tính toán giá trung bình ap = ((giá cao nhất + giá thấp nhất + giá đóng cửa) / 3)
Tính toán EMA của ap trong chu kỳ n1 và lấy
Tính toán ap và giá trị chênh lệch tuyệt đối của ESA trong vòng n1 EMA, lấy d
Đường sóng tính toán: ci= ((ap-esa) / ((0.015*d))
Tính toán EMA của chu kỳ n2 ci, và nhận được tci cuối cùng, tức wt1.
Tính toán SMA 4 chu kỳ của wt1 và nhận được wt2
Hình vẽ đường ngang của vùng mua quá mức và bán quá mức obLevel 1/2 và osLevel 1/2
Tín hiệu mua được tạo ra khi wt1 đi qua obLevel2; tín hiệu bán được tạo ra khi wt1 đi qua osLevel2
Thêm EmaFilter đường thẳng và VolumeFilter khối lượng giao dịch như điều kiện lọc, tránh tín hiệu sai
Thiết lập tỷ lệ dừng lỗ sau khi vào và rút khỏi nắm giữ
Phân tích lợi thế:
Dòng sóng xử lý tốt hơn các chuyển đổi đa không gian, có thể nắm bắt xu hướng hiệu quả
Kết hợp đường thẳng và giao dịch với độ lọc kép, độ tin cậy cao
Sử dụng tính toán nhiều parameter, tránh sự hạn chế của một chỉ số duy nhất
Thiết lập lệnh dừng lỗ, có thể khóa một phần lợi nhuận và kiểm soát rủi ro hiệu quả
Rủi ro và khuyết điểm:
Lựa chọn các tham số có thể dẫn đến hiệu suất kém hoặc quá phù hợp trong một số trường hợp
Không có hướng dẫn rõ ràng về lựa chọn các tham số tối ưu, cần phải thử và sai
Không bao gồm các điều kiện thị trường rộng lớn trong tín hiệu
Rủi ro của hiệu ứng phi công nếu sử dụng trong thị trường hạn chế hoặc biến động
Không có quy tắc rút tiền ngoài lệnh dừng/lợi nhuận
Định hướng tối ưu:
Kiểm tra các tập hợp tham số trên các khung thời gian và tài sản khác nhau để tìm ra giá trị tối ưu nhất
Kết hợp các chỉ số biến động để tránh các tín hiệu trong thời gian biến động thấp
Thêm các chỉ số bổ sung như RSI để tăng độ chính xác tín hiệu
Xây dựng một mô hình học máy để tìm các thông số tối ưu cho một tài sản cụ thể
Tăng khả năng rút lui bằng cách thêm theo dõi dừng lỗ hoặc rút lui dựa trên sự kiện mở rộng biến động đột ngột
Tóm lại:
Đây là một chiến lược kết hợp các đường sóng và thiết kế các chỉ số phụ trợ. Nó sử dụng các tính năng của đường sóng để xác định hiệu quả các chuyển đổi xu hướng, được hỗ trợ bởi đường trung bình và lọc khối lượng giao dịch để tránh các tín hiệu sai, có thể thu được hầu hết các xu hướng đường dài trung gian. Đồng thời sử dụng stop-loss để kiểm soát rủi ro.
/*backtest start: 2023-12-31 00:00:00 end: 2024-01-30 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Bush Strategy test", shorttitle="Nique Audi", overlay=false) // Paramètres n1 = input(10, title="Channel Length") n2 = input(21, title="Average Length") obLevel1 = input(60, title="Over Bought Level 1") obLevel2 = input(53, title="Over Bought Level 2") osLevel1 = input(-65, title="Over Sold Level 1") osLevel2 = input(-60, title="Over Sold Level 2") takeProfitPercentage = input(1, title="Take Profit (%)") stopLossPercentage = input(0.50, title="Stop Loss (%)") // Calculs ap = hlc3 esa = ta.ema(ap, n1) d = ta.ema(math.abs(ap - esa), n1) ci = (ap - esa) / (0.015 * d) tci = ta.ema(ci, n2) wt1 = tci wt2 = ta.sma(wt1, 4) // Tracé des lignes plot(0, color=color.gray) plot(obLevel1, color=color.red) plot(osLevel1, color=color.green) plot(obLevel2, color=color.red, style=plot.style_line) plot(osLevel2, color=color.green, style=plot.style_line) plot(wt1, color=color.green) plot(wt2, color=color.red, style=plot.style_line) // Tracé de la différence entre wt1 et wt2 en bleu hline(0, "Zero Line", color=color.gray) // Conditions d'entrée long et court longCondition = ta.crossover(wt1, obLevel2) shortCondition = ta.crossunder(wt1, osLevel2) // Tracé des signaux d'achat et de vente plotshape(series=longCondition, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small, title="Buy Signal") plotshape(series=shortCondition, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small, title="Sell Signal") // Conditions d'entrée et de sortie strategy.entry("Long", strategy.long, when=longCondition) strategy.entry("Short", strategy.short, when=shortCondition) // Niveaux de prise de profit pour les positions longues et courtes longTakeProfitLevel = strategy.position_avg_price * (1 + takeProfitPercentage / 100) shortTakeProfitLevel = strategy.position_avg_price * (1 - takeProfitPercentage / 100) // Vérification si les niveaux de prise de profit sont atteints longTakeProfitReached = strategy.position_size > 0 and high >= longTakeProfitLevel shortTakeProfitReached = strategy.position_size < 0 and low <= shortTakeProfitLevel // Tracé des formes de prise de profit plotshape(series=longTakeProfitReached, style=shape.xcross, location=location.belowbar, color=color.blue, size=size.small, title="Take Profit Long") plotshape(series=shortTakeProfitReached, style=shape.xcross, location=location.abovebar, color=color.blue, size=size.small, title="Take Profit Short") // Niveaux de stop loss pour les positions longues et courtes longStopLossLevel = strategy.position_avg_price * (1 - stopLossPercentage / 100) shortStopLossLevel = strategy.position_avg_price * (1 + stopLossPercentage / 100) // Vérification si les niveaux de stop loss sont atteints longStopLossReached = strategy.position_size > 0 and low <= longStopLossLevel shortStopLossReached = strategy.position_size < 0 and high >= shortStopLossLevel // Tracé des formes de stop loss plotshape(series=longStopLossReached, style=shape.xcross, location=location.belowbar, color=color.red, size=size.small, title="Stop Loss Long") plotshape(series=shortStopLossReached, style=shape.xcross, location=location.abovebar, color=color.red, size=size.small, title="Stop Loss Short") // Fermeture des positions en cas de prise de profit ou de stop loss strategy.close("Long", when=longTakeProfitReached or longStopLossReached) strategy.close("Short", when=shortTakeProfitReached or shortStopLossReached)