
Chiến lược này sử dụng tỷ lệ phần trăm thay đổi của giá để thiết lập đường mua và đường dừng, đặt lệnh theo giá phá vỡ đường mua và dừng dưới đường dừng. Đặc điểm chính của nó là chỉ chịu rủi ro một đơn vị, tức là chỉ khi một vị trí trước đó đạt được mục tiêu lợi nhuận được đặt trước.
Chiến lược này bắt đầu bằng việc thiết lập một giá cơ sở, với 10% giá này là một phạm vi giá, biên trên là đường mua và biên dưới là đường dừng. Khi giá phá vỡ đường mua, mua với số lượng cố định.
Một điểm quan trọng khác của chiến lược này là chỉ chịu rủi ro một đơn vị. Đó là, chỉ khi vị trí hiện tại đạt được mục tiêu lợi nhuận, vị trí mới sẽ được đặt. Vị trí mới cũng sẽ được thiết lập theo đường mua và đường dừng mới. Điều này có thể hạn chế rủi ro.
Chiến lược này kết hợp các ưu điểm của việc theo dõi lỗ hổng và quản lý dự trữ, giúp kiểm soát rủi ro một cách hiệu quả và kiếm lợi nhuận.
Chiến lược này cũng có một số rủi ro:
Những rủi ro này có thể được tránh bằng cách điều chỉnh các tham số, chẳng hạn như điều chỉnh kích thước phần trăm, điều chỉnh điều kiện gia tăng.
Chiến lược này có thể được tối ưu hóa hơn nữa:
Đây là một chiến lược giao dịch sử dụng khoảng phần trăm. Nó đơn giản, thực tế và kiểm soát rủi ro hiệu quả. Bằng cách đ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 hệ thống theo dõi xu hướng đáng tin cậy, tạo ra lợi nhuận vượt trội ổn định cho 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)