这是一个结合每日高低点、移动平均线和成交量的简单日内交易策略。策略的主要思路是在突破前一日高点或低点时,结合移动平均线方向和资金流动方向作为入场信号。
该策略主要基于以下几个指标进行判断:
每日高低点:记录前一交易日的最高价和最低价,作为突破判断的基准。
移动平均线:计算一定周期的收盘价移动平均值,作为大趋势判断的参考。
成交量的多空指标:计算一定周期内成交量的归一化多空值,判断资金流入流出。
具体交易规则如下:
做多条件:当天高点突破前一日高点,且收盘价高于移动平均线,成交量多空指标为正,则做多。
平多条件:当收盘价跌破移动平均线时,平掉多单。
做空条件:当天低点突破前一日低点,且收盘价低于移动平均线,成交量多空指标为负,则做空。
平空条件:当收盘价涨破移动平均线时,平掉空单。
该策略充分考虑了突破、趋势和资金流向等多个方面,形成比较全面的判断体系,可以有效过滤掉一些假突破的噪音。但由于仅基于日内数据进行决策,属于短线操作策略。
这种高低突破策略具有以下几个优势:
思路简单直观,容易理解实施。
突破前一日高低点,可以捕捉到较强势力的方向。
结合移动平均线进行过滤,避免了许多噪音讯号。
借助资金流动指标,可以判断力量的多空分布。
采用日内交易,可以通过反复进行多次交易来累积利润。
无需复杂的参数优化,较为容易实施。
可适用于不同品种,灵活性较高。
总体来说,策略思路简单清晰,实施难度不大,利润空间可观。
尽管该策略有许多优点,但也存在以下一些风险:
依赖高低突破,可能发生假突破而造成损失。
过于依赖日内交易,容易受到隔夜事件影响。
移动平均线滞后性可能错过趋势转折点。
成交量指标的效果不稳定,有时会发出错误信号。
无法很好地控制单次损失大小,存在亏损过大的风险。
日内反复交易易受交易费用影响。
优化空间有限,难以持续获得超额收益。
整体来说,策略信号频繁,但稳定性和盈利能力都有待考验。
该策略可以从以下几个方面进行进一步优化:
加入止损机制,以控制单次损失。
优化移动平均线参数,使其更灵敏或更平稳。
尝试不同的成交量指标,提高资金流判断的准确性。
增加更多过滤条件,减少假突破机会。
尝试在更高时间框架运行策略,避免过于频繁交易。
引入机器学习等手段,建立自适应交易信号系统。
整合更多数据源进行决策,如新闻事件、宏观环境等。
全面评估策略的稳定性和收益波动风险,不追求过高收益。
本策略总体来说是一种简单直观的高低突破策略思路,核心在于掌握价量关系和趋势判断。它有一定的优势,但也存在风险,需要进一步优化和验证。如果能够控制风险、稳定盈利,这可以是一个具有实战价值的短线策略思路。但更高效稳定的策略还需要引入更多因素进行建模,并进行严格的回测验
证。
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © exlux99
//@version=5
strategy(title='Daily HIGH/LOW strategy', overlay=true, initial_capital=10000, calc_on_every_tick=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1)
////////////////////////////GENERAL INPUTS//////////////////////////////////////
len = input.int(24, minval=1, title='Length MA', group='Optimization paramters')
src = input.source(close, title='Source MA', group='Optimization paramters')
out = ta.ema(src, len)
length = input.int(20, minval=1, title='CMF Length', group='Optimization paramters')
ad = close == high and close == low or high == low ? 0 : (2 * close - low - high) / (high - low) * volume
mf = math.sum(ad, length) / math.sum(volume, length)
f_secureSecurity(_symbol, _res, _src) =>
request.security(_symbol, _res, _src[1], lookahead=barmerge.lookahead_on)
pricehigh = f_secureSecurity(syminfo.tickerid, 'D', high)
pricelow = f_secureSecurity(syminfo.tickerid, 'D', low)
plot(pricehigh, title='Previous Daily High', style=plot.style_linebr, linewidth=2, color=color.new(color.white, 0))
plot(pricelow, title='Previous Daily Low', style=plot.style_linebr, linewidth=2, color=color.new(color.white, 0))
short = ta.crossunder(low, pricelow) and close < out and mf < 0
long = ta.crossover(high, pricehigh) and close > out and mf > 0
if short and barstate.isconfirmed
strategy.entry('short', strategy.short, when=barstate.isconfirmed, stop=pricelow[1])
strategy.close('short', when=close > out)
if long and barstate.isconfirmed
strategy.entry('long', strategy.long, when=barstate.isconfirmed, stop=pricehigh[1])
strategy.close('long', when=close < out)