Chiến lược được đặt tên là
Chiến lược đầu tiên sử dụng chỉ số chứng khoán để vẽ một dao động tùy chỉnh với các thông số dao độngPeriod được đặt thành 5, và thiết lập ngưỡng trên và dưới k1 và k2 để xây dựng khu vực hợp nhất.
Tiếp theo, chỉ số RSI được kết hợp để xác định hiện tượng mua quá mức và bán quá mức. Chỉ số RSI có thể xác định hiệu quả thời gian thâm nhập thị trường của giới hạn trên và dưới. Chiến lược này đặt đường mua quá mức của RSI ở mức 70 và đường bán quá mức ở mức 30.
Ngoài ra, chiến lược cũng giới thiệu yếu tố TrendActivity như bộ lọc xu hướng chính. Khi chỉ số stochastic và RSI đáp ứng các điều kiện đảo ngược cùng một lúc, nó cũng kiểm tra xem xu hướng chính vẫn đủ hoạt động để tránh tổn thất do đột phá sai trên thị trường sốc.
Cuối cùng, chiến lược sử dụng nguyên tắc trung bình vị trí Martingale cổ điển để kiểm soát rủi ro tổng thể. Bằng cách điều chỉnh động khối lượng giao dịch, các vị trí bổ sung được đặt khi vị trí ban đầu bị mất mát để đạt được mức cân bằng và do đó kiểm soát mức rút tối đa.
Việc kết hợp chỉ số RSI có thể xác định hiệu quả các hiện tượng mua quá mức và bán quá mức để hỗ trợ đánh giá thời gian đảo ngược.
Thiết lập dao động để xác định khu vực củng cố có thể lọc ra một số tín hiệu phá vỡ sai.
Thiết lập bộ lọc xu hướng chính tránh thua lỗ trong thị trường biến động.
Trung bình vị trí Martingale kiểm soát hiệu quả mức thu hút tối đa của chiến lược và là chìa khóa cho lợi nhuận bền vững.
Trong điều kiện thị trường bất thường, chỉ số RSI có thể thất bại và gây ra sự đánh giá sai về các điều kiện mua quá nhiều và bán quá nhiều.
Cài đặt tham số không chính xác của dao động cũng có thể dẫn đến việc lọc tín hiệu quá mức hoặc xác định các đột phá sai. Điều này đòi hỏi tối ưu hóa tham số dựa trên dữ liệu thị trường lịch sử.
Trung bình vị trí Martingale sẽ dẫn đến tổn thất theo cascading trong một số môi trường nhất định.
Chiến lược này chỉ được xác minh trên dữ liệu cặp tiền tệ GBPUSD 15 phút. Có thể có rủi ro phù hợp với dữ liệu ở các thị trường và thời kỳ khác.
Tối ưu hóa các thông số của RSI để tìm các thông số phù hợp hơn với môi trường thị trường hiện tại.
Kiểm tra và tối ưu hóa các thông số của dao động để nó có thể đánh giá khu vực củng cố chính xác hơn.
Thêm logic dừng lỗ. Dừng lỗ một cách tích cực khi lỗ đạt đến một mức độ nhất định để kiểm soát hiệu quả các lỗ đơn.
Tối ưu hóa các quy tắc thiết lập của bộ lọc xu hướng chính để tránh bỏ lỡ các cơ hội đảo ngược.
Kiểm tra các thiết lập kích thước vị trí bổ sung khác nhau. Cần đảm bảo rằng số lượng bổ sung không quá lớn để gây mất nhanh chóng.
Chiến lược này kết hợp chỉ số trung bình động kép, chỉ số RSI và dao động tùy chỉnh để đánh giá các hiện tượng đột phá giới hạn trên và dưới trong ngắn hạn, và sử dụng bộ lọc xu hướng chính để tránh đột phá sai cho giao dịch vải scalping hiệu quả. Đồng thời, nguyên tắc trung bình vị trí Martingale cổ điển được giới thiệu để kiểm soát mức độ rủi ro tổng thể. Chiến lược có tiềm năng tạo ra lợi nhuận ổn định sau khi tối ưu hóa tham số và quản lý rủi ro nghiêm ngặt.
/*backtest start: 2022-11-24 00:00:00 end: 2023-11-30 00:00:00 period: 1d basePeriod: 1h 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/ // © cloudofw //@version=5 strategy("F2.2 Martingale Scalping Strategy", overlay=true) // Input parameters rsiOverbought = input.int(70, "RSI Overbought Threshold") rsiOversold = input.int(30, "RSI Oversold Threshold") oscillatorPeriod = input.int(5, "Period for oscillator") k1 = input.float(0.2, "K1 for oscillator's zone") k2 = input.float(0.5, "K2 for oscillator's zone") trendActivity = input.float(1.0, "Main Trend filter", minval=0.1) decreasePerOrder = input.float(0.1, "Trend filter decrease per order", minval=0.01) // Calculate custom oscillator and RSI oscillator = ta.stoch(close, high, low, oscillatorPeriod) rsiValue = ta.rsi(close, 14) zoneHigh = 100 - k1 * 100 zoneLow = k2 * 100 // Entry conditions longCondition = oscillator < zoneLow and trendActivity > 0 and rsiValue < rsiOversold shortCondition = oscillator > zoneHigh and trendActivity > 0 and rsiValue > rsiOverbought // Martingale logic var lot_multiplier = 1.0 var last_lot_size = strategy.equity * 0.01 var trade_1_profit = 0.0 if (strategy.position_size != 0) lot_multiplier := last_lot_size / strategy.position_size < 1.5 ? lot_multiplier * 1.5 : 1.0 trade_1_profit := strategy.grossprofit else lot_multiplier := 1.0 trade_1_profit := 0.0 lot_size = strategy.equity * 0.01 * lot_multiplier + trade_1_profit last_lot_size := lot_size // Trading logic if longCondition and strategy.position_size == 0 strategy.entry("Long", strategy.long) if shortCondition and strategy.position_size == 0 strategy.entry("Short", strategy.short) // Exit conditions if longCondition == false and strategy.position_size > 0 strategy.close("Long") if shortCondition == false and strategy.position_size < 0 strategy.close("Short") // Indicators on chart plotshape(series=longCondition, title="Buy Entry", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy") plotshape(series=shortCondition, title="Sell Entry", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell") plot(oscillator, color=color.blue, title="Oscillator") hline(zoneHigh, "Upper Zone", color=color.red) hline(zoneLow, "Lower Zone", color=color.green)
Thanh TrẻNếu bạn có thể thực hiện mô phỏng mã trực tiếp, bạn sẽ thấy rằng bạn đã đến điểm đóng gói mà không thực hiện các hoạt động đóng gói.