金分割回测长仓策略是一种swing交易策略。它基于过去21天的最高价和最低价的金分割点进行信号生成,具有回测机制,只做多头,具有长线持仓的特点。
该策略首先计算过去21天的最高价high21和最低价low21,然后计算两者的差价diff。 交易信号是:当前低价高于low21 + diff * 0.382时,并且前一根K线收盘价高于前一根K线的开盘价时,做多。止损线为low21 + diff * 0.236。也就是说,当价格突破最近21天价格范围的38.2%金分割线时,并且有向上的弹性时,做多。止损线设置为23.6%金分割线。
这里使用金分割线作为重要的技术指标,是因为金分割线对应着市场普遍的支撑或阻力点。0.382和0.236作为回调位或反弹位常被监控,可以称得上是自然界中最神奇的数字之一。
这种策略的优势有:
使用金分割理论指导交易,这是一种比较成熟的技术分析方法。
只做多头,可以降低系统的风险。
采用趋势追踪机制,通过向上弹性来确定入场。
有清晰的止损线,可以控制风险。
回测参数可调,可以测试不同市场环境下的效果。
该策略也存在一些风险:
依赖历史数据,可能对市场结构变化不敏感。
止损线比较近,可能会被隔夜GAP摇出。
如果行情出现剧烈波动,回测周期不当可能导致虚假信号。
量化交易本身存在的滑点成本也会对利润造成一定影响。
这些风险可以通过调整回测周期参数、优化止损位置、考虑滑点成本等方法来降低。
这种策略可以从以下几个方面进行优化:
基于机器学习算法自动优化参数,使回测周期参数更符合当前市场环境。
结合股指期货等金融衍生品,利用杠杆进行放大操作。
增加模型对突发事件的处理,如加入跳空缺口的识别机制。
优化止损策略,根据市场波动性设置动态滑点止损。
整体来说,这是一个利用金分割线原理,具有清晰入场机制和止损思路的长线多头策略。通过参数调整、模型优化、组合应用等方法,可以将其优化为一个可靠的量化交易策略。
/*backtest
start: 2022-11-21 00:00:00
end: 2023-11-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © omkarkondhekar
//@version=4
strategy("GRBLong", overlay=true)
highInput = input(title = "High Days", type = input.integer, defval = 21, minval = 11)
lowInput = input(title = "Low Days", type = input.integer, defval = 21, minval = 5)
// Configure backtest start date with inputs
startDate = input(title="Start Date", type=input.integer,
defval=1, minval=1, maxval=31)
startMonth = input(title="Start Month", type=input.integer,
defval=1, minval=1, maxval=12)
startYear = input(title="Start Year", type=input.integer,
defval=2019, minval=1800, maxval=2100)
// See if this bar's time happened on/after start date
afterStartDate = (time >= timestamp(syminfo.timezone,
startYear, startMonth, startDate, 0, 0))
high21 = highest(high, highInput)
low21 = lowest(low, lowInput)
diff = high21 - low21
longEntrySignal = low > low21 + (diff * 0.382) and close[1] > open[1]
strategy.entry("Long", strategy.long, limit = low, when = longEntrySignal and afterStartDate)
strategy.exit("Long Exit", "Long", stop = low21 + (diff * 0.236))
plot(low21 + (diff * 0.382), color= color.green)
plot(low21 + (diff * 0.236), color = color.red)