
Chiến lược phá vỡ N Bars là một chiến lược giao dịch định lượng dựa trên giá phá vỡ. Ý tưởng chính của chiến lược này là mở nhiều vị trí khi giá đóng cửa phá vỡ mức giá cao nhất trong ngày giao dịch N trước và giữ vị trí khi giá đóng cửa giảm xuống mức giá thấp nhất trong ngày giao dịch N trước. Chiến lược này có hiệu quả theo dõi xu hướng bằng cách so sánh giá hiện tại với mức giá cao nhất trong ngày giao dịch N trước.
Chiến lược N Bars là một chiến lược giao dịch định lượng đơn giản và thực tế, có hiệu quả theo dõi xu hướng tốt hơn bằng cách nắm bắt các hành động phá vỡ giá. Chiến lược này có logic rõ ràng, có không gian tối ưu hóa và khả năng áp dụng rộng rãi, là một chiến lược định lượng đáng để nghiên cứu và tối ưu hóa thêm. Bằng cách tối ưu hóa tham số hợp lý và cải tiến logic, bạn có thể nâng cao hơn nữa sự ổn định và khả năng sinh lợi của chiến lược này, thích ứng tốt hơn với các môi trường thị trường khác nhau.
/*backtest
start: 2023-04-06 00:00:00
end: 2024-04-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Breakout", overlay=true, precision=6, pyramiding=0, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=25.0, commission_value=0.05)
n = input.int(5, "N Bars", minval=1)
src_input = input.string("Close", "Source", ["Close", "High/Low"])
bull_src = switch src_input
"Close" => close
"High/Low" => high
=>
runtime.error("Invalid source input")
na
bear_src = switch src_input
"Close" => close
"High/Low" => low
=>
runtime.error("Invalid source input")
na
highest = ta.highest(bull_src[1], n)
lowest = ta.lowest(bear_src[1], n)
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
// Plots
//-----------------------------------------------------------------------------------------------------------------------------------------------------------------
bool long = ta.crossover(bull_src, highest)
bool short = ta.crossunder(bear_src, lowest)
//Plots
lowest_plot = plot(lowest, color=color.red, title="Lowest")
highest_plot = plot(highest, color=color.green, title="Highest")
bull_src_plot = plot(bull_src, color=color.blue, title="Bull")
bear_src_plot = plot(bear_src, color=color.orange, title="Bear")
// this message is an alert that can be sent to a webhook, which allows for simple automation if you have a server that listens to alerts and trades programmatically.
enter_long_alert = '{"side": "Long", "order": "Enter", "price": ' + str.tostring(open) + ', "timestamp": ' + str.tostring(timenow) + '}'
exit_long_alert = '{"side": "Long", "order": "Exit", "price": ' + str.tostring(open) + ', "timestamp": ' + str.tostring(timenow) + '}'
if long
strategy.entry(id="Long", direction=strategy.long, limit=open, alert_message=enter_long_alert)
if short
strategy.close(id="Long", comment="Close Long", alert_message=exit_long_alert)