Strategy vault / Trend following
Dual Moving Average Crossover Arrow Strategy
This strategy identifies buying and selling signals by calculating the crossover of dual moving averages of the MACD indicator. It plots arrows on the chart to indicate trading signals.

Overview
This strategy identifies buying and selling signals by calculating the crossover of dual moving averages of the MACD indicator. It plots arrows on the chart to indicate trading signals.
Principles
The strategy first calculates the fast line (12-period EMA), slow line (26-period EMA) and MACD difference. It then determines long and short signals based on the crossover of the fast and slow lines, as well as the positive/negative value of the MACD difference:
- When the fast line crosses above the slow line (golden cross) and the MACD difference crosses above 0, it is a buy signal
- When the fast line crosses below the slow line (death cross) and the MACD difference crosses below 0, it is a sell signal
To filter out false signals, the code also checks the signal of the previous candlestick. The current signal is only triggered if the previous candlestick has an opposite signal (buy vs sell or vice versa).
In addition, arrow shapes are plotted on the chart to indicate buying and selling signals.
Advantages
The advantages of this strategy include:
- Using dual moving average crossover helps identify trends and filter out market noise
- Incorporating MACD difference avoids missing trades and false signals
- Arrows clearly indicate entries and exits
- Simple and easy-to-understand rules facilitate replication
Risks and Solutions
Some risks of this strategy:
- Crossovers may generate false signals and cause over-trading. Parameters can be adjusted or extra filters added to reduce fake signals.
- Unable to discern rangings in a trend, potentially leading to losses. Adding trend indicators like ADX can avoid this.
- Fixed rules cannot adapt to changing markets. Machine learning can potentially optimize this.
Enhancement Opportunities
Some ways to improve the strategy:
- Test different parameter combinations to find optimal settings for the fast line, slow line and MACD
- Add extra entry conditions like volume breakouts to filter signals
- Incorporate stop loss to control single trade loss
- Use volatility indicators like VIX to gauge risk appetite
- Try machine learning models instead of fixed rules to create adaptive optimization
Summary
The dual moving average crossover arrow strategy is fairly simple and practical. By using crossover of two moving averages and MACD difference filtering, it identifies entries and exits during intermediate and long term trends, avoiding missing price reversals. The arrow signals also provide clear operation guidance. Further improvements in stability and profitability can be achieved through parameter tuning, extra filters and adaptive optimization.
Source Pine Script
/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
//Daniels stolen code
strategy(shorttitle="Daniels Stolen Code", title="Daniels Stolen Code", overlay=true, calc_on_order_fills=true, pyramiding=0)
//Define MACD Variables
fast = 12, slow = 26
fastMACD = ema(hlc3, fast)
slowMACD = ema(hlc3, slow)
macd = fastMACD - slowMACD
signal = sma(macd, 9)
hist = macd - signal
currMacd = hist[0]
prevMacd = hist[1]
currPrice = hl2[0]
prevPrice = hl2[1]
buy = currPrice > prevPrice and currMacd > prevMacd
sell = currPrice < prevPrice and currMacd < prevMacd
neutral = (currPrice < prevPrice and currMacd > prevMacd) or (currPrice > prevPrice and currMacd < prevMacd)
//Plot Arrows
timetobuy = buy==1 and (sell[1]==1 or (neutral[1]==1 and sell[2]==1) or (neutral[1]==1 and neutral[2]==1 and sell[3]==1) or (neutral[1]==1 and neutral[2]==1 and neutral[3]==1 and sell[4]==1) or (neutral[1]==1 and neutral[2]==1 and neutral[3]==1 and neutral[4]==1 and sell[5]==1) or (neutral[1]==1 and neutral[2]==1 and neutral[3]==1 and neutral[4]==1 and neutral[5]==1 and sell[6]==1))
timetosell = sell==1 and (buy[1]==1 or (neutral[1]==1 and buy[2]==1) or (neutral[1]==1 and neutral[2]==1 and buy[3]==1) or (neutral[1]==1 and neutral[2]==1 and neutral[3]==1 and buy[4]==1) or (neutral[1]==1 and neutral[2]==1 and neutral[3]==1 and neutral[4]==1 and buy[5]==1) or (neutral[1]==1 and neutral[2]==1 and neutral[3]==1 and neutral[4]==1 and neutral[5]==1 and buy[6]==1))
plotshape(timetobuy, color=blue, location=location.belowbar, style=shape.arrowup)
plotshape(timetosell, color=red, location=location.abovebar, style=shape.arrowdown)
//plotshape(neutral, color=black, location=location.belowbar, style=shape.circle)
//Test Strategy
// strategy.entry("long", true, 1, when = timetobuy and time > timestamp(2017, 01, 01, 01, 01)) // buy by market if current open great then previous high
// strategy.close("long", when = timetosell and time > timestamp(2017, 01, 01, 01, 01))
strategy.order("buy", true, 1, when=timetobuy==1 and time > timestamp(2019, 01, 01, 01, 01))
strategy.order("sell", false, 1, when=timetosell==1 and time > timestamp(2019, 01, 01, 01, 01))
// strategy.entry(id = "Short", long = false, when = enterShort())
// strategy.close(id = "Short", when = exitShort())
//strategy.entry("long", true, 1, when = open > high[1]) // enter long by market if current open great then previous high
// strategy.exit("exit", "long", profit = 10, loss = 5) // gePublished by ChaoZhang on the FMZ strategy square · last modified 2023-11-21. 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/Dual-Moving-Average-Crossover-Arrow-Strategy.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
- EMA SMA Multi Indicator Comprehensive Trend Following StrategyPine Script · Trend following · 1h
- Multi Indicator Dynamic Trend Following Strategy Based on EMA and SMAPine Script · Trend following · 1d
- Dual EMA Crossover Trend Following Strategy with ATR and ADX FiltersPine Script · Trend following · 1d
- Dazzling Bolts Trend Following StrategyPine Script · Trend following · 2h
- Multi Timeframe Trend Trading Strategy Based on MACD ADX and EMA200Pine Script · Trend following · 1h
- Multi Timeframe Volume and Trend Confluence Trading StrategyPine Script · Trend following · 1d