双均线策略是一种比较常见的短线交易策略。该策略通过计算不同周期的均线,判断市场趋势方向,以此进行入场。当短周期均线上穿长周期均线时,做多;当短周期均线下穿长周期均线时,做空。
该策略的核心逻辑是:
计算两条不同周期的均线,一条为长周期均线,一条为短周期均线。这里使用开盘价和收盘价的均线。
判断短周期均线是否出现了对长周期均线的穿透。当短线上穿长线时,表示市场处于上涨趋势,可以做多;当短线下穿长线时,表示市场处于下跌趋势,可以做空。
根据趋势方向入场做多做空。具体来说,是当短周期均线上穿长周期均线时,做多;当短周期均线下穿长周期均线时,做空。
止损和止盈根据实际情况设定。
整个策略运用了均线的趋势判断功能,判断市场短期和长期趋势的关系,以捕捉较短的中短线行情。该策略逻辑简单清晰,通过双均线交叉来判断行情背离与延续的节奏转换,以此来进行交易操作。
双均线策略具有以下优势:
思路简单,容易理解和实现。
具有明确的入场 timing 和出场标准。
可以通过调整均线参数来适应不同的市场环境。
兼顾趋势和反转,可以捕捉一定的中短线行情。
有止损逻辑,可以控制风险。
双均线策略也存在一些风险:
当市场处于震荡整理阶段时,止损可能被频繁触发。
大幅度波动的市场中,均线生成的信号可能频繁,不利于持仓。
双均线本身滞后性较强,可能错过短线的反转机会。
需要注意参数优化,设定合适的均线周期。
均线交叉具有一定的滞后性,入场时机可能会有所延迟。
以下几点可以作为该策略的优化方向:
优化均线周期参数,适应不同行情。可以做参数回测优化。
增加其他指标做过滤,避免在震荡行情中被套。可以加入MACD,KD等做辅助。
加入趋势判断指标,避免在无明确趋势时频繁交易。可以测试加入EMA等趋势判断指标。
可以考虑加入交易量指标来判断跳空方向。
优化止损策略,在大级别支持位附近设置止损。
双均线策略是一个基于均线交叉判断趋势的简单短线策略。优点是思路简单清晰,易于操作;缺点是容易被震荡市场套住,且具有滞后性。我们可以通过改进参数优化、增加过滤指标等方式来优化该策略,使之更适应复杂的市场环境。
/*backtest
start: 2022-10-26 00:00:00
end: 2023-11-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy("GetTrendStrategy timing", overlay=true)
tim=input('370')
//////////////////////////////////////////////////////////////////////
// Component Code Start
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(10, "Backtest Start Month")
testStartDay = input(25, "Backtest Start Day")
testStartHour = input(7, "Backtest Start Hour")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,testStartHour,0)
testStopYear = input(2017, "Backtest Stop Year")
testStopMonth = input(10, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testStopHour = input(13, "Backtest stop Hour")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,testStartHour,0)
testPeriod() => true
// Component Code Stop
//////////////////////////////////////////////////////////////////////
out1 = request.security(syminfo.tickerid, tim, open)
out2 = request.security(syminfo.tickerid, tim, close)
plot(out1,color=red)
plot(out2,color=green)
longCondition = crossover(request.security(syminfo.tickerid, tim, close),request.security(syminfo.tickerid, tim, open))
if testPeriod()
if (longCondition)
strategy.entry("long", strategy.long)
shortCondition = crossunder(request.security(syminfo.tickerid, tim, close),request.security(syminfo.tickerid, tim, open))
if testPeriod()
if (shortCondition)
strategy.entry("short", strategy.short)