该策略的主要思想是利用平滑移动平均线来计算平滑的启明均线,以发现价格趋势,并在价格与平滑启明均线发生金叉时做多,死叉时做空。
该策略首先定义了一个计算平滑移动平均线的函数smoothedMovingAvg,该函数采用之前周期的移动平均线值和最新价,按一定权重计算出当前周期的平滑移动平均线。
然后定义了一个函数getHAClose,用于根据开盘价、最高价、最低价和收盘价计算出启明均线的收盘价。
在主策略逻辑中,首先获取不同周期的原始价格,然后利用smoothedMovingAvg函数计算出平滑移动平均线,再通过getHAClose函数计算出平滑启明收盘价。
最后,当价格上穿平滑启明收盘价时做多,下穿时平仓;当价格下穿平滑启明收盘价时做空,上穿时平仓。
该策略最大的优势在于利用平滑移动平均线计算平滑启明均线,能更准确判断价格趋势,过滤掉部分噪音,避免在震荡中产生错误信号。此外,启明均线本身就具有突显趋势的优点,与价格结合使用,可以进一步提高判断准确率。
该策略主要面临如下风险: 1. 平滑参数设置不当,可能导致策略错过价格反转机会或产生错误信号。需要通过反复回测和优化找到最佳参数。 2. 价格剧烈震荡时,平滑均线可能延迟跟随价格变化,从而导致止损或错过反转机会。此时需要降低仓位规避风险。
针对上述风险,我们可以通过调整平滑参数、引入止损机制、降低单笔交易仓位等方法来降低风险和提高策略稳定性。
该策略还可以从以下几个方面进行优化: 1. 增加自适应平滑参数,当市场波动加剧时自动调整参数。 2. 结合其他指标作为过滤器,避免在价格震荡时发出错误信号。例如MACD,KD等。 3. 增加止损机制,以控制单笔亏损。可以设定百分比止损或振荡止损。 4. 对交易品种、时间段等进行优化,专攻最具优势的品种和交易段。
通过以上几点优化,可以进一步减少策略的曲线拟合风险,提高策略的适应性和稳定性。
该策略整体思路清晰易懂,通过计算平滑启明均线判断价格趋势,并据此进行长短做法。最大优势在于可以过滤部分噪音,提高信号判断的准确度。但也存在一定的参数优化难度和可能错过快速反转的风险。通过引入自适应机制、拓宽指标组合等手段还可进一步优化,值得深入研究。
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Smoothed Heiken Ashi Strategy", overlay=true) // Inputs g_TimeframeSettings = 'Display & Timeframe Settings' time_frame = input.timeframe(title='Timeframe for HA candle calculation', defval='', group=g_TimeframeSettings) g_SmoothedHASettings = 'Smoothed HA Settings' smoothedHALength = input.int(title='HA Price Input Smoothing Length', minval=1, maxval=500, step=1, defval=10, group=g_SmoothedHASettings) // Define a function for calculating the smoothed moving average smoothedMovingAvg(src, len) => smma = 0.0 smma := na(smma[1]) ? ta.sma(src, len) : (smma[1] * (len - 1) + src) / len smma // Function to get Heiken Ashi close getHAClose(o, h, l, c) => ((o + h + l + c) / 4) // Calculate smoothed HA candles smoothedHAOpen = request.security(syminfo.tickerid, time_frame, open) smoothedMA1close = smoothedMovingAvg(request.security(syminfo.tickerid, time_frame, close), smoothedHALength) smoothedHAClose = getHAClose(smoothedHAOpen, smoothedHAOpen, smoothedHAOpen, smoothedMA1close) // Plot Smoothed Heiken Ashi candles plotcandle(open=smoothedHAOpen, high=smoothedHAOpen, low=smoothedHAOpen, close=smoothedHAClose, color=color.new(color.blue, 0), wickcolor=color.new(color.blue, 0)) // Strategy logic longCondition = close > smoothedHAClose shortCondition = close < smoothedHAClose strategy.entry("Buy", strategy.long, when=longCondition) strategy.close("Buy", when=shortCondition) plotshape(series=longCondition, title="Buy Signal", color=color.green, style=shape.labelup, location=location.belowbar) plotshape(series=shortCondition, title="Sell Signal", color=color.red, style=shape.labeldown, location=location.abovebar)