双均线追踪策略是一个利用双均线判断价格趋势的追踪策略。该策略使用两个不同周期的均线判断趋势方向,并发出做多做空信号。当短周期和长周期均线同方向时,表示趋势确认,可以选择入场。
该策略使用两个均线判断价格趋势。具体原理如下:
计算短周期p1和长周期p2的中线mid和mid_2。
判断价格是否高于或低于中线,得到上涨和下跌的 bool 值。
通过SMA平滑上涨和下跌的 bool 值,判断出短期p1和长期p2周期的趋势方向trend和trend_2。
当trend和trend_2同向时,发出做多或做空信号。
填充不同颜色柱状图表示趋势方向。
入场时机为短周期和长周期趋势方向一致时。
以上构成了双均线追踪策略的核心逻辑。通过双均线判断,可以有效过滤掉部分假突破。当短周期和长周期趋势方向一致时,表示价格趋势非常明确,这时入场交易风险较小。
双均线追踪策略的主要优势有:
使用双均线判断,可以过滤假突破,使入场时机更加可靠。
采用不同周期均线,可以实现多时间框架的趋势判断,使交易信号更加准确。
结合短周期和长周期均线,可以把握大趋势的同时,捕捉部分短线回调机会。
策略逻辑简单清晰,容易理解和实现,适合不同水平的交易者使用。
可自定义均线周期,可以根据市场调整参数,适应不同品种和行情类型。
采用柱状图可视化显示趋势方向,形成更直观的交易提示。
双均线追踪策略也存在一些风险需要注意:
在均线周期设置不当时,可能出现多次调整仓位,增加交易频率和滑点成本。可以适当调整周期参数,或增加开仓筛选条件。
当市场处于震荡期,均线产生交叉时,会出现错误信号。可通过 andere 指标进行过滤,或增加仓位管理规则。
突破短线回调可能被错过。可以适当缩短均线周期,或采用其他策略捕捉短线机会。
大趋势突转时,止损设置不当可能带来较大亏损。应适时调整止损位置,确保止损点之下确有支撑。
策略并没有考虑基本面因素,仅从技术上判断趋势。用户需要结合自己的研判使用该策略。
该策略可以从以下几个方面进行优化:
增加其他指标过滤,例如成交量,动量指标等,避免在震荡期无效交易。
采用自适应均线周期,根据市场变化自动调整参数,而非静态周期。
增加仓位管理模块,通过趋势强度等规则指导具体加仓幅度。
增加止损模块, trailing stop 或时间止损,控制单笔损失。
5.考虑结合机器学习等技术,通过训练判断趋势准确率,动态调整出入场逻辑。
综上所述,双均线追踪策略是一个简单实用的趋势判断策略。它同时结合短期和长期两种时间维度来识别趋势,入场时机判断非常可靠,适合大部分追踪趋势交易的交易者。当然,该策略也存在一些风险需要注意,用户可以从参数优化、风险控制等方面进行改进,使策略更适应实际情况。总体来说,双均线策略是一个非常经典和实用的趋势交易策略。
/*backtest
start: 2022-10-01 00:00:00
end: 2023-10-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
// My Tradingview Scripts : https://bit.ly/2HKtr7k
strategy("UniDir Strategy", overlay=true, initial_capital=50000, default_qty_value=50000, default_qty_type=strategy.cash, slippage=3, commission_type=strategy.commission.percent, commission_value=0.075, pyramiding=0)
p1=input(14)
p2=input(21)
Price = close
mid = (highest(high, p1)+lowest(low, p1)) / 2
mid_2 = (highest(high, p2)+lowest(low, p2)) / 2
//Trend
up = Price > mid ? 1 : 0
up_2 = Price > mid_2 ? 1 : 0
down = Price < mid ? 1 : 0
down_2 = Price < mid_2 ? 1 : 0
trend = sma(up, 2) == 1 ? 1 : sma(down, 2) == 1 ? -1 : nz(trend[1])
trend_2 = sma(up_2, 2) == 1 ? 1 : sma(down_2, 2) == 1 ? -1 : nz(trend_2[1])
dir1=trend==1 ? lime : red
dir2=trend_2==1 ? lime : red
dir_all=trend==1 and trend_2==1 ? lime : red
top_p=plot(1)
hi_p=plot(0.4)
mid_p=plot(0.2)
lo_p=plot(0)
fill(hi_p,mid_p,color=dir1,transp=80)
fill(lo_p,mid_p,color=dir2,transp=80)
fill(top_p,hi_p,color=dir_all,transp=0)
// Entry
long_cond = trend==1 and trend_2==1
short_cond = trend==-1 and trend_2==-1
if long_cond
strategy.entry("Long",strategy.long)
if short_cond
strategy.entry("Short",strategy.short)