Chiến lược theo dõi tỷ lệ phần trăm hộp động

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

img

Tổng quan

Chiến lược này sử dụng thay đổi tỷ lệ phần trăm giá để thiết lập đường nhập và đường dừng lỗ. Nó đi vào các vị trí khi giá vượt qua đường nhập và ra khỏi các vị trí khi giá giảm xuống dưới đường dừng lỗ. Đặc điểm chính của nó là nó chỉ chịu một đơn vị rủi ro, có nghĩa là các vị trí mới sẽ chỉ được thêm vào sau khi vị trí trước đó đạt được mục tiêu lợi nhuận được đặt trước.

Nguyên tắc

Chiến lược đầu tiên thiết lập giá chuẩn và sử dụng 10% giá đó làm phạm vi giá - giới hạn trên là đường nhập và giới hạn dưới là đường dừng lỗ. Khi giá vượt qua đường nhập, số lượng cố định sẽ được mua. Khi giá giảm xuống dưới đường dừng lỗ, các vị trí sẽ được đóng. Sau khi kiếm lợi nhuận, các đường nhập và dừng lỗ sẽ được điều chỉnh theo tỷ lệ phần trăm để mở rộng phạm vi lợi nhuận. Điều này cho phép chiến lược theo dõi xu hướng chạy.

Một điểm quan trọng khác của chiến lược là nó chỉ có một đơn vị rủi ro. nghĩa là, các vị trí mới sẽ chỉ được thêm vào sau khi vị trí hiện tại đạt được mục tiêu lợi nhuận. Các vị trí mới cũng sẽ theo các đường nhập và dừng lỗ mới. Điều này hạn chế rủi ro.

Phân tích lợi thế

Chiến lược này kết hợp các lợi thế của việc dừng lại và kích thước vị trí, cho phép kiểm soát rủi ro hiệu quả trong khi có lợi nhuận.

  1. Sử dụng phạm vi phần trăm cho các đường nhập cảnh và dừng lỗ cho phép theo dõi xu hướng tự động
  2. Rủi ro được giới hạn ở một con số, tránh mất mát lớn
  3. Các vị trí mới chỉ được thêm sau khi lợi nhuận, tránh theo đuổi xu hướng
  4. Đường dừng lỗ di chuyển lên sau khi lợi nhuận, khóa trong lợi nhuận

Phân tích rủi ro

Ngoài ra còn có một số rủi ro:

  1. Nếu tỷ lệ phần trăm quá rộng, rủi ro có thể mở rộng
  2. Nếu phạm vi quá hẹp, tiềm năng lợi nhuận bị hạn chế
  3. Đặt lệnh dừng lỗ không đúng có thể dẫn đến thoát sớm
  4. Sự gia tăng mạnh mẽ có thể làm gia tăng tổn thất

Những rủi ro này có thể được tránh bằng cách điều chỉnh các thông số như kích thước phạm vi, bộ lọc nhập cảnh vv.

Tối ưu hóa

Có chỗ cho việc tối ưu hóa thêm:

  1. Kết hợp với các chỉ số xu hướng để xác định hướng xu hướng
  2. Thêm các mô hình học máy cho các dòng thích nghi hơn
  3. Kiểm tra các điều kiện bổ sung khác nhau để giảm rủi ro
  4. Tìm thời gian giữ tối ưu thông qua thử nghiệm

Kết luận

Đây là một hệ thống dựa trên phạm vi tỷ lệ phần trăm đơn giản và thực tế. Thông qua điều chỉnh tham số và tối ưu hóa mô hình, chiến lược này có thể trở thành một công cụ theo dõi xu hướng đáng tin cậy, tạo ra hiệu suất vượt trội ổn định cho các nhà đầu tư.


/*backtest
start: 2022-11-16 00:00:00
end: 2023-11-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © HermanBrummer 4 April 2021

strategy ("The Box Percent Strat", shorttitle="The Box", overlay = true)

///     Designed for LONG only on Daily, 2D or 3D Charts
///     Uses fixed investment risk amount, meaning you're willing to lose that amount per trade
///     Limit buy to not overpay

RiskPerTrade            = input(10000, "Risk losing this much per trade", tooltip="This calculates how much you will lose based on difference between the entry price and stop loss price")
TradeAboveMAFilterPer   = input(50, "The System won't trade if price is below this MA")

UpBoxSize               = (input(10, "Box size in %") * 0.01)+1 // 1.1 == 10% up
DnBoxSize               = 1-(input(10, "Box size in %") * 0.01) // 0.9 == 10% dn


var FirstBar            = close > 0 ? close : na
var FirstTop            = FirstBar * UpBoxSize
var FirstBot            = FirstBar * DnBoxSize


var top                 = sma(FirstTop, 1)
var bot                 = sma(FirstBot, 1)

///     The Box Calcs
if  high[2] > top
    top                 := top * UpBoxSize
    bot                 := bot * UpBoxSize
if  low[1]  < bot
    top                 := top * DnBoxSize
    bot                 := bot * DnBoxSize

 
plot(bot,   "Bot",      #ff0000) // Green
plot(top,   "Top",      #00ff00) // Red

mid                     = ((top-bot)/2)+bot 
plot(mid,   "Mid", color.gray)

TradeAboveMAFilter      = sma(close, TradeAboveMAFilterPer)
plot(TradeAboveMAFilter, "Trade AboveMAF Filter", color.yellow, 3, style=plot.style_circles)

// col = high[1] < top and high >= top ? color.white : na
// bgcolor(col)


///     Shares
RiskRange                   = close * abs(DnBoxSize - 1) // 0.9 - 1 == 1.10 // 10% abs so you don't get a neg number NB NB
Shares                      = RiskPerTrade / RiskRange 
//plot(close-RiskRange, "RiskRange", color.fuchsia)

Enter   =   high >= top
             and close[1] > TradeAboveMAFilter
             and strategy.opentrades[0] == strategy.opentrades[1]
             and strategy.opentrades[1] == strategy.opentrades[2] 
             and strategy.opentrades[2] == strategy.opentrades[3]
             and strategy.opentrades[3] == strategy.opentrades[4] 
             and strategy.opentrades[4] == strategy.opentrades[5]
             and strategy.opentrades[5] == strategy.opentrades[6]
             // won't enter if new positon was taken in the last 6 bars
             // need better code for this.

///     Buy & Sell
//  (new highs)    and  (Close above moving average filter) and (No new trades were taken receently)
if  Enter //(high >= top)  and  (close[1] > TradeAboveMAFilter) and strategy.opentrades[0] == strategy.opentrades[1] 
    strategy.order("En", strategy.long, qty=Shares, limit=top)//, stop=top)
    
//barcolor(strategy.position_size != 0 ? #00ff00 : color.gray)


// ///     If ONE Position THEN this Stop Because: 
// if  strategy.position_size == 1
//     strategy.exit("Ex", "En", stop=bot)
///     If it has more than one trad OPEN
if  strategy.position_size > 0
    strategy.exit("Ex", "En", stop=bot[2] )   // puts stop on old bot

//plot(strategy.position_avg_price, "Avg Price", color.yellow)





Thêm nữa