Introduction to AMA Standalone Expert Advisor

In this tutorial, we are going to create an Expert Advisor in MQL5 that utilizes the Adaptive Moving Average (AMA) for generating trading signals. The AMA is particularly useful for capturing trends in the market due to its sensitivity to price movements. We’ll explore how to implement this indicator to determine buy and sell signals based on its interaction with the price.

Setting Up in MetaEditor

To begin, launch MetaEditor by clicking the little icon or pressing F4 on your keyboard. Once opened, navigate to: “File/New/Expert Advisor (template)” and name your file “SimpleAMAStandaloneEA”. Click “Continue” until you can finish and create the file. Initially, clear any pre-existing code above the OnTick function and remove the comment lines to prepare our workspace.

Including Essential Files and Initializing Variables

Start by including the Trade.mqh file, which provides functionalities necessary for trade operations. Create an instance of the CTrade class named trade, which we will use later for executing trades.

Copy Code

#include <Trade.mqh> CTrade trade;

Calculating Ask and Bid Prices

Within the OnTick function, calculate the current Ask and Bid prices using SymbolInfoDouble. Normalize these prices using NormalizeDouble and _Digits to ensure they adhere to the precision required by the trading server.

Copy Code

double ask = NormalizeDouble(SymbolInfoDouble(_Symbol, SYMBOL_ASK), _Digits); double bid = NormalizeDouble(SymbolInfoDouble(_Symbol, SYMBOL_BID), _Digits);

Setting Up Price Data Arrays

Define a price array using MqlRates and sort it with ArraySetAsSeries. Populate this array with price data using CopyRates.

Copy Code

MqlRates PriceArray[]; ArraySetAsSeries(PriceArray, true); CopyRates(_Symbol, _Period, 0, 3, PriceArray);

Implementing the AMA Indicator

Utilize the iAMA function to define the AMA based on its parameters. Fill an array with the AMA data using CopyBuffer.

Copy Code

int amaDefinition = iAMA(_Symbol, _Period, 10, 2, 0, PRICE_CLOSE); double EAArray[]; ArraySetAsSeries(EAArray, true); CopyBuffer(amaDefinition, 0, 0, 3, EAArray);

Calculating and Assigning Signals

Determine the current AMA value and compare it with the close price of the last candle to assign buy or sell signals.

Copy Code

double currentAMA = EAArray[0]; string signal = ""; if(currentAMA > PriceArray[1].close) {     signal = "sell"; } else if(currentAMA < PriceArray[1].close) {     signal = "buy"; }

Executing Trades Based on Signals

Execute trades based on the calculated signals, ensuring no existing positions conflict with the new signal.

Copy Code

if(signal == "sell" && PositionsTotal() == 0) {     trade.Sell(0.1, _Symbol, bid, 0, 0, "AMA Sell"); } else if(signal == "buy" && PositionsTotal() == 0) {     trade.Buy(0.1, _Symbol, ask, 0, 0, "AMA Buy"); }

Displaying Signal on Chart and Testing

Use the Comment function to display the current trading signal on the chart. Compile the code by pressing F7 and test the Expert Advisor in MetaTrader by pressing CTRL+R and selecting the “SimpleAMAStandaloneEA”.


By following this tutorial, you have created an Expert Advisor that trades based on the Adaptive Moving Average. This EA can help you understand how to implement and test trading strategies in MQL5. If you found the pace fast or need more detailed explanations, consider exploring our Premium course or reviewing basic videos first.

Thank you for following along, and I look forward to seeing you in the next tutorial where we continue exploring the capabilities of MQL5 for automated trading.