Strategy vault / Trend following
Moving Average Crossover Strategy 427164
The moving average crossover strategy is a trend following strategy based on moving average crossover as trading signals. It uses price crossover with moving averages and crossover between two moving averages as buy…
Overview
The moving average crossover strategy is a trend following strategy based on moving average crossover as trading signals. It uses price crossover with moving averages and crossover between two moving averages as buy and sell signals to pursue profits.
Strategy Principle
The main principles of this strategy are:
Calculate two moving averages, one fast and one slow, can choose SMA or EMA.
Go long when fast line crosses above slow line, close position when fast line crosses below slow line.
Can choose price breakout or moving average crossover as trading signals.
Can set time period for strategy execution.
Can only go long in bull market and only go short in bear market.
Optimize moving average parameters through backtesting for different periods.
The strategy utilizes the trend following capability of moving averages. When short term MA crosses above long term MA, it indicates an upward trend, should go long. vice versa, downward trend, should reduce position.
Advantage Analysis
The main advantages of this strategy:
Simple principle, easy to implement, clear trading signals.
Can effectively track trends and timely capture trading opportunities.
Can combine different MA parameters for various market environments.
Can choose only long or only short to avoid uncertain reverse operations.
Can set strategy running time to avoid certain periods.
Can continuously improve strategy through parameter optimization.
Risk Analysis
The main risks of this strategy:
Prone to false signals, avoid too frequent trading.
Performance relies on MA parameters, improper selection may lead to losses.
Certain lag exists, avoid premature entry and delayed exit.
Not suitable for range-bound market environments.
MA crosses have some randomness, cannot completely avoid losses.
Risks can be reduced through volume confirmation, parameter optimization or using with other indicators.
Optimization Directions
This strategy can be optimized in the following aspects:
Add slope filter like %(Line - ShortMa)/ShortMa)/(Line - LongMa)/LongMa).
Optimize moving average periods, test different combinations.
Add indicators like MACD or RSI for multiple confirmation.
Set stop loss to limit single trade loss.
Distinguish between trending and ranging markets for conditional use.
Test different holding periods to find optimal scheme.
Summary
The moving average crossover strategy is a simple and practical trend following strategy. The advantages are easy implementation and effective trend tracking. The disadvantages are lagging and prone to false signals. The strategy can be improved through parameter optimization and indicator filtering to achieve better performance in strong trending markets.
Parameters
| Name | Default | What it controls |
|---|---|---|
| v_input_1 | true | Long Trades enabled |
| v_input_2 | true | Short Trades enabled |
| v_input_3 | 0 | Buy/Long Crossover Condition: price x MA1 | price x MA2 | MA1 x MA2 |
| v_input_4 | 0 | Sell/Short Crossunder Condition: price x MA2 | price x MA1 | MA1 x MA2 |
| v_input_5 | 0 | Moving Average 1 Type: SMA | EMA |
| v_input_6 | 20 | Moving Average 1 Len |
| v_input_7 | 0 | Moving Average 2 Type: SMA | EMA |
| v_input_8 | 30 | Moving Average 2 Len |
| v_input_9 | 4 | Strategy Start Month |
| v_input_10 | 2018 | Strategy Start Year |
| v_input_11 | 12 | Strategy End Month |
| v_input_12 | 2020 | Strategy End Year |
Source Pine Script
/*backtest
start: 2023-09-10 00:00:00
end: 2023-09-17 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © gliese581d
//@version=4
strategy(title="Moving Averages Testing", overlay=true, precision=2, calc_on_every_tick=false, max_bars_back=5000, pyramiding=2,
default_qty_type=strategy.percent_of_equity, default_qty_value=50, commission_type=strategy.commission.percent, initial_capital=10000)
//SETTINGS
longs_on = input(title="Long Trades enabled", defval=true)
shorts_on = input(title="Short Trades enabled", defval=true)
long_cond = input(title="Buy/Long Crossover Condition", defval="price x MA1", options=["price x MA1", "price x MA2", "MA1 x MA2"])
short_cond = input(title="Sell/Short Crossunder Condition", defval="price x MA2", options=["price x MA1", "price x MA2", "MA1 x MA2"])
ma1_type = input(title="Moving Average 1 Type", defval="SMA", options=["SMA", "EMA"])
ma1_len = input(defval=20, title="Moving Average 1 Len", type=input.integer, minval=1, maxval=1000, step=1)
ma2_type = input(title="Moving Average 2 Type", defval="SMA", options=["SMA", "EMA"])
ma2_len = input(defval=30, title="Moving Average 2 Len", type=input.integer, minval=1, maxval=1000, step=1)
//MOVING AVERAGES
ma_1 = ma1_type == "EMA" ? ema(close, ma1_len) : sma(close, ma1_len)
ma_2 = ma2_type == "EMA" ? ema(close, ma2_len) : sma(close, ma2_len)
//STRATEGY
//trade entries
long_entry = long_cond == "price x MA1" ? crossover(close, ma_1) : long_cond == "price x MA2" ? crossover(close, ma_2) : long_cond == "MA1 x MA2" ? crossover(ma_1, ma_2) : false
short_entry = short_cond == "price x MA1" ? crossunder(close, ma_1) : short_cond == "price x MA2" ? crossunder(close, ma_2) : short_cond == "MA1 x MA2" ? crossunder(ma_1, ma_2) : false
start_month = input(defval=4, title="Strategy Start Month", type=input.integer, minval=1, maxval=12, step=1)
start_year = input(defval=2018, title="Strategy Start Year", type=input.integer, minval=2000, maxval=2025, step=1)
end_month = input(defval=12, title="Strategy End Month", type=input.integer, minval=1, maxval=12, step=1)
end_year = input(defval=2020, title="Strategy End Year", type=input.integer, minval=2000, maxval=2025, step=1)
in_time = true
strategy.entry("Long", strategy.long, when=longs_on and in_time and long_entry)
strategy.close("Long", when=longs_on and not shorts_on and short_entry)
strategy.entry("Short", strategy.short, when=shorts_on and in_time and short_entry)
strategy.close("Short", when=shorts_on and not longs_on and long_entry)
//PLOTTING
//color background
last_entry_was_long = nz(barssince(long_entry)[1], 5000) < nz(barssince(short_entry)[1], 5000)
bgcol = (longs_on and last_entry_was_long) ? color.green : (shorts_on and not last_entry_was_long) ? color.red : na
bgcolor(color=bgcol, transp=90)
plot((long_cond == "price x MA1" or long_cond == "MA1 x MA2") or (short_cond == "price x MA1" or short_cond == "MA1 x MA2") ? ma_1 : na, color=color.blue)
plot((long_cond == "price x MA2" or long_cond == "MA1 x MA2") or (short_cond == "price x MA2" or short_cond == "MA1 x MA2") ? ma_2 : na, color=color.black)
plotshape(long_entry, style=shape.triangleup, location=location.belowbar, color=color.green)
plotshape(short_entry, style=shape.triangledown, location=location.abovebar, color=color.red)Published by ChaoZhang on the FMZ strategy square · last modified 2023-09-18. Collected in the Quant Trading Vault. Unvalidated research: re-test with your own data and costs before trusting it.
Build this with AgenKit
A spec is not a trading system. Paste this into your coding agent and AgenKit runs a specialist team — architecture, test-first build, risk gates, review — with paper trading on by default.
/agenkit build a production-grade trading bot with a backtest engine, risk controls and paper trading by default from strategies/Moving-Average-Crossover-Strategy-427164.md- npx agenkit install engineering-kit in your project
- Paste the command into your agent and approve each phase
- Get tests, backtest, risk controls and a paper-trading switch
Understand it first
Before you run this, read the lesson behind the idea and how to backtest it honestly. Specs like this one are the survivors of an unknown number of trials; deflate their results accordingly.
Related specs
- Fixed Range Volume Profile And Anchored VWAP Trend Identification Strategy With Dynamic Stop LossPine Script · Trend following · 1h
- Five Minute Triple Confirmation Trend Trading Strategy with Risk Management SystemPine Script · Trend following · 1m
- Multi Indicator Cross Trend Tracking and Volume Price Combined Adaptive Trading StrategyPine Script · Trend following · 1d
- Multi Timeframe Volume and Trend Confluence Trading StrategyPine Script · Trend following · 1d
- Three RSI Moving Average Bands StrategyPine Script · Trend following · 1h
- Intelligent Multi Dimensional Adaptive Trend Trading SystemPine Script · Trend following · 1h