Chiến lược này là một hệ thống giao dịch theo xu hướng dựa trên nhiều đường chéo trung bình động và lọc biến động. Nó sử dụng ba đường trung bình động của các giai đoạn khác nhau để xác định xu hướng thị trường và sử dụng đường trung bình động thứ tư làm điểm chuẩn để xác định thị trường bò / gấu. Chiến lược cũng kết hợp chỉ số biến động như một bộ lọc giao dịch để tránh giao dịch trong môi trường biến động thấp. Nó hỗ trợ cả các vị trí dài và ngắn và cung cấp cơ chế quản lý vị trí và dừng lỗ linh hoạt.
Lựa chọn đường trung bình động: Chiến lược sử dụng ba đường trung bình động chính (ngắn hạn, trung hạn và dài hạn) để xác định xu hướng. Người dùng có thể chọn từ sáu đường trung bình động được xác định trước, mỗi đường có thể được cấu hình riêng với các thông số bao gồm thời gian tính toán, nguồn dữ liệu và loại (ví dụ: SMA, EMA).
Xác định xu hướng
Xác định thị trường bò / gấu: Một đường trung bình động thứ tư tùy chọn có thể được sử dụng làm đường phân chia cho thị trường bò và gấu. Chỉ có các vị trí dài được phép khi giá trên đường này và chỉ có các vị trí ngắn khi dưới đường này.
Bộ lọc biến động: Một chỉ số biến động dựa trên giá cao nhất và thấp nhất được sử dụng. Chiến lược chỉ tạo ra tín hiệu giao dịch khi biến động vượt quá ngưỡng được xác định bởi người dùng.
Logic đầu vào:
Logic thoát:
Stop Loss: Sử dụng một tỷ lệ dừng lỗ cố định, có thể được tùy chỉnh bởi người dùng.
Quản lý vị trí: Sử dụng một tỷ lệ phần trăm cố định của vốn chủ sở hữu tài khoản cho mỗi giao dịch, có thể được tùy chỉnh bởi người dùng.
Phân tích xu hướng đa chiều: Bằng cách sử dụng nhiều đường trung bình động, chiến lược có thể nắm bắt xu hướng thị trường toàn diện hơn, giảm các tín hiệu sai.
Cấu hình tham số linh hoạt: Người dùng có thể điều chỉnh các tham số khác nhau một cách linh hoạt theo đặc điểm của các thị trường và công cụ giao dịch khác nhau, bao gồm loại MA, thời gian và nguồn dữ liệu.
Bộ lọc biến động: Bằng cách kết hợp chỉ số biến động, chiến lược có thể tránh giao dịch trong môi trường biến động thấp, cải thiện chất lượng tín hiệu.
Điều chỉnh thị trường tăng/giảm: Cơ chế xác định thị trường tăng/giảm tùy chọn cho phép chiến lược thích nghi tốt hơn với các môi trường thị trường khác nhau, giảm các giao dịch ngược xu hướng.
Quản lý vị trí năng động: Phương pháp quản lý vị trí dựa trên cổ phần tự động điều chỉnh kích thước giao dịch khi kích thước tài khoản thay đổi.
Kiểm soát rủi ro nhiều lớp: Bao gồm nhiều cơ chế kiểm soát rủi ro như lọc biến động, xác nhận xu hướng, đóng cửa vị trí một phần và dừng lỗ cố định.
Giao dịch hai hướng: Hỗ trợ cả các vị trí dài và ngắn, cho phép các cơ hội giao dịch trong các điều kiện thị trường khác nhau.
Các trợ giúp trực quan: Chiến lược vẽ các đường trung bình động khác nhau và nhãn tín hiệu giao dịch trên biểu đồ, tạo điều kiện phân tích trực quan và kiểm tra ngược.
Bản chất chậm trễ: Mức trung bình động vốn là các chỉ số chậm trễ, có thể dẫn đến thời gian bước vào và bước ra chậm trễ một chút, ảnh hưởng đến lợi nhuận.
Hiệu suất kém trong các thị trường khác nhau: Trong các thị trường lân cận, hỗn loạn, chiến lược có thể tạo ra các tín hiệu sai thường xuyên, dẫn đến giao dịch quá mức và thua lỗ.
Độ nhạy của các tham số: Hiệu suất của chiến lược phụ thuộc rất nhiều vào cài đặt tham số và các thị trường và khung thời gian khác nhau có thể yêu cầu sự kết hợp các tham số khác nhau.
Nguy cơ rút vốn: Trong thời gian đảo ngược xu hướng, chiến lược có thể không hoàn toàn thoát khỏi các vị trí kịp thời, có khả năng dẫn đến rút vốn đáng kể.
Sự phụ thuộc quá mức vào các chỉ số kỹ thuật: Chiến lược hoàn toàn dựa trên các chỉ số kỹ thuật, bỏ qua các yếu tố cơ bản, có thể dẫn đến hiệu suất kém trong các tin tức hoặc sự kiện lớn.
Rủi ro quản lý tiền: Phương pháp định giá tỷ lệ phần trăm cố định có thể dẫn đến rủi ro quá mức trong các khoản lỗ liên tiếp.
Thiết lập Stop Loss: Phân phần cố định Stop Loss có thể không phù hợp với tất cả các môi trường thị trường và có thể dẫn đến việc thoát sớm trong thời gian biến động cao.
Các thông số thích nghi: Đưa ra các cơ chế thích nghi để điều chỉnh động các thông số trung bình và ngưỡng biến động dựa trên điều kiện thị trường.
Phân tích nhiều khung thời gian: Kết hợp thông tin từ các khung thời gian dài và ngắn hơn để cải thiện độ chính xác xác xác định xu hướng.
Tối ưu hóa chỉ số biến động: Xem xét sử dụng các chỉ số biến động phức tạp hơn như ATR hoặc Bollinger Bandwidth để đánh giá chính xác hơn tình hình thị trường.
Tích hợp chỉ số động lực: Kết hợp các chỉ số động lực như RSI hoặc MACD để tối ưu hóa thời gian vào và ra.
Cơ chế dừng lỗ được cải thiện: Thực hiện dừng lại hoặc dừng lỗ động dựa trên ATR để thích nghi tốt hơn với biến động thị trường.
Tích hợp tâm lý thị trường: Kết hợp các chỉ số tâm lý thị trường như VIX để tối ưu hóa hiệu suất chiến lược trong các môi trường thị trường khác nhau.
Tối ưu hóa Quản lý Vị trí: Thực hiện kích thước vị trí năng động dựa trên biến động hoặc lợi nhuận / lỗ hiện tại để kiểm soát rủi ro tốt hơn.
Thêm bộ lọc cơ bản: Xem xét các yếu tố cơ bản như các bản phát hành dữ liệu kinh tế quan trọng hoặc báo cáo lợi nhuận của công ty để tránh giao dịch trong thời kỳ rủi ro cao.
Tối ưu hóa học máy: Sử dụng các thuật toán học máy để tối ưu hóa sự kết hợp các tham số và các quy tắc quyết định, cải thiện khả năng thích nghi chiến lược.
Kiểm tra ngược và kiểm tra phía trước: Thực hiện kiểm tra ngược và kiểm tra phía trước toàn diện hơn trên các thị trường và khoảng thời gian khác nhau để xác minh tính vững chắc của chiến lược.
Chiến lược theo xu hướng chéo trung bình chuyển động đa với bộ lọc biến động là một hệ thống giao dịch toàn diện và linh hoạt kết hợp nhiều trung bình chuyển động, chỉ số biến động và các nguyên tắc theo xu hướng. Thông qua phân tích xu hướng đa chiều và kiểm soát rủi ro nghiêm ngặt, chiến lược có tiềm năng nắm bắt xu hướng bền vững trong các môi trường thị trường khác nhau. Tuy nhiên, người dùng cần chú ý đến các vấn đề tối ưu hóa tham số và khả năng thích nghi thị trường, và xem xét giới thiệu các chỉ số kỹ thuật tiên tiến hơn và các kỹ thuật quản lý rủi ro để nâng cao hiệu suất chiến lược. Nhìn chung, đây là một khuôn khổ chiến lược vững chắc cung cấp một nền tảng tốt cho nghiên cứu và tối ưu hóa hơn nữa.
/*backtest start: 2023-07-23 00:00:00 end: 2024-07-28 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title="WODIsMA Strategy", shorttitle="WMA_Strategy", overlay=true, overlay=true, pyramiding=2, default_qty_value=6, default_qty_type=strategy.fixed, initial_capital=1000, currency=currency.USD) // 用户输入参数 capital_pct = input.float(20, title="每笔订单使用的资金百分比(%)", minval=0.1, maxval=100, group="Position") / 100 close_pct = input.float(20, title="每次平仓使用的百分比(%)", minval=0, maxval=100, group="Position") / 100 stop_loss_user = input.float(10, title="止损百分比(%)", minval=0, maxval=100, group="Position") / 100 allow_long = input.bool(true, title="是否做多", group="Position") allow_short = input.bool(true, title="是否做空", group="Position") // 用户选择的移动平均线 short_term_ma = input.string("MA 0", title="短期趋势均线", options=["MA 0", "MA 1", "MA 2", "MA 3", "MA 4", "MA 5"], group="TrendIdentify") mid_term_ma = input.string("MA 1", title="中期趋势均线", options=["MA 0", "MA 1", "MA 2", "MA 3", "MA 4", "MA 5"], group="TrendIdentify") long_term_ma = input.string("MA 2", title="长期趋势均线", options=["MA 0", "MA 1", "MA 2", "MA 3", "MA 4", "MA 5"], group="TrendIdentify") bull_bear_ma = input.string("MA 3", title="牛熊趋势均线", options=["MA 0", "MA 1", "MA 2", "MA 3", "MA 4", "MA 5"], group="TrendIdentify") enable_bull_bear = input.bool(false, title="是否启用牛熊趋势线", group="TrendIdentify") // 波动率指标参数 volatility_k = input.int(60, title="波动率数值K线数" , group="volatility") volatility_threshold = input.float(1, minval=0, title="波动率值 0则不使用(%)", group="volatility") // 定义不同类型的移动平均线函数 ma(source, length, type) => switch type "SMA" => ta.sma(source, length) "EMA" => ta.ema(source, length) "SMMA (RMA)" => ta.rma(source, length) "WMA" => ta.wma(source, length) "VWMA" => ta.vwma(source, length) // 定义每根均线的输入参数和颜色 length0 = input.int(16, minval=1, title="Length 0", group="MA 0") source0 = input.source(hl2, title="Source 0", group="MA 0") type0 = input.string("SMA", title="Type 0", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA 0") timeframe0 = input.timeframe("", title="Timeframe 0", group="MA 0") color0 = input.color(color.gray, title="Color 0", group="MA 0") show0 = input.bool(true, title="Show MA 0", group="MA 0") length1 = input.int(48, minval=1, title="Length 1", group="MA 1") source1 = input.source(hl2, title="Source 1", group="MA 1") type1 = input.string("SMA", title="Type 1", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA 1") timeframe1 = input.timeframe("", title="Timeframe 1", group="MA 1") color1 = input.color(color.aqua, title="Color 1", group="MA 1") show1 = input.bool(true, title="Show MA 1", group="MA 1") length2 = input.int(144, minval=1, title="Length 2", group="MA 2") source2 = input.source(hl2, title="Source 2", group="MA 2") type2 = input.string("SMA", title="Type 2", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA 2") timeframe2 = input.timeframe("", title="Timeframe 2", group="MA 2") color2 = input.color(color.orange, title="Color 2", group="MA 2") show2 = input.bool(true, title="Show MA 2", group="MA 2") length3 = input.int(432, minval=1, title="Length 3", group="MA 3") source3 = input.source(hl2, title="Source 3", group="MA 3") type3 = input.string("SMA", title="Type 3", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA 3") timeframe3 = input.timeframe("", title="Timeframe 3", group="MA 3") color3 = input.color(color.green, title="Color 3", group="MA 3") show3 = input.bool(true, title="Show MA 3", group="MA 3") length4 = input.int(91, minval=1, title="Length 4", group="MA 4") source4 = input.source(hl2, title="Source 4", group="MA 4") type4 = input.string("SMA", title="Type 4", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA 4") timeframe4 = input.timeframe("D", title="Timeframe 4", group="MA 4") color4 = input.color(color.rgb(159, 110, 208), title="Color 4", group="MA 4") // 浅紫色 style4 = input.string("step", title="Style 4", options=["line", "step"], group="MA 4") show4 = input.bool(false, title="Show MA 4", group="MA 4") length5 = input.int(182, minval=1, title="Length 5", group="MA 5") source5 = input.source(hl2, title="Source 5", group="MA 5") type5 = input.string("SMA", title="Type 5", options=["SMA", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA 5") timeframe5 = input.timeframe("D", title="Timeframe 5", group="MA 5") color5 = input.color(color.red, title="Color 5", group="MA 5") style5 = input.string("step", title="Style 5", options=["line", "step"], group="MA 5") show5 = input.bool(true, title="Show MA 5", group="MA 5") // 计算每根均线的值 value0 = request.security(syminfo.tickerid, timeframe0, ma(source0, length0, type0)) value1 = request.security(syminfo.tickerid, timeframe1, ma(source1, length1, type1)) value2 = request.security(syminfo.tickerid, timeframe2, ma(source2, length2, type2)) value3 = request.security(syminfo.tickerid, timeframe3, ma(source3, length3, type3)) value4 = request.security(syminfo.tickerid, timeframe4, ma(source4, length4, type4)) value5 = request.security(syminfo.tickerid, timeframe5, ma(source5, length5, type5)) // 绘制每根均线 plot(show0 ? value0 : na, title="MA 0", color=color0) plot(show1 ? value1 : na, title="MA 1", color=color1) plot(show2 ? value2 : na, title="MA 2", color=color2) plot(show3 ? value3 : na, title="MA 3", color=color3) plot(show4 ? value4 : na, title="MA 4", color=color4, style=style4 == "step" ? plot.style_stepline : plot.style_line, linewidth=2) plot(show5 ? value5 : na, title="MA 5", color=color5, style=style5 == "step" ? plot.style_stepline : plot.style_line, linewidth=2) // 添加策略部分 // 选择均线值 get_ma_value(ma_name) => if (ma_name == "MA 0") value0 else if (ma_name == "MA 1") value1 else if (ma_name == "MA 2") value2 else if (ma_name == "MA 3") value3 else if (ma_name == "MA 4") value4 else value5 short_ma_value = get_ma_value(short_term_ma) mid_ma_value = get_ma_value(mid_term_ma) long_ma_value = get_ma_value(long_term_ma) bull_bear_ma_value = get_ma_value(bull_bear_ma) // 计算波动率 high_close = ta.highest(high, volatility_k) low_close = ta.lowest(low, volatility_k) volatility = 100 * (high_close - low_close) / low_close // 波动率条件背景色 volatilityCondition = (volatility > volatility_threshold) volatilityConditionBG = (volatility > volatility_threshold) and volatility_threshold != 0 bgcolor(volatilityConditionBG ? color.new(color.green, 90) : na, title="Volatility Background") // 策略信号 long_condition = (short_ma_value > long_ma_value and ta.crossover(mid_ma_value, long_ma_value)) short_condition = (short_ma_value < long_ma_value and ta.crossunder(mid_ma_value, long_ma_value)) var float stop_level_long = na var float stop_level_short = na // 执行策略 if (volatilityCondition and allow_long and (not enable_bull_bear or close > bull_bear_ma_value)) if (long_condition and close > long_ma_value) // 判断是否立即触发止损 strategy.entry("Long", strategy.long, qty=capital_pct * strategy.equity / close) label.new(bar_index, low*0.996, text="BUY", color=color.green, textcolor=color.white, style=label.style_label_up, size=size.small) if (volatilityCondition and allow_short and (not enable_bull_bear or close < bull_bear_ma_value)) if (short_condition and close < long_ma_value) // 判断是否立即触发止损 strategy.entry("Short", strategy.short, qty=capital_pct * strategy.equity / close) label.new(bar_index, high*1.004, text="SELL", color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small) // 部分平仓逻辑 if (enable_bull_bear) // 当当前价格处在牛熊趋势均线之下时 if (close < bull_bear_ma_value) // 平所有多仓 if (strategy.position_size > 0) strategy.close("Long", comment="平所有多仓") label.new(bar_index, low*0.996, text="CLOSE", color=color.gray, textcolor=color.white, style=label.style_label_up, size=size.small) // 当短期均线在长期均线之上时,中期均线向上穿过长期均线,平空 if (short_ma_value > long_ma_value and ta.crossover(mid_ma_value, long_ma_value) and volatilityCondition) if (strategy.position_size < 0) strategy.close("Short", qty=close_pct * strategy.position_size, comment="部分平空") label.new(bar_index, high*1.004, text="CLOSE", color=color.gray, textcolor=color.white, style=label.style_label_down, size=size.small) // 当当前价格处在牛熊趋势均线之上时 if (close > bull_bear_ma_value) // 平所有空仓 if (strategy.position_size < 0) strategy.close("Short", comment="平所有空仓") label.new(bar_index, high*1.004, text="CLOSE", color=color.gray, textcolor=color.white, style=label.style_label_up, size=size.small) // 当短期均线在长期均线之下时,中期均线向下穿过长期均线,平多 if (short_ma_value < long_ma_value and ta.crossunder(mid_ma_value, long_ma_value) and volatilityCondition) if (strategy.position_size > 0) strategy.close("Long", qty=close_pct * strategy.position_size, comment="部分平多") label.new(bar_index, low*0.996, text="CLOSE", color=color.gray, textcolor=color.white, style=label.style_label_down, size=size.small) else if (not enable_bull_bear and not (allow_long and allow_short)) // 当短期均线在长期均线之上时,中期均线向上穿过长期均线,平空 if (short_ma_value > long_ma_value and ta.crossover(mid_ma_value, long_ma_value) and volatilityCondition) if (strategy.position_size < 0) strategy.close("Short", qty=close_pct * strategy.position_size, comment="部分平空") label.new(bar_index, low*0.996, text="CLOSE", color=color.gray, textcolor=color.white, style=label.style_label_up, size=size.small) // 当短期均线在长期均线之下时,中期均线向下穿过长期均线,平多 if (short_ma_value < long_ma_value and ta.crossunder(mid_ma_value, long_ma_value) and volatilityCondition) if (strategy.position_size > 0) strategy.close("Long", qty=close_pct * strategy.position_size, comment="部分平多") label.new(bar_index, high*1.004, text="CLOSE", color=color.gray, textcolor=color.white, style=label.style_label_down, size=size.small) // 止损处理 if (strategy.position_size > 0) stop_level_long_user = strategy.position_avg_price * (1 - stop_loss_user) strategy.exit("Stop Loss", from_entry="Long", stop=stop_level_long_user) else if (strategy.position_size < 0) stop_level_short_user = strategy.position_avg_price * (1 + stop_loss_user) strategy.exit("Stop Loss", from_entry="Short", stop=stop_level_short_user)