本策略通过计算不同类型的均线(简单移动平均线SMA、指数移动平均线EMA、Hull移动平均线HMA和量加权移动平均线VWMA)并寻找其交叉点,来判断行情趋势并进行趋势跟随。当较短期均线从下方上穿较长期均线时生成买入信号;当较短期均线从上方下穿较长期均线时生成卖出信号。
本策略主要通过比较两条不同均线之间的关系来判断行情走势。具体来说,通过输入参数设置两条均线的类型和长度。其中第一条均线长度较长,代表了长期趋势;第二条均线长度较短,代表了当前短期趋势。
当短期均线从下方穿过长期均线时,代表短期趋势变强,行情进入上涨趋势,因此在这个交叉点发出买入信号。反之,当短期均线从上方穿过长期均线时,代表短期趋势变弱,行情进入下跌趋势,因此在这个交叉点发出卖出信号。
通过这样的均线交叉判断来跟随市场趋势进行交易。
风险解决方法:
本策略基于均线交叉判断主要趋势的经典思路,通过不同均线的组合灵活应用。策略逻辑简单,容易实现,适合自动化交易。总体来说,本策略具有一定的实用性,但也存在一些改进优化的空间。通过参数优化、增加其他过滤器判断等方法,可以不断提升策略表现。
/*backtest
start: 2023-12-31 00:00:00
end: 2024-01-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
//study(title="MA Crossover Strategy", overlay = true)
strategy("MA Crossover Strategy", overlay=true)
src = input(close, title="Source")
price = request.security(syminfo.tickerid, timeframe.period, src)
ma1 = input(25, title="1st MA Length")
type1 = input("HMA", "1st MA Type", options=["SMA", "EMA", "HMA", "VWMA"])
ma2 = input(7, title="2nd MA Length")
type2 = input("HMA", "2nd MA Type", options=["SMA", "EMA", "HMA", "VWMA"])
f_hma(_src, _length)=>
_return = wma((2*wma(_src, _length/2))-wma(_src, _length), round(sqrt(_length)))
price1 = if (type1 == "SMA")
sma(price, ma1)
else
if (type1 == "EMA")
ema(price, ma1)
else
if (type1 == "VWMA")
vwma(price, ma1)
else
f_hma(price, ma1)
price2 = if (type2 == "SMA")
sma(price, ma2)
else
if (type2 == "EMA")
ema(price, ma2)
else
if (type2 == "VWMA")
vwma(price, ma2)
else
f_hma(price, ma2)
//plot(series=price, style=line, title="Price", color=black, linewidth=1, transp=0)
plot(series=price1, style=line, title="1st MA", color=blue, linewidth=2, transp=0)
plot(series=price2, style=line, title="2nd MA", color=green, linewidth=2, transp=0)
longCondition = crossover(price1, price2)
if (longCondition)
strategy.entry("Long", strategy.long)
shortCondition = crossunder(price1, price2)
if (shortCondition)
strategy.entry("Short", strategy.short)