本策略通过计算不同周期的移动平均线,设定它们的交叉作为买入和卖出信号,实现对趋势的跟踪。核心逻辑是使用更短周期的移动平均线来跟踪更长周期趋势的转折。
以上交易信号设定的背后逻辑是,短周期移动平均线能更快地响应价格变化,反映最新趋势;长周期移动平均线更能体现总体趋势,过滤噪音。当短周期移动平均线穿过长周期移动平均线时,表示趋势发生转折,因此设定交易信号。
本策略通过简单的移动平均线交叉方式,捕捉价格趋势的转变,属于典型的趋势跟踪策略。优点是简单易懂,易于操作,可以通过调整参数适应多种市场环境。缺点是对突发事件反应不灵敏,容易产生错误信号。总体而言,本策略思路清晰,为量化交易的入门策略之一,但实盘应用时需要注意风险控制,并进行适当优化。
/*backtest
start: 2023-02-23 00:00:00
end: 2024-02-29 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("MA Crossover Strategy", overlay=true)
// Функция для получения скользящего среднего на заданном таймфрейме
getMA(source, length, timeframe) =>
request.security(syminfo.tickerid, timeframe, ta.sma(source, length))
// Вычисляем 200-периодное и 100-периодное скользящее среднее для текущего таймфрейма
ma200 = getMA(close, 200, "240")
ma100 = getMA(close, 100, "240")
// Открываем позицию Long, если 100-периодное скользящее среднее пересекает 200-периодное сверху вниз
if (ta.crossover(ma100, ma200))
strategy.entry("Long", strategy.long)
// Закрываем позицию Long, если 100-периодное скользящее среднее пересекает 200-периодное сверху вниз
if (ta.crossunder(ma100, ma200))
strategy.close("Long")
// Открываем позицию Short, если 100-периодное скользящее среднее пересекает 200-периодное сверху вниз
if (ta.crossunder(ma100, ma200))
strategy.entry("Short", strategy.short)
// Закрываем позицию Short, если 100-периодное скользящее среднее пересекает 200-периодное снизу вверх
if (ta.crossover(ma100, ma200))
strategy.close("Short")
// Рисуем линии скользящих средних на графике
plot(ma200, color=color.blue, linewidth=2, title="200 MA")
plot(ma100, color=color.red, linewidth=2, title="100 MA")