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!
Komen 0