# Learn how to design a trading system by Alligator

11 557 4

### Introduction

Here is a new article from our series about how to design a trading system based on the most popular technical indicators. In this article, we will learn in detail about the Alligator indicator by learning what it is, it measures, how we can calculate it, and how we can read and use it. Then we will create a trading system based on some simple strategies based on the main objective of this indicator. We will cover this indicator through the following topics:

Disclaimer: All information provided 'as is' only for educational purposes and is not prepared for trading purposes or advice. The information does not guarantee any kind of result. If you choose to use these materials on any of your trading accounts, you will do that at your own risk and you will be the only responsible.

### Alligator definition

The Alligator technical indicator is a trend-following, developed by Bill Williams. It is based on that trend is not the most time of the age of financial market instruments and it is only 15% to 30% of the time while it consumes the most of time ranging or sideways it takes about 85% to 70% of the time. So, we have a trend sometimes either uptrend or downtrend but most of the time we have ranging periods. If you want to learn more about trends, their types, and how we can identify them, you can read the topic of trend definition from my previous article it will be useful in this context. It uses some of Fibonacci numbers in the calculation the same as we will see as it uses three smoothed moving averages with a set of numbers five, eight, thirteen periods. As we said that the Alligator indicator consists of three smoothed moving averages, and they are the same as the following:

• The Alligator Jaw.
• The Alligator Teeth.
• The Alligator Lips.

We can calculate this indicator manually through the following steps:

The Alligator Jaw = SMMA (Median price, 13, 8)

The Alligator Teeth = SMA (Median price, 8, 5)

The Alligator Lips = SMMA (Median price, 5, 3)

Median Price = (High + Low)/2

Where:

SMMA = smoothed Moving Average

Median price = the median price of data

High = the highest price

Low = the lowest price

After the previous steps, we will get the Alligator indicator, but we do not need to calculate it manually as we have it as a built-in indicator in the MetaTrader 5 terminal and all we need to do is choose it from the available technical indicators the same as the following:

While Opening the MetaTrader 5 terminal, we will press Insert --> Indicators --> Bill Williams --> Alligator.

After that we will find the parameters of it the same as the following:

1 - the period of the Alligator Jaws.

2 - the horizontal shift of the Alligator Jaws.

3 - the period of the Alligator Teeth.

4 - the horizontal shift of the Alligator Teeth.

5 - the period of the Alligator Lips.

6 - the horizontal shift of the Alligator Lips.

7 - the method of smoothing.

8 - the usable price type.

Through the following window we can determine the style of the indicator:

1 - the color of the Jaws line.

2 - the type of the jaws line.

3 - the thickness of the jaws line.

4 - the color of the teeth line.

5 - the type of the teeth line.

6 - the thickness of the teeth line.

7 - the color of the lips line.

8 - the type of the lips line.

9 - the thickness of the lips line.

After determining all parameters and pressing "OK", we can find that the indicator is attached to the chart the same as the following:

As we can see in the previous chart we have the indicator inserted into the chart and we have three lines:

1 - Alligator Lips

2 - Alligator Teeth

3 - Alligator Jaws

We can read the indicator simply by observing the position of these lines from prices. If the price is above lips, teeth, then jaws, we can say the trend is up. If the price is below lips, teeth, then jaws, we can say that the trend is down. If the price is moving through the three lines, we can say that we have a sideways.

### Alligator strategy

There are many ways to use the Alligator indicator in trading, but I'll mention simple strategies that can be used based on the main idea of this topic for education and you must test them before using them in your real account to make sure that they will be profitable. You may find that you need to optimize mentioned strategies, and this is normal you can do that to reach the best formula that can be useful for your trading style.

Strategy one: Alligator Trend Identifier

Based on this strategy, we need to get signals of bullish and bearish signals based on specific conditions. If the lips value is greater than two values the teeth value and jaws value and at the same time the teeth value and the jaws value, it will be a bullish signal. In other case, if the lips value is lower than the teeth value and jaws value and at the same time the teeth value is lower than the jaws value, it will be a bearish signal.

lips > teeth value, lips > jaws value, and teeth > jaws value --> bullish

lips < teeth value, lips < jaws value, and teeth < jaws value --> bearish

Strategy two: Alligator Signals System

Based on this strategy, we need to get signals of buy and sell depending on the crossover between lips, teeth, and jaw values. If the lips value is greater than the teeth value and the jaw value, this will be a buy signal. In the other scenario, if the lips value is lower than the teeth and jaws value, it will be a sell signal.

lips > teeth value, lips > jaws value --> buy

lips < teeth value, lips < jaws value --> sell

Strategy three: Alligator Signals System Enhancement

Based on this strategy, we need to get signals of buy and sell based on the crossover between lips, teeth, and jaws after that the crossover between the closing price and the teeth value. If the lips line is lower than the teeth and the jaws then the closing price is greater than the teeth value, it will be a buy signal. In the other case, if the lips line is greater than the teeth and the jaws then the closing price is lower than the teeth value, it will be a sell signal.

lips < teeth value, lips < jaws value and closing price > teeth --> buy

lips > teeth value, lips > jaws value and closing price < teeth --> sell

### Alligator strategy blueprint

Now, we need to create a trading system based on mentioned strategies in the previous topic, and to do that we will design a step-by-step blueprint to help us create this trading system.

Strategy one: Alligator Trend Identifier

According to this strategy, we need to create a trading system that can be used to generate signals of bullish or bearish based on continuously checking for the following values:

• Lips value
• Teeth value
• Jaws value

We need the trading system to determine the positions of these values to generate suitable signals based on that. If the lips line is greater than teeth, lips greater than jaws, and teeth line is greater than the jaws, in this case, we need the trading system to return the following values as a comment on the chart:

• Bullish
• Jaws value = n
• teeth value = n
• lips value = n

In the other case, if the lips line is lower than the teeth line, the lips line is lower than the jaws line and at the same time, the teeth line is lower than the jaws line, in this case, we need the trading system to return the following values as a comment on the chart:

• Bearish
• Jaws value = n
• teeth value = n
• lips value = n

The following is a step-by-step blueprint of this trading system:

Strategy two: Alligator Signals System

According to this strategy, we need to create a trading system that can be used to generate signals of buy or sell based on continuously checking the following values to determine the positions of each one of them:

• Lips value
• Teeth value
• Jaws value

If the lips line is greater than the teeth value and at the same time, the lips line is greater than the jaws value, in this case, we need the trading system to return a comment on the chart with the following values:

• Jaws value = n
• teeth value = n
• lips value = n

In the other case, if the lips line is lower than the teeth value and at the same time, the lips line is lower than the jaws line, we need the trading system to return a comment on the chart as a signal with the following values:

• Sell
• Jaws value = n
• teeth value = n
• lips value = n

The following is a step-by-step blueprint of this trading system:

Strategy three: Alligator signals System Enhancement

According to this strategy, we need to create a trading system to generate buy and sell signals based on checking the following values to determine the position of each one of them:

• Lips value
• Teeth value
• Jaws value
• Closing price

If the lips value is lower than the teeth one, the lips line is lower than the jaws line and then, the closing price became above the teeth value, we need the trading system to return a comment on the chart as a signal with the following values:

• Lips value = n
• Teeth value = n
• Closing price = n
• Jaws value = n

If the lips line is greater than the teeth line, the lips line is higher than the jaws line and then, the closing price became below the teeth value, we need the trading system to return a comment on the chart as a signal with the following values:

• Sell
• Lips value = n
• Teeth value = n
• Closing price = n
• Jaws value = n

The following is a step-by-step blueprint of this trading system:

Now, we will create a trading system for each mentioned strategy to be executed in the MetaTrader 5 terminal to generate desired signals automatically. First, we will create a base trading system to generate a signal of the Alligator components values to use in our trading system. The following are for steps to create this type of system:

Creating arrays of each one of the Alligator components (Lips, Teeth, Jaws).

```   double jawsArray[];
double teethArray[];
double lipsArray[]; ```

Sorting data in these arrays by using the "ArraySetAsSeries" function. Its parameters:

• array[]
• flag
```   ArraySetAsSeries(jawsArray,true);
ArraySetAsSeries(teethArray,true);
ArraySetAsSeries(lipsArray,true);```

Defining the Alligator by using the "iAlligator" function. Its parameters:

• symbol: we will use (_Symbol) to be applied to the current symbol.
• period: we will use (_Period) to be applied to the current time frame.
• jaw_period: to determine the period of the calculation of jaws, we will use (13).
• jaw_shift: to determine the horizontal shift of jaws, we will use (8).
• teeth_period: to determine the period of the calculation of teeth, we will use (8).
• teeth_shift: to determine the horizontal shift of teeth, we will use (5).
• lips_period: to determine the period of the calculation of lips, we will use (5).
• lips_shift: to determine the horizontal shift of lips, we will use (3).
• ma_method: to determine the type of moving average, we will use(MODE_SMA).
• applied_price: to determine the type of price, we will use (PRICE_MEDIAN).
`int alligatorDef=iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);`

Defining data and storing results by using the "CopyBuffer" function. Its parameters:

• indicator_handle: to determine the indicator handle, we will use (alligatorDef).
• buffer_num: to determine the indicator buffer number, we will use (0 for jaws), (1 for teeth), and (2 for lips).
• start_pos: to determine the start position, we will determine (0).
• count: to determine the amount to copy, we will use (3).
• buffer[]: to determine the target array to copy, we will use (jawsArray, teethArray, lipsArray).
```   CopyBuffer(alligatorDef,0,0,3,jawsArray);
CopyBuffer(alligatorDef,1,0,3,teethArray);
CopyBuffer(alligatorDef,2,0,3,lipsArray);```

Getting values of three components.

```   double jawsValue=NormalizeDouble(jawsArray[0],5);
double teethValue=NormalizeDouble(teethArray[0],5);
double lipsValue=NormalizeDouble(lipsArray[0],5);```

Commenting with three components of the indicator.

```   Comment("jawsValue = ",jawsValue,"\n",
"teethValue = ",teethValue,"\n",
"lipsValue = ",lipsValue);```

The following is the full code to create this trading system:

```//+------------------------------------------------------------------+
//|                                      Simple Alligator System.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property version   "1.00"
//--------------------------------------------------------------------
void OnTick()
{
//creating price array
double jawsArray[];
double teethArray[];
double lipsArray[];
//Sorting data
ArraySetAsSeries(jawsArray,true);
ArraySetAsSeries(teethArray,true);
ArraySetAsSeries(lipsArray,true);
//define Alligator
int alligatorDef=iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);
//define data and store result
CopyBuffer(alligatorDef,0,0,3,jawsArray);
CopyBuffer(alligatorDef,1,0,3,teethArray);
CopyBuffer(alligatorDef,2,0,3,lipsArray);
//get value of current data
double jawsValue=NormalizeDouble(jawsArray[0],5);
double teethValue=NormalizeDouble(teethArray[0],5);
double lipsValue=NormalizeDouble(lipsArray[0],5);
//comment on the chart
Comment("jawsValue = ",jawsValue,"\n",
"teethValue = ",teethValue,"\n",
"lipsValue = ",lipsValue);
}
//+------------------------------------------------------------------+```

After compiling this code, we will find it in the navigator among Expert Advisors folder the same as the following:

By dragging and dropping it on the desired chart, we will find the window of this EA the same as the following:

After pressing "OK" after ticking next to "Allow Algo Trading", we will the EA attached to the chart the same as the following:

As we can on the previous chart in the top right corner that the EA is attached. Now, we're ready to receive signals. The following is an example from testing to check for generated signals.

As we can see in the previous chart, we have a comment on the top left corner with the following values:

Jaws value = n

teeth value = n

lips value = n

Strategy one: Alligator Trend Identifier

We can create a trading system based on this strategy the same as the following full code:

```//+------------------------------------------------------------------+
//|                                   Alligator Trend Identifier.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
{
//creating three arrays of Alligator components
double jawsArray[];
double teethArray[];
double lipsArray[];
//Sorting data
ArraySetAsSeries(jawsArray,true);
ArraySetAsSeries(teethArray,true);
ArraySetAsSeries(lipsArray,true);
//define Alligator
int alligatorDef=iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);
//define data and store result
CopyBuffer(alligatorDef,0,0,13,jawsArray);
CopyBuffer(alligatorDef,1,0,13,teethArray);
CopyBuffer(alligatorDef,2,0,13,lipsArray);
//get value of current data
double jawsValue=NormalizeDouble(jawsArray[0],5);
double teethValue=NormalizeDouble(teethArray[0],5);
double lipsValue=NormalizeDouble(lipsArray[0],5);
//conditions of strategy
if(lipsValue>teethValue && lipsValue>jawsValue && teethValue>jawsValue)
{
Comment("Bullish","\n",
"jawsValue = ",jawsValue,"\n",
"teethValue = ",teethValue,"\n",
"lipsValue = ",lipsValue);
}
if(lipsValue<teethValue && lipsValue<jawsValue && teethValue<jawsValue)
{
Comment("Bearish","\n",
"jawsValue = ",jawsValue,"\n",
"teethValue = ",teethValue,"\n",
"lipsValue = ",lipsValue);
}
}
//+------------------------------------------------------------------+```

Differences in this code.

Conditions of the strategy, in case of bullish:

```   if(lipsValue>teethValue && lipsValue>jawsValue && teethValue>jawsValue)
{
Comment("Bullish","\n",
"jawsValue = ",jawsValue,"\n",
"teethValue = ",teethValue,"\n",
"lipsValue = ",lipsValue);
}```

In case of bearish:

```   if(lipsValue<teethValue && lipsValue<jawsValue && teethValue<jawsValue)
{
Comment("Bearish","\n",
"jawsValue = ",jawsValue,"\n",
"teethValue = ",teethValue,"\n",
"lipsValue = ",lipsValue);
}```

After compiling this code, and executing the created expert the same as we learned, we will find this EA is attached to the chart the same as the following:

As we can see in the previous chart that we have the EA is attached to the chart in the top right corner and we're ready to get our bullish or bearish signals based on this strategy. The following are examples of these signals:

In case of bullish:

As we can see in the previous chart, we  have a comment as a signal on the top right corner with the following values:

• Bullish
• Jaws value = n
• teeth value = n
• lips value = n
We have three lines moving below prices. So, we got a bullish signal.

In case of bearish:

As we can see in the previous chart, we  have a comment as a signal of bearish on the top right corner with the following values:

• Bearish
• Jaws value = n
• teeth value = n
• lips value = n

We have three lines moving above prices, So, we got a bearish signal.

Strategy two: Alligator Signals System

The following code is for creating a trading system based on this strategy:

```//+------------------------------------------------------------------+
//|                                    Alligator Signals System .mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
{
//creating three arrays of Alligator components
double jawsArray[];
double teethArray[];
double lipsArray[];
//Sorting data
ArraySetAsSeries(jawsArray,true);
ArraySetAsSeries(teethArray,true);
ArraySetAsSeries(lipsArray,true);
//define Alligator
int alligatorDef=iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);
//define data and store result
CopyBuffer(alligatorDef,0,0,13,jawsArray);
CopyBuffer(alligatorDef,1,0,13,teethArray);
CopyBuffer(alligatorDef,2,0,13,lipsArray);
//get value of current data
double jawsValue=NormalizeDouble(jawsArray[0],5);
double teethValue=NormalizeDouble(teethArray[0],5);
double lipsValue=NormalizeDouble(lipsArray[0],5);
//conditions of strategy
if(lipsValue>teethValue && lipsValue>jawsValue)
{
"jawsValue = ",jawsValue,"\n",
"teethValue = ",teethValue,"\n",
"lipsValue = ",lipsValue);
}
if(lipsValue<teethValue && lipsValue<jawsValue)
{
Comment("Sell","\n",
"jawsValue = ",jawsValue,"\n",
"teethValue = ",teethValue,"\n",
"lipsValue = ",lipsValue);
}
}
//+------------------------------------------------------------------+```

Differences in this code.

Conditions of this strategy.

```   if(lipsValue>teethValue && lipsValue>jawsValue)
{
"jawsValue = ",jawsValue,"\n",
"teethValue = ",teethValue,"\n",
"lipsValue = ",lipsValue);
}```

In case of sell signal:

```   if(lipsValue<teethValue && lipsValue<jawsValue)
{
Comment("Sell","\n",
"jawsValue = ",jawsValue,"\n",
"teethValue = ",teethValue,"\n",
"lipsValue = ",lipsValue);
}```

After compiling this code and executing it in the trading terminal, we can find it is attached to the chart the same as the following:

We see on the top right corner in the previous chart that the EA is attached and we're ready to receive our buy or sell signals based on this strategy the following are for examples from testing.

As we can see that we have our desired signal with the following values:

• Jaws value = n
• teeth value = n
• lips value = n
We have three lines moving below prices, So, we got a buy signal.

In case of sell signal:

We have our desired signal with the following values:

• Sell
• Jaws value = n
• teeth value = n
• lips value = n

We have three lines that are moving above prices, So, we got a sell signal.

Strategy three: Alligator Signals System Enhancement

The following is for the full code to create a trading system based on this strategy:

```//+------------------------------------------------------------------+
//|                         Alligator Signals System Enhancement.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
{
//creating three arrays of Alligator components
double jawsArray[];
double teethArray[];
double lipsArray[];
MqlRates pArray[];
//Sorting data
ArraySetAsSeries(jawsArray,true);
ArraySetAsSeries(teethArray,true);
ArraySetAsSeries(lipsArray,true);
int Data=CopyRates(_Symbol,_Period,0,1,pArray);
//define Alligator
int alligatorDef=iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);
//define data and store result
CopyBuffer(alligatorDef,0,0,13,jawsArray);
CopyBuffer(alligatorDef,1,0,13,teethArray);
CopyBuffer(alligatorDef,2,0,13,lipsArray);
//get value of current data
double jawsValue=NormalizeDouble(jawsArray[0],5);
double teethValue=NormalizeDouble(teethArray[0],5);
double lipsValue=NormalizeDouble(lipsArray[0],5);
//conditions of strategy
if(lipsValue<teethValue && lipsValue<jawsValue && pArray[0].close>teethValue)
{
"jawsValue = ",jawsValue,"\n",
"teethValue = ",teethValue,"\n",
"closingPrice = ",pArray[0].close,"\n",
"lipsValue = ",lipsValue);
}
if(lipsValue>teethValue && lipsValue>jawsValue && pArray[0].close<teethValue)
{
Comment("Sell","\n",
"jawsValue = ",jawsValue,"\n",
"teethValue = ",teethValue,"\n",
"closingPrice = ",pArray[0].close,"\n",
"lipsValue = ",lipsValue);
}
}
//+------------------------------------------------------------------+```

Differences in this code.

Creating one more array for prices by using the "MqlRates" function to store information about prices, volumes, and spread.

`MqlRates pArray[];`

Getting the historical data of MqlRates by using the "CopyRates". Its parameters:

• symbol_name: to determine the symbol name, we will use (_Symbol).
• timeframe: to determine the period, we will use (_period).
• start_pos: to determine the start position, we will use (0).
• count: to determine the data count to copy, we will use (1).
• rates_array[]: to determine the target array to copy, we will use (pArray).
`int Data=CopyRates(_Symbol,_Period,0,1,pArray);`

Conditions of the strategy.

```   if(lipsValue<teethValue && lipsValue<jawsValue && pArray[0].close>teethValue)
{
"jawsValue = ",jawsValue,"\n",
"teethValue = ",teethValue,"\n",
"closingPrice = ",pArray[0].close,"\n",
"lipsValue = ",lipsValue);
}```

In case of sell signal:

```   if(lipsValue>teethValue && lipsValue>jawsValue && pArray[0].close<teethValue)
{
Comment("Sell","\n",
"jawsValue = ",jawsValue,"\n",
"teethValue = ",teethValue,"\n",
"closingPrice = ",pArray[0].close,"\n",
"lipsValue = ",lipsValue);
}```

After compiling this code and executing the EA we will find it attached to the chart the same as the following to get our buy and sell signals.

We have the EA attached in the top right corner and we can receive our desired signals the following are examples from testing.

We have a comment in the top left corner with the following values:

• Jaws value = n
• teeth value = n
• Closing price = n
• lips value = n
As three lines are moving above prices then we can find that the closing price is closed above the Alligator teeth line.

In case of sell signal:

We have a comment as a signal in the top left corner:

• Sell
• Jaws value = n
• teeth value = n
• Closing price = n
• lips value = n

As three lines are moving below prices then we can find that the closing price is closed below the Alligator teeth line.

### Conclusion

We learned in this article in detail about the Alligator technical indicator which can be used to confirm the trend in addition to generating buy and sell signals. We learned how we can calculate it manually, and how we can use based on the simple mentioned strategies:

• Alligator Trend Identifier: To generate bullish or bearish signals based on the position of the three lines of Alligator (Lips, Teeth, and Jaws).
• Alligator Signals System: To generate buy or sell signals by classical method crossover based on the crossover between the three lines of the indicator.
• Alligator Signals System Enhancement: To generate buy or sell signals by another method to get these signals earlier based on the position of three lines of the indicators and the crossover between the closing price and the teeth.

#### Other articles by this author

Last comments | Go to discussion (4)
| 12 Oct 2022 at 20:59
MetaQuotes:

New article Learn how to design a trading system by Alligator has been published:

Author: Mohamed Abdelmaaboud

Hi thanks for this trading tutorial, where do you actually begin when designing this system, I am fairly new in trading
| 15 Nov 2022 at 09:33

Hi,

I found that this link of your article is not valid: Writing MQL5 code in MetaEditor. One get a 404 error.

Beside that this is wrong:

We have three lines moving below prices, So, we got a bearish signal.

We have three lines moving below prices, So, we got a bearish signal.

It should be (imho):

We have three lines moving above prices, so, we got a bearish signal

| 15 Nov 2022 at 14:30
Carl Schreiber #:

Hi,

I found that this link of your article is not valid: Writing MQL5 code in MetaEditor. One get a 404 error.

Beside that this is wrong:

We have three lines moving below prices, So, we got a bearish signal.

It should be (imho):

Thanks for your note and I will correct them.
| 23 Jan 2023 at 03:37
Mohamed Abdelmaaboud #:
Thanks for your note and I will correct them.
it still is 404
DoEasy. Controls (Part 14): New algorithm for naming graphical elements. Continuing work on the TabControl WinForms object
In this article, I will create a new algorithm for naming all graphical elements meant for building custom graphics, as well as continue developing the TabControl WinForms object.
DoEasy. Controls (Part 13): Optimizing interaction of WinForms objects with the mouse, starting the development of the TabControl WinForms object
In this article, I will fix and optimize handling the appearance of WinForms objects after moving the mouse cursor away from the object, as well as start the development of the TabControl WinForms object.
Neural networks made easy (Part 23): Building a tool for Transfer Learning
In this series of articles, we have already mentioned Transfer Learning more than once. However, this was only mentioning. in this article, I suggest filling this gap and taking a closer look at Transfer Learning.
Neural networks made easy (Part 22): Unsupervised learning of recurrent models
We continue to study unsupervised learning algorithms. This time I suggest that we discuss the features of autoencoders when applied to recurrent model training.