This script is designed to display a modified version of a Hull Moving Average (HMA) on a trading chart, but with a twist: it allows you to view the HMA calculated on a different timeframe than the one currently displayed on your chart.
Here's the breakdown:
-
Timeframe Selection: The script starts by letting you choose which timeframe's HMA you want to see. You can select from options like 1-minute, 5-minute, 1-hour, daily, etc. If you don't choose a specific timeframe, it defaults to the current chart's timeframe.
-
HMA Calculation Setup: The script then takes your selected timeframe and sets up the parameters needed to calculate the Hull Moving Average. These parameters include:
- The period of the HMA, which essentially determines how many past data points are used to calculate the average.
- The price to be used (open, close, high, low, etc.)
- A displacement which basically defines how the hull moving average is shifted relative to the current bar.
-
Data Retrieval and Calculation: The core of the script involves retrieving historical data (prices) from the selected timeframe. It then calculates the Hull Moving Average based on these prices and using the user-defined parameters, just as any other Hull Moving Average indicator. It retrieves two sets of HMA values from another custom indicator named "Hull Trend".
-
Displaying the Results: Finally, the script plots these two sets of HMA values as lines on your current chart. These lines visually represent the Hull Moving Average calculated on the chosen timeframe, superimposed on your current chart's price action. The two lines are displayed in different colors (hot pink and aqua) to differentiate them.
/*-----------------------------+
| |
| Shared by www.Aptrafx.com |
| |
+------------------------------*/
//+------------------------------------------------------------------+
//| #MTF_HULL_TREND.mq4 |
//|------------------------------------------------------------------+
#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 HotPink
#property indicator_color2 Aqua
//---- input parameters
/*************************************************************************
PERIOD_M1 1
PERIOD_M5 5
PERIOD_M15 15
PERIOD_M30 30
PERIOD_H1 60
PERIOD_H4 240
PERIOD_D1 1440
PERIOD_W1 10080
PERIOD_MN1 43200
You must use the numeric value of the timeframe that you want to use
when you set the TimeFrame' value with the indicator inputs.
---------------------------------------*/
extern int TimeFrame = 0;
extern int HMA_Period=20;
extern double Price=PRICE_OPEN;
extern double Displacement=0;
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicator line
SetIndexStyle(0,DRAW_LINE,EMPTY,1);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_LINE,EMPTY,1);
SetIndexBuffer(1,ExtMapBuffer2);
//---- name for DataWindow and indicator subwindow label
switch(TimeFrame)
{
case 1 : string TimeFrameStr="Period_M1"; break;
case 5 : TimeFrameStr="Period_M5"; break;
case 15 : TimeFrameStr="Period_M15"; break;
case 30 : TimeFrameStr="Period_M30"; break;
case 60 : TimeFrameStr="Period_H1"; break;
case 240 : TimeFrameStr="Period_H4"; break;
case 1440 : TimeFrameStr="Period_D1"; break;
case 10080 : TimeFrameStr="Period_W1"; break;
case 43200 : TimeFrameStr="Period_MN1"; break;
default : TimeFrameStr="Current Timeframe";
}
IndicatorShortName("#MTF_HULL_TREND("+TimeFrameStr+")");
}
//----
return(0);
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
int start()
{
datetime TimeArray[];
int i,limit,y=0,counted_bars=IndicatorCounted();
// Plot defined time frame on to current time frame
ArrayCopySeries(TimeArray,MODE_TIME,Symbol(),TimeFrame);
limit= Bars-1;
for(i=0,y=0;i<limit;i++)
{
if (Time[i]<TimeArray[y]) y++;
/***********************************************************
Add your main indicator loop below. You can reference an existing
indicator with its iName or iCustom.
Rule 1: Add extern inputs above for all neccesary values
Rule 2: Use 'TimeFrame' for the indicator time frame
Rule 3: Use 'y' for your indicator's shift value
**********************************************************/
ExtMapBuffer1[i]=iCustom(Symbol(),TimeFrame,"Hull Trend",HMA_Period,Price,Displacement,2,y);
ExtMapBuffer2[i]=iCustom(Symbol(),TimeFrame,"Hull Trend",HMA_Period,Price,Displacement,3,y);
}
return(0);
}
//+------------------------------------------------------------------+
Comments
Markdown Formatting Guide
# H1
## H2
### H3
**bold text**
*italicized text*
[title](https://www.example.com)

`code`
```
code block
```
> blockquote
- Item 1
- Item 2
1. First item
2. Second item
---