本策略的核心逻辑是检测连续N根K线收盘价是否连续上涨,如果是,则进行做多;如果不满足,则平仓。这样可以捕捉到股价上涨的趋势,实现盈利。
该策略的核心指标是nCounter,它通过比较当前K线的收盘价和开盘价来判断价格是否上涨。
具体来说,如果close[1]>=open[1],则nCounter加1,表示上涨;如果close[1]
然后将nCounter与参数nLength进行比较,当nCounter>=nLength时,输出信号C1=1;否则C1=0。这里的nLength就是我们定义的需要多少根连续上涨K线才产生信号。
收到C1=1的信号后,如果当前没有持仓,则执行做多;如果已有多头持仓,则继续持有。
此外,该策略还设置了止损和止盈条件。如果价格低于入场价一定比例,则止损平仓;如果高于入场价一定比例,则止盈。
这是一个比较典型的趋势跟踪策略,它具有以下几点优势:
该策略也存在一些风险,主要集中在以下几个方面:
为降低这些风险,我们可以设置更严格的止损条件,优化nLength参数,加入大盘判断规则,或针对不同股票分别测试参数。当然,任何策略都难以完全避免损失,需要与交易者的风险偏好相匹配。
考虑到上述风险,我们可以从以下几个方面继续优化该策略:
本策略通过检测N根连续上涨K线实现对上涨趋势的捕捉,可以有效进行趋势跟踪。优点是逻辑简单,参数调整灵活,可以filtering假突破。但也存在一定的风险,需要加入止损、参数优化、环境判断等模块进行改进,使策略更全面和稳定。总的来说,本策略为量化交易提供了一个有价值的基础模型,通过不断完善可以成为一个强大的交易工具。
/*backtest
start: 2023-01-01 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
////////////////////////////////////////////////////////////
// Copyright by HPotter v1.0 05/02/2020
// Evaluates for n number of consecutive higher closes. Returns a value
// of 1 when the condition is true or 0 when false.
//
// WARNING:
// - For purpose educate only
// - This script to change bars colors.
////////////////////////////////////////////////////////////
strategy(title="N Bars Up", shorttitle="NBU Backtest", overlay = false)
nLength = input(4, minval=1)
input_takeprofit = input(20, title="Take Profit pip", step=0.01)
input_stoploss = input(10, title="Stop Loss pip", step=0.01)
nCounter = 0
nCounter := iff(close[1] >= open[1], nz(nCounter[1],0)+1,
iff(close[1] < open[1], 0, nCounter))
C1 = iff(nCounter >= nLength, 1, 0)
posprice = 0.0
pos = 0
barcolor(nz(pos[1], 0) == -1 ? color.red: nz(pos[1], 0) == 1 ? color.green : color.blue )
posprice := iff(C1== 1, close, nz(posprice[1], 0))
pos := iff(posprice > 0, 1, 0)
if (pos == 0)
strategy.close_all()
if (pos == 1)
strategy.entry("Long", strategy.long)
posprice := iff(low <= posprice - input_stoploss and posprice > 0, 0 , nz(posprice, 0))
posprice := iff(high >= posprice + input_takeprofit and posprice > 0, 0 , nz(posprice, 0))
plot(C1, title='NBU', color=color.green)