Dual Moving Average Strategy for NQ Futures: A Systematic Approach
- FutAlgo
- Jan 31
- 2 min read
Updated: Feb 24
Introduction
This article presents a simple, yet robust trading strategy developed for the Nasdaq-100 futures (NQ) market in early 2023, utilizing two distinct moving average systems. The strategy has demonstrated consistent performance since 2017, with particularly strong results during the past 2 years.
Strategy Overview
The system employs two independent long-only trading systems operating on 3-hour charts. Each system utilizes a unique combination of moving averages to identify favorable entry and exit points in trending markets.
Key Performance Metrics (2017-Present)
Total Net Profit: $425,000
Profit Factor: 2.03
Win Rate: 75%
Maximum Drawdown: $37,000
Live Trading Performance: Consistent with backtesting results (1.5 years)


Technical Framework
System Components
Primary Trading System (Long1)
Utilizes two moving averages for signal generation
Implements price-based entry filters
Features dynamic exit conditions based on market behavior
Secondary Trading System (Long2)
Employs three moving averages for enhanced signal confirmation
Includes sophisticated entry criteria based on price compression
Contains protective exit mechanisms
Risk Management
Each system operates independently to diversify entry points
Built-in position management rules prevent overlapping trades
Incorporates trailing stop mechanisms based on previous price action
Maximum drawdown control through systematic position sizing
Implementation Considerations
Market Selection
Optimized for NQ futures
3-hour timeframe provides balance between noise and trend capture
Suitable for swing trading approaches
Trade Management
Clear entry and exit rules based on moving average crossovers
Price action confirmation required for trade execution
Systematic approach to position management
Setup Requirements
TradeStation or MultiCharts
3-hour NQ bars
1000 max bars back
Free Code
Inputs:
// Long1 Settings
ma1_long1(276),
ma2_long1(11),
lowerClose1(true),
tradeLong1(true),
// Long2 Settings
ma1_long2(588),
ma2_long2(4),
ma3_long2(862),
lowerClose2(true),
tradeLong2(true);
Variables:
ma_long1(0),
ema_short1(0),
ma_long2(0),
ema_short2(0),
maA_long2(0),
buyCondition1(false),
sellCondition1(false),
buyCondition2(false),
sellCondition2(false);
// Calculate indicator values for Long1
ma_long1 = Average(Close, ma1_long1);
ema_short1 = XAverage(Close, ma2_long1);
// Calculate indicator values for Long2
ma_long2 = Average(Close, ma1_long2);
ema_short2 = XAverage(Close, ma2_long2);
maA_long2 = XAverage(Close, ma3_long2);
// Buy/sell conditions for Long1
buyCondition1 = Close > ma_long1 and Close < ema_short1 and MarketPosition = 0;
sellCondition1 = Close > ema_short1 and MarketPosition > 0 and (not lowerClose1 or Close < Low[1]);
// Buy/sell conditions for Long2
buyCondition2 = Close < ma_long2 and Close > maA_long2 and Close < ema_short2 and MarketPosition = 0;
sellCondition2 = Close > ema_short2 and MarketPosition > 0 and (not lowerClose2 or Close < Low[1]);
// Enter/exit positions for Long1
If tradeLong1 and buyCondition1 then
Buy ("Long1") next bar at market;
If tradeLong1 and sellCondition1 then
Sell ("Exit Long1") next bar at market;
// Enter/exit positions for Long2
If tradeLong2 and buyCondition2 then
Buy ("Long2") next bar at market;
If tradeLong2 and sellCondition2 then
Sell ("Exit Long2") next bar at market;
You can also download the script here: