移动平均线交叉交易策略是一种较为常见的量化交易策略。该策略通过计算不同周期的移动平均线,并根据它们的交叉情况来产生交易信号。具体来说,是计算4周期、8周期和20周期的指数移动平均线(EMA),当短期EMA上穿长期EMA时,做多;当短期EMA下破长期EMA时,做空。
该策略的核心逻辑是:
通过这个方法,我们利用了不同周期均线之间的交叉来判断市场Signals,同时利用了最长周期均线的方向来过滤误信号,构建一个稳定的交易策略。
该策略主要具有以下几点优势:
该策略也存在一些风险:
主要的解决方法是:
该策略可以从以下几个方面进行优化:
4.模型融合:与LSTM、RNN等深度学习模型整合,提取更多Alpha
5.组合优化:与其它指标策略组合,构建策略组合
移动平均线交叉策略整体来说是一种较为经典和常用的量化交易策略。该策略逻辑简单,容易理解和实现,具有一定的稳定性。但也存在一些问题,如产生假信号、无法适应市场变化等。这些问题可以通过参数优化、止损优化、模型融合等方法加以改进。总的来说,移动平均线策略可以作为策略工具箱中的一个基础模块,与其他更复杂的策略组合,构建稳健的复合策略。
/*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=3 //future strategy //strategy(title = "stub", default_qty_type = strategy.fixed, default_qty_value = 1, overlay = true, commission_type=strategy.commission.cash_per_contract,commission_value=2.05) //stock strategy strategy(title = "stub", overlay = true) //forex strategy //strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, overlay = true) //crypto strategy //strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, overlay = true, commission_type=strategy.commission.percent,commission_value=.0,default_qty_value=10000) testStartYear = input(1900, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testEndYear = input(2018, "Backtest Start Year") testEndMonth = input(12, "Backtest Start Month") testEndDay = input(1, "Backtest Start Day") testPeriodEnd = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testPeriod() => true ema1 = ema(close,4) ema2 = ema(close,8) ema3 = ema(close,20) go_long = ema1[0] > ema2[0] and ema3[0] > ema3[1] exit_long = ema1[0] < ema2[0] or ema3[0] < ema3[1] go_short = ema1[0] < ema2[0] and ema3[0] < ema3[1] exit_short = ema1[0] > ema2[0] or ema3[0] > ema3[1] if testPeriod() strategy.entry("simpleBuy", strategy.long, when=go_long) strategy.exit("simpleBuy", "simpleSell",when=exit_long) strategy.entry("simpleSell", strategy.short,when=go_short) strategy.exit("simpleSell", "simpleSell",when=exit_short)