Hull Moving Average: Een Handige Indicator voor MetaTrader 5

Mike 2023.09.21 03:55 16 0 0
Bijlage

In deze blogpost bespreken we de Hull Moving Average (HMA), een waardevolle indicator voor MetaTrader 5. Zelf heb ik besloten om mijn eigen versie van de HMA te implementeren, omdat ik niet helemaal tevreden was met de bestaande versies. De indicator heeft vier invoerparameters:

  1. InpHmaPeriod = 20
  2. InpColorKind = single_color
  3. InpColorIndex = color_index_3
  4. InpMaxHistoryBars = 240

Deze parameters zijn vrij eenvoudig te begrijpen. De enumeratie ENUM_COLOR_KIND stelt je in staat om te kiezen tussen een enkele kleur of meerdere kleuren. Standaard is dit ingesteld op een enkele kleur. Als je voor de meerkleurige optie kiest, heeft de Hull MA verschillende kleuren voor stijgende en dalende waarden. In de modus met één kleur bepaalt ENUM_COLOR_INDEX de kleur van de Hull MA. In de meerkleurige modus is de standaardkleur grijs, met groen voor stijgende waarden en rood voor dalende waarden. Dit kun je zien in de onderstaande afbeeldingen.

Inputs

Available colors

Hier is de code voor de indicator:

//+------------------------------------------------------------------+
//| MelzHull.mq5 |
//| Copyright 2022, wm1@gmx.de |
//| https://melz.one |
//+------------------------------------------------------------------+
/*
=== Mijn Hull Moving Average implementatie
In mijn indicator kun je kiezen tussen enkele en meerdere kleuren voor de indicatorlijn.
*/
enum ENUM_COLOR_KIND { // enkele of afwisselende kleur
single_color,
multi_color
};
enum ENUM_COLOR_INDEX { // index van indicator_color1 kleuren
color_index_0,
color_index_1,
color_index_2,
color_index_3,
color_index_4,
color_index_5,
color_index_6
};
#property copyright "Copyright 2022 by W. Melz, wm1@gmx.de"
#property link "https://melz.one"
#property version "1.00"
#property description "Implementatie van mijn Hull Moving Average"
#property indicator_chart_window // draw in chart window
#property indicator_buffers 4 // buffers voor: fullWMA, halfWMA, vHull, cHull
#property indicator_plots 1 // plot maar één lijn
#property indicator_type1 DRAW_COLOR_LINE // teken als kleur lijn
#property indicator_color1 clrGray, clrGreen, clrRed, clrBlue, clrGreenYellow, clrDodgerBlue, clrFireBrick
#property indicator_width1 1 // lijn breedte
#property indicator_label1 "HMA" // indicator naam

//--- invoerparameters
input int InpHmaPeriod = 20; // periode van de indicator, standaard 20
input ENUM_COLOR_KIND InpColorKind = single_color; // soort indicator kleur, enkel- of meerkleurig
input ENUM_COLOR_INDEX InpColorIndex = color_index_3; // stel kleur in van de enkelkleurige indicator
input int InpMaxHistoryBars = 240; // bereken historische bars, standaard 240, niet meer

//--- indicatorbuffers
double valueBuffer[]; // sla Hull indicator waarden op
double colorBuffer[]; // sla Hull indicator kleur op bij bar
double fullWMABuffer[]; // sla berekening van WMA volledige periode op
double halfWMABuffer[]; // sla berekening van de WMA halve periode op

//--- Globale variabelen van de indicator
int hmaPeriod, fullPeriod, halfPeriod, sqrtPeriod, maxHistoryBars; // sla invoerwaarde of standaardwaarde op

//+------------------------------------------------------------------+
//| Aangepaste initialisatiefunctie van de indicator |
//+------------------------------------------------------------------+
int OnInit() {
ENUM_INIT_RETCODE result = checkInput(); // controleer op correcte invoerparameters
SetIndexBuffer(0,valueBuffer,INDICATOR_DATA); // sla indicatorbuffer mapping op
SetIndexBuffer(1,colorBuffer,INDICATOR_COLOR_INDEX); // sla kleur van indicatorkaars op
SetIndexBuffer(2,fullWMABuffer,INDICATOR_CALCULATIONS); // sla resultaat van fullWMA berekening op
SetIndexBuffer(3,halfWMABuffer,INDICATOR_CALCULATIONS); // sla resultaat van halfWMA berekening op
IndicatorSetInteger(INDICATOR_DIGITS,_Digits); // stel indicator cijfers in
string shortName = StringFormat("HMA(%d)",hmaPeriod); // naam voor DataWindow en label van de indicator subvenster
IndicatorSetString(INDICATOR_SHORTNAME,shortName);
PlotIndexSetString(0,PLOT_LABEL,shortName);
fullPeriod = hmaPeriod; // periode van invoer
halfPeriod = fullPeriod / 2; // bereken halve periode
sqrtPeriod = (int)round(sqrt((double)fullPeriod)); // bereken vierkantswortel van periode
return(result); // succes of falen, init voltooid
}
//+------------------------------------------------------------------+

Ik hoop dat je er veel plezier aan beleeft!

Lijst
Reactie 0