Đây là một chiến lược backtesting dựa trên chỉ số kênh SSL, tích hợp với các chức năng như ATR dừng lỗ, ATR lấy lợi nhuận và quản lý tiền để tạo điều kiện kiểm tra toàn diện hơn về chiến lược kênh SSL.
Chỉ số kênh SSL bao gồm đường giữa kênh và băng tần kênh. Dòng đường giữa kênh chứa một đường dẫn trên và một đường dẫn dưới, thường là trung bình động đơn giản của giá cao và thấp trong một khoảng thời gian nhìn lại. Các băng tần kênh được hình thành giữa các đường dẫn trên và dưới.
Khi giá tiếp cận dải trên, nó chỉ ra các điều kiện mua quá mức; khi giá tiếp cận dải dưới, nó báo hiệu các điều kiện bán quá mức.
Các tham số kênh SSL được thiết lập chossl_period=16
trong chiến lược này.
Phạm vi trung bình thực sự (ATR) đo biến động thị trường và có thể được sử dụng để xác định mức dừng lỗ và lấy lợi nhuận.
Chiến lược này sử dụng một ATR 14 thời gian (atr_period=14
) và nhân độngatr_stop_factor=1.5
vàatr_target_factor=1.0
để thiết lập stop loss thích nghi và lấy lợi nhuận dựa trên biến động.
Nó cũng kiểm tra xem thiết bị có độ chính xác 2 chữ số thập phân (two_digit
) để điều chỉnh điểm dừng và mục tiêu cho các cặp như vàng và JPY.
Quản lý tiền được thực hiện thông quaposition_size
(sự thay đổi kích thước vị trí cố định) vàrisk
Các mô-đun quản lý tiền sẽ được kích hoạt khiuse_mm=true
.
Mục tiêu là xác định kích thước vị trí tối ưu cho mỗi giao dịch. Bằng cách sử dụng tỷ lệ rủi ro cố định cho mỗi giao dịch, kích thước vị trí được cho phép sẽ được tính năng dựa trên vốn hóa tài khoản để hạn chế lỗ trên mỗi giao dịch.
Những rủi ro này có thể được giảm thiểu bằng cách:
Chiến lược có thể được cải thiện trong các khía cạnh sau:
Với tối ưu hóa có hệ thống, chiến lược này có thể trở thành một hệ thống giao dịch thuật toán mạnh mẽ.
Chiến lược này kết hợp kênh SSL cho xu hướng, ATR để kiểm soát rủi ro và quản lý tiền cho kích thước vị trí. Kiểm tra hậu kỳ toàn diện tạo điều kiện cho việc đánh giá và nâng cao chiến lược thành một hệ thống giao dịch tự động. Ngoài ra còn có chỗ cho các cải tiến như thêm bộ lọc, tối ưu hóa các tham số và mở rộng chức năng. Nhìn chung, điều này tạo thành một nền tảng vững chắc để xây dựng các chiến lược giao dịch thuật toán.
/*backtest start: 2023-10-23 00:00:00 end: 2023-11-22 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/ // © comiclysm //@version=4 strategy("SSL Backtester", overlay=false) //--This strategy will simply test the effectiveness of the SSL using //--money management and an ATR-derived stop loss //--USER INPUTS two_digit = input(false, "Check this for 2-digit pairs (JPY, Gold, Etc)") ssl_period = input(16, "SSL Period") atr_period = input(14, "ATR Period") atr_stop_factor = input(1.5, "ATR Stop Loss Factor") atr_target_factor = input(1.0, "ATR Target Factor") use_mm = input(true, "Check this to use Money Management") position_size = input(1000, "Position size (for Fixed Risk)") risk = input(0.01, "Risk % in Decimal Form") //--INDICATORS------------------------------------------------------------ //--SSL sma_high = sma(high, ssl_period) sma_low = sma(low, ssl_period) ssl_value = 0 ssl_value := close > sma_high ? 1 : close < sma_low ? -1 : ssl_value[1] ssl_low = ssl_value < 0 ? sma_high : sma_low ssl_high = ssl_value < 0 ? sma_low : sma_high //--Average True Range atr = atr(atr_period) //--TRADE LOGIC---------------------------------------------------------- signal_long = ssl_value > 0 and ssl_value[1] < 0 signal_short = ssl_value < 0 and ssl_value[1] > 0 //--RISK MANAGMENT------------------------------------------------------- strategy.initial_capital = 50000 balance = strategy.netprofit + strategy.initial_capital risk_pips = atr*10000*atr_stop_factor if(two_digit) risk_pips := risk_pips / 100 risk_in_value = balance * risk point_value = syminfo.pointvalue risk_lots = risk_in_value / point_value / risk_pips final_risk = use_mm ? risk_lots * 10000 : position_size //--TRADE EXECUTION----------------------------------------------------- if (signal_long) stop_loss = close - atr * atr_stop_factor target = close + atr * atr_target_factor strategy.entry("Long", strategy.long, final_risk) strategy.exit("X", "Long", stop=stop_loss, limit=target) if (signal_short) stop_loss = close + atr * atr_stop_factor target = close - atr * atr_target_factor strategy.entry("Short", strategy.short, final_risk) strategy.exit("X", "Short", stop=stop_loss, limit=target) //--PLOTTING----------------------------------------------------------- plot(ssl_low, "SSL", color.red, linewidth=1) plot(ssl_high, "SSL", color.lime, linewidth=1)