Chiến lược này kết hợp nhiều chỉ số kỹ thuật để đưa ra các quyết định giao dịch dài và ngắn. Nó chủ yếu sử dụng Bollinger Bands, RSI, ADX và các chỉ số khác, cùng với đường trung bình động để xác định hướng xu hướng.
Chiến lược này chủ yếu sử dụng Bollinger Bands để đánh giá sự biến động giá. Các dải thu hẹp đại diện cho sự biến động giảm có thể dẫn đến đột phá. RSI được sử dụng để xác định các điều kiện mua quá nhiều và bán quá nhiều. RSI trên 70 là mua quá nhiều trong khi dưới 30 là bán quá nhiều. Khi các dải hẹp và RSI tiếp cận giới hạn của nó, giao dịch ngược được xem xét.
Ngoài ra, ADX được sử dụng để đánh giá sức mạnh của xu hướng. ADX cao đại diện cho một xu hướng mạnh mẽ, ủng hộ giao dịch xu hướng. ADX thấp đại diện cho không có xu hướng rõ ràng, xem xét sự đảo ngược trung bình. Cuối cùng, đường trung bình động xác định hướng xu hướng dài hạn. Xu hướng tăng ủng hộ dài trong khi xu hướng giảm ủng hộ ngắn.
Cụ thể, khi các dải nén, RSI đến gần giới hạn của nó, và giá phá vỡ bên dưới dải dưới, một sự phục hồi được mong đợi, đi dài. Khi các dải nén, RSI đến gần giới hạn của nó, và giá phá vỡ trên dải trên, một sự suy giảm được mong đợi, đi ngắn. Ngoài ra, với ADX cao, thêm dài trong xu hướng tăng. với ADX thấp, thêm ngắn trong xu hướng giảm. Kết hợp các chỉ số cải thiện độ bền của hệ thống.
Chiến lược đa chỉ số có những lợi thế sau:
Kết hợp các chỉ số cải thiện độ chính xác và độ bền. Chỉ số duy nhất dễ bị tín hiệu sai trong khi nhiều chỉ số xác minh tín hiệu và tránh giao dịch xấu.
Xem xét cả xu hướng và giao dịch phạm vi, thích nghi với các điều kiện thị trường khác nhau.
Long và short làm giảm rủi ro hướng và tránh các động thái cực đoan.
Dừng lỗ và lấy lợi nhuận khóa trong lợi nhuận và hạn chế lỗ khi giao dịch đi sai.
Tối ưu hóa tham số liên tục cải thiện chiến lược bằng cách thích nghi với thị trường thay đổi.
Chiến lược này cũng có một số rủi ro:
Nhiều chỉ số làm tăng sự phức tạp. Cài đặt không chính xác có thể làm suy giảm hiệu suất. Cần thử nghiệm và tối ưu hóa rộng rãi.
Sự phụ thuộc quá mức vào các kỹ thuật trong khi bỏ qua các yếu tố cơ bản có thể gây ra các tín hiệu không chính xác.
Thị trường có thể đã di chuyển khi các tín hiệu xuất hiện, gây ra rủi ro theo đuổi.
Giao dịch hai hướng tăng tần suất, tăng chi phí và áp lực.
Rủi ro phù hợp với đường cong tồn tại.
Rủi ro có thể được quản lý thông qua lệnh dừng lỗ nghiêm ngặt, kích thước vị trí thận trọng, đòn bẩy hợp lý vv Nhìn chung, chiến lược có giá trị thực tế mạnh mẽ.
Một số cách để tối ưu hóa chiến lược:
Kiểm tra các tập hợp tham số khác nhau để tìm ra các giá trị tối ưu bằng cách sử dụng các thuật toán từng bước, ngẫu nhiên hoặc di truyền.
Thêm thêm các chỉ số như KDJ, Williams để xây dựng một bộ chỉ số mạnh mẽ.
Tối ưu hóa các mô hình kích thước vị trí để quản lý rủi ro một cách năng động.
Kết hợp các mô hình học máy để dự đoán xu hướng và chuyển động giá.
Kiểm tra trên các sản phẩm, khung thời gian và thị trường khác nhau để cải thiện khả năng thích nghi.
Cải thiện thời gian vào và ra để nắm bắt xu hướng sớm và ra trước khi đảo ngược.
Sử dụng lấy lợi nhuận, dừng lại để khóa lợi nhuận và hạn chế lỗ.
Thêm các yếu tố cơ bản và phân tích cấu trúc thị trường để lọc các tín hiệu kỹ thuật.
Chiến lược này tự động hóa giao dịch bằng cách giải thích nhiều chỉ số. Nó được hưởng lợi từ xác thực chéo chỉ số, giao dịch hai hướng, dừng lỗ / lấy lợi nhuận vv. Việc quá phù hợp và tín hiệu sai đòi hỏi sự thận trọng. Tối ưu hóa và thử nghiệm liên tục có thể biến nó thành một hệ thống mạnh mẽ, thực tế, đại diện cho tương lai của các chiến lược giao dịch lượng.
/*backtest start: 2023-09-24 00:00:00 end: 2023-10-24 00:00:00 period: 2h 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/ // © The_Bigger_Bull //@version=5 strategy("Best TradingView Strategy", overlay=true, margin_long=0, margin_short=0) //Bollinger Bands source1 = close length1 = input.int(15, minval=1) mult1 = input.float(2.0, minval=0.001, maxval=50) basis1 = ta.sma(source1, length1) dev1 = mult1 * ta.stdev(source1, length1) upper1 = basis1 + dev1 lower1 = basis1 - dev1 //buyEntry = ta.crossover(source1, lower1) //sellEntry = ta.crossunder(source1, upper1) //RSI ma(source, length, type) => switch type "SMA" => ta.sma(source, length) "Bollinger Bands" => 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) rsiLengthInput = input.int(14, minval=1, title="RSI Length", group="RSI Settings") rsiSourceInput = input.source(close, "Source", group="RSI Settings") maTypeInput = input.string("SMA", title="MA Type", options=["SMA", "Bollinger Bands", "EMA", "SMMA (RMA)", "WMA", "VWMA"], group="MA Settings") maLengthInput = input.int(14, title="MA Length", group="MA Settings") bbMultInput = input.float(2.0, minval=0.001, maxval=50, title="BB StdDev", group="MA Settings") up = ta.rma(math.max(ta.change(rsiSourceInput), 0), rsiLengthInput) down = ta.rma(-math.min(ta.change(rsiSourceInput), 0), rsiLengthInput) rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down)) rsiMA = ma(rsi, maLengthInput, maTypeInput) isBB = maTypeInput == "Bollinger Bands" //plot(rsi, "RSI", color=#7E57C2) //plot(rsiMA, "RSI-based MA", color=color.yellow) rsiUpperBand = hline(70, "RSI Upper Band", color=#787B86) hline(50, "RSI Middle Band", color=color.new(#787B86, 50)) rsiLowerBand = hline(30, "RSI Lower Band", color=#787B86) fill(rsiUpperBand, rsiLowerBand, color=color.rgb(126, 87, 194, 90), title="RSI Background Fill") bbUpperBand = plot(isBB ? rsiMA + ta.stdev(rsi, maLengthInput) * bbMultInput : na, title = "Upper Bollinger Band", color=color.green) bbLowerBand = plot(isBB ? rsiMA - ta.stdev(rsi, maLengthInput) * bbMultInput : na, title = "Lower Bollinger Band", color=color.green) fill(bbUpperBand, bbLowerBand, color= isBB ? color.new(color.green, 90) : na, title="Bollinger Bands Background Fill") //ADX adxlen = input(14, title="ADX Smoothing") dilen = input(14, title="DI Length") dirmov(len) => up1 = ta.change(high) down1 = -ta.change(low) plusDM = na(up1) ? na : (up1 > down1 and up1 > 0 ? up1 : 0) minusDM = na(down1) ? na : (down1 > up1 and down1 > 0 ? down1 : 0) truerange = ta.rma(ta.tr, len) plus = fixnan(100 * ta.rma(plusDM, len) / truerange) minus = fixnan(100 * ta.rma(minusDM, len) / truerange) [plus, minus] adx(dilen, adxlen) => [plus, minus] = dirmov(dilen) sum = plus + minus adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen) sig = adx(dilen, adxlen) out = ta.sma(close, 14) sma1=ta.sma(close,55) ema200=ta.ema(close,200) longCondition = (out>sma1) and ta.crossover(source1, lower1) if (longCondition ) strategy.entry("long", strategy.long) shortCondition = (out<sma1) and ta.crossunder(source1, lower1) if (shortCondition ) strategy.entry("short", strategy.short) stopl=strategy.position_avg_price-50 tptgt=strategy.position_avg_price+100 stopshort=strategy.position_avg_price+50 tptgtshort=strategy.position_avg_price-100 strategy.exit("longclose","long",trail_offset=5,trail_points=45,when=ta.crossover(sma1,out)) strategy.exit("shortclose","short",trail_offset=5,trail_points=45,when=ta.crossover(out,sma1)) //if strategy.position_avg_price<0 plot(sma1 , color=color.blue) plot(out, color=color.green) //plot(ema200,color=color.red)