Chiến lược SSL Channel Backtester với ATR và Quản lý tiền

Tác giả:ChaoZhang, Ngày: 2023-11-23 10:26:58
Tags:

img

Tổng quan

Đâ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.

Chiến lược logic

Chỉ số 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=16trong chiến lược này.

ATR Stop Loss/Take Profit

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.5atr_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 bạc

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àriskCá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.

Phân tích lợi thế

  • Kênh SSL có hiệu quả trong việc nắm bắt các tín hiệu đảo ngược xu hướng
  • Các điểm dừng dựa trên ATR được điều chỉnh tự động dựa trên sự biến động
  • Quản lý tiền giúp kiểm soát rủi ro trên tất cả các ngành nghề

Phân tích rủi ro

  • Các tín hiệu kênh SSL có thể không hoàn toàn đáng tin cậy, tín hiệu sai có thể xảy ra
  • Các điểm dừng ATR có thể kết thúc quá rộng hoặc quá chật
  • Các thiết lập quản lý tiền không đúng có thể dẫn đến các vị trí quá lớn hoặc hiệu quả thấp

Những rủi ro này có thể được giảm thiểu bằng cách:

  1. Thêm bộ lọc để xác nhận tín hiệu và tránh các mục nhập sai
  2. Điều chỉnh tham số thời gian ATR cho mức dừng lỗ/lợi nhuận tối ưu
  3. Kiểm tra các tham số quản lý tiền khác nhau cho kích thước vị trí lý tưởng

Hướng dẫn tối ưu hóa

Chiến lược có thể được cải thiện trong các khía cạnh sau:

  1. Tối ưu hóa các tham số kênh SSL cho hiệu suất tốt nhất
  2. Cải thiện hoặc thay thế cơ chế dừng ATR
  3. Thêm các chỉ số lọc để tránh giao dịch không cần thiết
  4. Tích hợp kích thước vị trí để tối đa hóa lợi nhuận điều chỉnh rủi ro
  5. Các thông số chỉnh sắc cho các nhạc cụ khác nhau
  6. Thêm các công cụ định lượng để thử nghiệm toàn diện hơn

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ẽ.

Kết luận

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)


Thêm nữa