资源加载中... loading...

N Bars 突破策略

Author: ChaoZhang, Date: 2024-04-12 16:57:15
Tags:

 N Bars 突破策略

概述

N Bars 突破策略是一种基于价格突破的量化交易策略。该策略的主要思路是,当收盘价突破过去N个交易日的最高价时开多仓,当收盘价跌破过去N个交易日的最低价时平多仓。该策略通过比较当前价格与过去N个交易日的最高最低价,捕捉强势突破行情,达到趋势跟踪的效果。

策略原理

  1. 计算过去N个交易日的最高价(highest)和最低价(lowest)。
  2. 如果当前收盘价高于highest,则开多仓(long)。
  3. 如果当前收盘价低于lowest,则平多仓(short)。
  4. 可以选择使用收盘价(close)或者高低价(high/low)作为信号源(source)。
  5. 根据信号源的不同,使用ta.highest和ta.lowest计算最高价和最低价。
  6. 使用ta.crossover和ta.crossunder判断价格突破情况。

策略优势

  1. 逻辑简单清晰,易于实现和优化。
  2. 可以有效捕捉强势突破行情,趋势跟踪能力强。
  3. 参数调优空间大,可以根据不同品种和周期进行优化。
  4. 适用性广,对多数品种和周期都有不错的表现。
  5. 可以灵活选择信号源,提高策略适应性。

策略风险

  1. 对震荡行情和小幅波动行情表现较差,频繁开平仓导致较高的交易成本。
  2. 参数选择不当可能导致过拟合风险。
  3. 趋势转折时可能出现较大回撤。
  4. 单一信号源可能面临信号失真的风险。

策略优化方向

  1. 增加趋势过滤条件,如ma趋势方向、adx等,减少震荡行情下的交易。
  2. 优化参数选择,如N值、信号源等,提高策略稳定性和盈利能力。
  3. 增加止损和移动止损逻辑,控制单笔交易风险。
  4. 结合多个信号源,提高信号可靠性,如同时考虑收盘价和高低价突破。
  5. 根据不同品种和周期,分别优化参数和逻辑。

总结

N Bars 突破策略是一个简单实用的量化交易策略,通过捕捉价格突破行情,实现了较好的趋势跟踪效果。该策略逻辑清晰,优化空间大,适用性广,是一个值得进一步研究和优化的量化策略。通过合理的参数优化和逻辑改进,可以进一步提高该策略的稳定性和盈利能力,更好地适应不同市场环境。


/*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)

更多内容