MetaTrader5
Hull Moving Average: Panduan Lengkap untuk MetaTrader 5
Hai rakan-rakan trader! Hari ini kita akan bercakap tentang satu indikator yang menarik, iaitu Hull Moving Average (HMA) dan bagaimana cara untuk menggunakannya dalam MetaTrader 5. Saya tidak begitu memahami sumber implementasi HMA yang lain, jadi saya memutuskan untuk melaksanakannya sendiri. Indikator ini mempunyai empat parameter input yang perlu kita ketahui: InpHmaPeriod = 20 InpColorKind = single_color InpColorIndex = color_index_3 InpMaxHistoryBars = 240 Parameter ini agak jelas dan mudah untuk difahami. ENUM_COLOR_KIND membolehkan kita memilih antara warna tunggal atau pelbagai warna. Secara lalainya, ia adalah warna tunggal. Dalam mod pelbagai warna, HMA mempunyai warna berbeza untuk nilai yang naik dan turun. Jika kita menggunakan mod warna tunggal, ENUM_COLOR_INDEX menetapkan warna tunggal untuk HMA. Dalam mod pelbagai warna, warna lalai adalah kelabu. Jika HMA naik, warna akan menjadi hijau dan jika turun, ia menjadi merah. Anda boleh melihatnya dalam gambar di bawah: Berikut adalah kod untuk indikator ini: //+------------------------------------------------------------------+
//| MelzHull.mq5 |
//| Copyright 2022, wm1@gmx.de |
//| https://melz.one |
//+------------------------------------------------------------------+
/*
=== Implementasi Hull Moving Average saya
Dalam indikator saya, anda boleh memilih antara warna tunggal atau pelbagai untuk garis indikator.
*/
enum ENUM_COLOR_KIND { // warna tunggal atau pelbagai
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 oleh W. Melz, wm1@gmx.de"
#property link "https://melz.one"
#property version "1.00"
#property description "Implementasi Hull Moving Average saya"
//--- tetapan indikator
#property indicator_chart_window // lukis dalam tetingkap carta
#property indicator_buffers 4 // penampan untuk: fullWMA, halfWMA, vHull, cHull
#property indicator_plots 1 // plot hanya satu garis
#property indicator_type1 DRAW_COLOR_LINE // lukis sebagai garis berwarna
// indeks warna untuk dipilih dari: 0 1 2 3 4 5 6, sila tambah senarai sehingga 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 input
input int InpHmaPeriod = 20; // periode indikator, lalai 20
input ENUM_COLOR_KIND InpColorKind = single_color; // jenis warna indikator, warna tunggal atau pelbagai
input ENUM_COLOR_INDEX InpColorIndex = color_index_3; // set warna indikator warna tunggal
input int InpMaxHistoryBars = 240; // kira bar sejarah, lalai 240, tidak lebih
//--- penampan indikator
double valueBuffer[]; // simpan nilai indikator Hull
double colorBuffer[]; // simpan warna indikator Hull pada bar
double fullWMABuffer[]; // simpan pengiraan WMA penuh
double halfWMABuffer[]; // simpan pengiraan WMA separuh
//--- Pembolehubah global indikator
int hmaPeriod, fullPeriod, halfPeriod, sqrtPeriod, maxHistoryBars; // simpan nilai input atau nilai lalai
//+------------------------------------------------------------------+
//| Fungsi inisialisasi indikator khusus |
//+------------------------------------------------------------------+
int OnInit() {
ENUM_INIT_RETCODE result = checkInput(); // semak parameter input yang betul
SetIndexBuffer(0,valueBuffer,INDICATOR_DATA); // simpan pemetaan penampan indikator
SetIndexBuffer(1,colorBuffer,INDICATOR_COLOR_INDEX); // simpan warna lilin indikator
SetIndexBuffer(2,fullWMABuffer,INDICATOR_CALCULATIONS); // simpan hasil pengiraan fullWMA
SetIndexBuffer(3,halfWMABuffer,INDICATOR_CALCULATIONS); // simpan hasil pengiraan halfWMA
IndicatorSetInteger(INDICATOR_DIGITS,_Digits); // set angka indikator
string shortName = StringFormat("HMA(%d)",hmaPeriod); // nama untuk DataWindow dan label sub-tetingkap indikator
IndicatorSetString(INDICATOR_SHORTNAME,shortName);
PlotIndexSetString(0,PLOT_LABEL,shortName);
// mengira nilai global untuk indikator
fullPeriod = hmaPeriod; // tempoh dari input
halfPeriod = fullPeriod / 2; // kira separuh tempoh
sqrtPeriod = (int)round(sqrt((double)fullPeriod)); // kira akar kuasa dua tempoh
return(result); // kejayaan atau kegagalan, inisialisasi selesai
} Semoga anda menikmati penggunaan indikator ini!
2023.09.21