本策略通过计算不同类型的均线(简单移动平均线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)