MetaTrader5
Hull Moving Average: Indikator Unggulan untuk MetaTrader 5
Halo, para trader! Kali ini kita akan membahas tentang Hull Moving Average (HMA), sebuah indikator yang sangat berguna untuk analisis teknikal di MetaTrader 5. Saya pribadi tidak memahami sumber dari implementasi HMA lainnya, jadi saya memutuskan untuk membuatnya sendiri. Indikator ini memiliki empat parameter masukan yang bisa disesuaikan:InpHmaPeriod = 20InpColorKind = single_colorInpColorIndex = color_index_3InpMaxHistoryBars = 240Parameter ini cukup jelas. Enumeration ENUM_COLOR_KIND berguna untuk memilih antara warna tunggal atau warna ganda, dengan default adalah warna tunggal. Pada mode warna ganda, HMA memiliki warna berbeda untuk nilai naik dan turun. Pada mode warna tunggal, ENUM_COLOR_INDEX mengatur warna tunggal dari HMA. Di mode warna ganda, warna default adalah abu-abu. Ketika tren naik, warnanya hijau, dan ketika tren turun, warnanya merah. Anda bisa melihatnya pada gambar berikut.Berikut adalah kode untuk indikator ini://+------------------------------------------------------------------+
//| MelzHull.mq5 |
//| Copyright 2022, wm1@gmx.de |
//| https://melz.one |
//+------------------------------------------------------------------+
/*
=== Implementasi Hull Moving Average saya
Di indikator ini, Anda dapat memilih antara warna tunggal dan warna ganda untuk garis indikator.
*/
enum ENUM_COLOR_KIND { // warna tunggal atau bergantian
single_color,
multi_color
};
enum ENUM_COLOR_INDEX { // indeks warna indikator
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 "Implementasi Hull Moving Average saya"
//--- pengaturan indikator
#property indicator_chart_window // gambar di jendela chart
#property indicator_buffers 4 // buffer untuk: fullWMA, halfWMA, vHull, cHull
#property indicator_plots 1 // hanya gambarkan satu garis
#property indicator_type1 DRAW_COLOR_LINE // gambarkan sebagai garis warna
// indeks warna yang dapat dipilih: 0 1 2 3 4 5 6, silakan tambahkan daftar hingga 64 warna
#property indicator_color1 clrGray,clrGreen,clrRed,clrBlue,clrGreenYellow,clrDodgerBlue,clrFireBrick
#property indicator_width1 1 // lebar garis
#property indicator_label1 "HMA" // nama indikator
//--- parameter masukan
input int InpHmaPeriod = 20; // periode indikator, default 20
input ENUM_COLOR_KIND InpColorKind = single_color; // jenis warna indikator, warna tunggal atau ganda
input ENUM_COLOR_INDEX InpColorIndex = color_index_3; // atur warna indikator dengan warna tunggal
input int InpMaxHistoryBars = 240; // hitung bar secara historis, default 240, tidak lebih
//--- buffer indikator
double valueBuffer[]; // simpan nilai indikator Hull
double colorBuffer[]; // simpan warna indikator Hull pada bar
double fullWMABuffer[]; // simpan perhitungan WMA periode penuh
double halfWMABuffer[]; // simpan perhitungan WMA periode setengah
//--- Variabel global indikator
int hmaPeriod, fullPeriod, halfPeriod, sqrtPeriod, maxHistoryBars; // simpan nilai input atau nilai default
//+------------------------------------------------------------------+
//| Fungsi inisialisasi indikator kustom |
//+------------------------------------------------------------------+
int OnInit() {
ENUM_INIT_RETCODE result = checkInput(); // periksa parameter masukan yang benar
SetIndexBuffer(0,valueBuffer,INDICATOR_DATA); // simpan pemetaan buffer indikator
SetIndexBuffer(1,colorBuffer,INDICATOR_COLOR_INDEX); // simpan warna indikator lilin
SetIndexBuffer(2,fullWMABuffer,INDICATOR_CALCULATIONS); // simpan hasil perhitungan fullWMA
SetIndexBuffer(3,halfWMABuffer,INDICATOR_CALCULATIONS); // simpan hasil perhitungan halfWMA
IndicatorSetInteger(INDICATOR_DIGITS,_Digits); // atur digit indikator
string shortName = StringFormat("HMA(%d)",hmaPeriod); // nama untuk DataWindow dan label subwindow indikator
IndicatorSetString(INDICATOR_SHORTNAME,shortName);
PlotIndexSetString(0,PLOT_LABEL,shortName);
// hitung nilai global untuk indikator
fullPeriod = hmaPeriod; // periode dari input
halfPeriod = fullPeriod / 2; // hitung periode setengah
sqrtPeriod = (int)round(sqrt((double)fullPeriod)); // hitung akar kuadrat dari periode
return(result); // sukses atau gagal, inisialisasi selesai
}Selamat menggunakan indikator ini!
2023.09.21