Chiến lược này đánh giá xu hướng giá bằng cách tính điểm chéo giữa các đường trung bình động đôi và phát hành tín hiệu mua và bán với một số hạn chế tham số nhất định. Nó chủ yếu bao gồm ba phần: đầu tiên, đánh giá xu hướng giá bằng cách tính điểm chéo giữa đường trung bình động nhanh và chậm; thứ hai, đặt một số hạn chế tham số nhất định để tránh giao dịch sai; thứ ba, sử dụng dừng lợi nhuận và dừng lỗ để kiểm soát rủi ro.
Cốt lõi của chiến lược này nằm trong việc tính toán các trung bình di chuyển nhanh và chậm. Trung bình di chuyển nhanh có khoảng thời gian một nửa tổng thời gian trung bình di chuyển, nhạy cảm hơn với sự thay đổi giá; trung bình di chuyển chậm có khoảng thời gian tổng thời gian trung bình di chuyển, phản ánh sự thay đổi giá mượt mà hơn.
Ngoài ra, chiến lược đặt ra một số tham số để tránh giao dịch sai. Ví dụ, ngưỡng quyết định là để đảm bảo rằng tín hiệu chỉ được phát hành khi sự khác biệt giữa hai đường trung bình động vượt quá một mức nhất định; tham số tin cậy được sử dụng để lọc ra các biến động giá nhỏ.
Cuối cùng, dừng lợi nhuận và dừng lỗ được sử dụng để kiểm soát rủi ro. Nếu openprofit nhỏ hơn điểm dừng lỗ hoặc lớn hơn điểm dừng lợi nhuận, các vị trí sẽ được đóng. Điều này có hiệu quả hạn chế lỗ của một giao dịch duy nhất.
Lợi thế lớn nhất của chiến lược này là kết hợp sự đánh giá xu hướng giá và các đặc điểm biến động thông qua các chỉ số trung bình động. Chữ chéo của trung bình động đôi là một phương pháp kỹ thuật hiệu quả cổ điển để xác định xu hướng giá. Với tối ưu hóa tham số, nó có thể nắm bắt chính xác xu hướng. Các tham số tin cậy có thể lọc hiệu quả các thị trường hỗn loạn và tránh các giao dịch sai thường xuyên.
Ngoài ra, các tham số như ngưỡng quyết định, dừng lợi nhuận và dừng lỗ cũng có thể làm giảm đáng kể rủi ro giao dịch bằng cách tránh theo đuổi mức cao và bán mức thấp.
Rủi ro chính của chiến lược này là khả năng tín hiệu sai từ các đường trung bình động đôi. Cả hai đường trung bình động nhanh và chậm đều là đường trung bình động cân nhắc phản ứng chậm với các sự kiện đột ngột, do đó bỏ lỡ sự đảo ngược giá ngắn hạn.
Ngoài ra, việc thiết lập điểm dừng lợi nhuận và điểm dừng lỗ không đúng cũng sẽ làm tăng rủi ro. Mục tiêu lợi nhuận quá cao và điểm dừng lỗ thấp có thể dẫn đến tổn thất vượt quá mong đợi. Các thông số hợp lý cần phải được thiết lập theo đặc điểm của các sản phẩm giao dịch khác nhau và biến động.
Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:
Tối ưu hóa các khoảng thời gian trung bình động, thiết lập các trung bình động thích nghi để mô hình hóa tốt hơn biến động giá của các chu kỳ khác nhau;
Thiết lập các cơ chế theo dõi năng động để dừng lợi nhuận và dừng lỗ, tính toán biến động theo thời gian thực dựa trên điều kiện thị trường để các điểm dừng có thể thay đổi năng động;
Tăng các mô hình học máy để đánh giá hướng xu hướng giá, sử dụng nhiều dữ liệu lịch sử hơn để xác định chuyển động giá hiện tại và giảm các tín hiệu sai.
Nói chung, đây là một chiến lược giao dịch xu hướng cổ điển đơn giản và hiệu quả. Nó sử dụng đường chéo trung bình động đôi để xác định xu hướng, thiết lập các tham số để kiểm soát rủi ro và có khả năng cấu hình cao cho giao dịch đa sản phẩm. Nếu có thể giới thiệu các phương tiện phán đoán thông minh hơn như học máy, hiệu quả tổng thể có thể thậm chí còn tốt hơn cho nghiên cứu thêm.
/*backtest start: 2023-12-03 00:00:00 end: 2024-01-02 00:00:00 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 // Any timeFrame ok but good on 15 minute & 60 minute , Ichimoku + Daily-Candle_cross(DT) + HULL-MA_cross + MacD combination 420 special blend strategy("Trade Signal", shorttitle="Trade Alert", overlay=true ) keh=input(title="Double HullMA",defval=14, minval=1) dt = input(defval=0.0010, title="Decision Threshold (0.001)", type=float, step=0.0001) SL = input(defval=-10.00, title="Stop Loss in $", type=float, step=1) TP = input(defval=100.00, title="Target Point in $", type=float, step=1) ot=1 n2ma=2*wma(close,round(keh/2)) nma=wma(close,keh) diff=n2ma-nma sqn=round(sqrt(keh)) n2ma1=2*wma(close[1],round(keh/2)) nma1=wma(close[1],keh) diff1=n2ma1-nma1 sqn1=round(sqrt(keh)) n1=wma(diff,sqn) n2=wma(diff1,sqn) b=n1>n2?lime:red c=n1>n2?green:red d=n1>n2?red:green confidence=(request.security(syminfo.tickerid, '5', close[1])-request.security(syminfo.tickerid, '60', close[1]))/request.security(syminfo.tickerid, '60', close[1]) conversionPeriods = input(9, minval=1, title="Conversion Line Periods") basePeriods = input(26, minval=1, title="Base Line Periods") laggingSpan2Periods = input(52, minval=1, title="Lagging Span 2 Periods") displacement = input(26, minval=1, title="Displacement") donchian(len) => avg(lowest(len), highest(len)) conversionLine = donchian(conversionPeriods) baseLine = donchian(basePeriods) leadLine1 = avg(conversionLine, baseLine) leadLine2 = donchian(laggingSpan2Periods) LS=close, offset = -displacement MACD_Length = input(9) MACD_fastLength = input(12) MACD_slowLength = input(26) MACD = ema(close, MACD_fastLength) - ema(close, MACD_slowLength) aMACD = ema(MACD, MACD_Length) closelong = n1<n2 and close<n2 and confidence<dt or strategy.openprofit<SL or strategy.openprofit>TP if (closelong) strategy.close("Long") closeshort = n1>n2 and close>n2 and confidence>dt or strategy.openprofit<SL or strategy.openprofit>TP if (closeshort) strategy.close("Short") longCondition = n1>n2 and strategy.opentrades<ot and confidence>dt and close>n2 and leadLine1>leadLine2 and open<LS and MACD>aMACD if (longCondition) strategy.entry("Long",strategy.long) shortCondition = n1<n2 and strategy.opentrades<ot and confidence<dt and close<n2 and leadLine1<leadLine2 and open>LS and MACD<aMACD if (shortCondition) strategy.entry("Short",strategy.short) //alerts alertcondition(closelong, title='Close Buy Position', message='Close Buy Position') alertcondition(closeshort, title='Close Short Position', message='Close Short Position') alertcondition(longCondition, title='Buy Signal', message='Buy Signal Alert') alertcondition(shortCondition, title='Sell Signal', message='Sell Signal Alert') //a1=plot(n1,color=c) //a2=plot(n2,color=c)plot(cross(n1, n2) ? n1 : na, style = circles, color=b, linewidth = 4) //plot(cross(n1, n2) ? n1 : na, style = line, color=d, linewidth = 4) plot(conversionLine, color=#0496ff, title="Conversion Line") plot(baseLine, color=#991515, title="Base Line") plot(close, offset = -displacement, color=#459915, title="Lagging Span") p1=plot (leadLine1, offset = displacement, color=green, title="Lead 1") p2=plot (leadLine2, offset = displacement, color=red, title="Lead 2") fill(p1, p2, color = leadLine1 > leadLine2 ? green : red) // remove the "//" from before the plot script if want to see the indicators on chart