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_buffers4 // 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 inputinputint InpHmaPeriod = 20; // periode indikator, lalai 20input ENUM_COLOR_KIND InpColorKind = single_color; // jenis warna indikator, warna tunggal atau pelbagaiinput ENUM_COLOR_INDEX InpColorIndex = color_index_3; // set warna indikator warna tunggalinputint InpMaxHistoryBars = 240; // kira bar sejarah, lalai 240, tidak lebih//--- penampan indikatordouble valueBuffer[]; // simpan nilai indikator Hulldouble colorBuffer[]; // simpan warna indikator Hull pada bardouble fullWMABuffer[]; // simpan pengiraan WMA penuhdouble halfWMABuffer[]; // simpan pengiraan WMA separuh//--- Pembolehubah global indikatorint hmaPeriod, fullPeriod, halfPeriod, sqrtPeriod, maxHistoryBars; // simpan nilai input atau nilai lalai//+------------------------------------------------------------------+//| Fungsi inisialisasi indikator khusus |//+------------------------------------------------------------------+intOnInit() { 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