Chiến lược này chủ yếu kết hợp chỉ số thấp cao, chỉ số trung bình động và chỉ số siêu xu hướng để xác định xu hướng thị trường và các vị trí mở.
Chỉ số thấp cao đánh giá giá liệu giá gần đây nhất trong một khoảng thời gian nhất định đã tạo ra mức cao mới hay mức thấp mới, và tích lũy điểm số. Khi điểm số tăng, nó đại diện cho sự tăng cường của các lực lượng tăng. Khi điểm số giảm, nó đại diện cho sự tăng cường của các lực lượng giảm.
Chỉ số Moving Average đánh giá giá liệu giá có đang trong xu hướng tăng theo hình cầu thang lên hay xu hướng giảm theo hình cầu thang xuống. Khi trung bình động cho thấy xu hướng tăng theo hình cầu thang, nó đại diện cho sự tăng cường của các lực lượng tăng. Khi nó cho thấy sự suy giảm theo hình cầu thang, nó đại diện cho sự tăng cường của các lực lượng giảm.
Kết hợp các phán quyết của Chỉ số thấp cao và Chỉ số trung bình động để xác định xu hướng thị trường, và sau đó tìm cơ hội giao dịch kết hợp với hướng của Chỉ số siêu xu hướng. Cụ thể, khi cả Chỉ số thấp cao và Chỉ số trung bình động đều cho thấy sức mạnh tăng và hướng của Chỉ số siêu xu hướng là giảm, mở các vị trí dài. Khi cả hai chỉ số cho thấy sức mạnh giảm và hướng của Chỉ số siêu xu hướng là tăng, mở các vị trí ngắn.
Chỉ số thấp cao có thể đánh giá hiệu quả chuyển động giá và thay đổi động lực. Chỉ số trung bình động có thể xác định hiệu quả xu hướng giá. Sự kết hợp của cả hai có thể xác định chính xác hơn hướng thị trường.
Khởi mở các vị trí kết hợp với Chỉ số siêu xu hướng có thể tránh mở sớm hoặc muộn các vị trí.
Nhiều chỉ số xác minh lẫn nhau và giảm tín hiệu sai.
Các tín hiệu không chính xác từ Chỉ số thấp cao và Chỉ số trung bình động có thể dẫn đến các vị trí gây lỗ.
Sự tham gia không đủ và cài đặt tham số không đúng của Chỉ số siêu xu hướng có thể tạo ra các tín hiệu không chính xác.
Sự đảo ngược xu hướng nhanh chóng và cài đặt dừng lỗ không đúng có thể dẫn đến tổn thất lớn.
Rủi ro có thể được giảm bằng cách tối ưu hóa các tham số chỉ số, điều chỉnh mức giá dừng lỗ, v.v.
Kiểm tra các loại chỉ số trung bình động khác nhau để tìm ra sự kết hợp tối ưu của các tham số.
Tối ưu hóa các thông số của Chỉ số thấp cao và Chỉ số trung bình động để làm cho các tín hiệu ổn định và đáng tin cậy hơn.
Bao gồm các chỉ số khác để xác minh, chẳng hạn như MACD, KD, vv, để giảm tín hiệu sai.
Kết hợp các thuật toán học máy để tự động tối ưu hóa các tham số và trọng lượng tín hiệu.
Bao gồm phân tích tình cảm để tránh giao dịch các sản phẩm ít phổ biến hơn.
Chiến lược này xác định xu hướng và động lực thị trường thông qua chỉ số thấp cao và chỉ số trung bình động, và sau đó lọc các tín hiệu bằng chỉ số siêu xu hướng, mở các vị trí khi các lực tăng và giảm đối mặt với nhau và chỉ số siêu xu hướng đảo ngược. Ưu điểm của nó nằm trong việc xác minh nhiều tín hiệu và mở đúng thời điểm các vị trí, có thể kiểm soát rủi ro hiệu quả. Các vấn đề hiện có bao gồm tín hiệu sai và đánh giá sai xu hướng. Có thể thực hiện nhiều cải tiến thông qua tối ưu hóa tham số, cài đặt dừng lỗ, lọc tín hiệu, vv để làm cho chiến lược mạnh mẽ và đáng tin cậy hơn.
/*backtest start: 2023-10-21 00:00:00 end: 2023-11-20 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/ // © HeWhoMustNotBeNamed //@version=4 strategy("AlignedMA and Cumulative HighLow Strategy", overlay=true, initial_capital = 1000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01, calc_on_order_fills = true) MAType = input(title="Moving Average Type", defval="sma", options=["ema", "sma", "hma", "rma", "vwma", "wma"]) includePartiallyAligned = input(true) HighLowPeriod = input(50, minval=1,step=1) LookbackPeriod = input(10, minval=1,step=1) supertrendMult = input(2, minval=1, maxval=10, step=0.5) supertrendLength = input(10, minval=1) tradeDirection = input(title="Trade Direction", defval=strategy.direction.long, options=[strategy.direction.all, strategy.direction.long, strategy.direction.short]) backtestYears = input(10, minval=1, step=1) f_getMovingAverage(source, MAType, length)=> ma = sma(source, length) if(MAType == "ema") ma := ema(source,length) if(MAType == "hma") ma := hma(source,length) if(MAType == "rma") ma := rma(source,length) if(MAType == "vwma") ma := vwma(source,length) if(MAType == "wma") ma := wma(source,length) ma f_getMaAlignment(MAType, includePartiallyAligned)=> ma5 = f_getMovingAverage(close,MAType,5) ma10 = f_getMovingAverage(close,MAType,10) ma20 = f_getMovingAverage(close,MAType,20) ma30 = f_getMovingAverage(close,MAType,30) ma50 = f_getMovingAverage(close,MAType,50) ma100 = f_getMovingAverage(close,MAType,100) ma200 = f_getMovingAverage(close,MAType,200) upwardScore = 0 upwardScore := close > ma5? upwardScore+1:upwardScore upwardScore := ma5 > ma10? upwardScore+1:upwardScore upwardScore := ma10 > ma20? upwardScore+1:upwardScore upwardScore := ma20 > ma30? upwardScore+1:upwardScore upwardScore := ma30 > ma50? upwardScore+1:upwardScore upwardScore := ma50 > ma100? upwardScore+1:upwardScore upwardScore := ma100 > ma200? upwardScore+1:upwardScore upwards = close > ma5 and ma5 > ma10 and ma10 > ma20 and ma20 > ma30 and ma30 > ma50 and ma50 > ma100 and ma100 > ma200 downwards = close < ma5 and ma5 < ma10 and ma10 < ma20 and ma20 < ma30 and ma30 < ma50 and ma50 < ma100 and ma100 < ma200 upwards?1:downwards?-1:includePartiallyAligned ? (upwardScore > 5? 0.5: upwardScore < 2?-0.5:upwardScore>3?0.25:-0.25) : 0 f_getHighLowValue(HighLowPeriod)=> currentHigh = highest(high,HighLowPeriod) == high currentLow = lowest(low,HighLowPeriod) == low currentHigh?1:currentLow?-1:0 inDateRange = time >= timestamp(syminfo.timezone, year(timenow) - backtestYears, 01, 01, 0, 0) maAlignment = f_getMaAlignment(MAType,includePartiallyAligned) alignedMaIndex = sum(maAlignment,LookbackPeriod) maAlignmentDirection = alignedMaIndex > alignedMaIndex[1] ? 1 : alignedMaIndex < alignedMaIndex[1] ? -1 : 0 maAlignmentDirection := maAlignmentDirection == 0? nz(maAlignmentDirection[1],0):maAlignmentDirection highLowIndex = f_getHighLowValue(HighLowPeriod) cumulativeHighLowIndex = sum(highLowIndex,LookbackPeriod) hlDirection = cumulativeHighLowIndex > cumulativeHighLowIndex[1] ? 1 : cumulativeHighLowIndex < cumulativeHighLowIndex[1] ? -1 : 0 hlDirection := hlDirection == 0? nz(hlDirection[1],0):hlDirection [superTrend, dir] = supertrend(supertrendMult, supertrendLength) buyEntry = (dir == -1 and maAlignmentDirection == 1 and hlDirection == 1) sellEntry = (dir == 1 and maAlignmentDirection == -1 and hlDirection == -1) barColor = buyEntry?color.lime:sellEntry?color.orange:color.gray barcolor(barColor) // strategy.risk.allow_entry_in(tradeDirection) strategy.entry("Buy", strategy.long, when=barColor == color.lime and inDateRange, oca_name="oca_buy") strategy.close("Buy", when=dir == 1) strategy.entry("Sell", strategy.short, when=barColor == color.orange and inDateRange, oca_name="oca_sell") strategy.close("Sell", when=dir == -1)