Selamat datang, trader! Hari ini kita akan membahas tentang DemoBufferPattern, sebuah indikator yang sangat berguna untuk analisis teknikal di MetaTrader 5. Indikator ini menggabungkan pelbagai elemen seperti lilin, fractals, dan zigzag untuk memberikan gambaran yang lebih jelas tentang pergerakan harga.
Berikut adalah gaya lukisan yang digunakan oleh indikator ini:
//+------------------------------------------------------------------+ //| Fungsi inisialisasi indikator khusus | //+------------------------------------------------------------------+ int OnInit() { //--- pemetaan buffer indikator SetIndexBuffer( 0,P1B1,INDICATOR_DATA); SetIndexBuffer( 1,P1B2,INDICATOR_DATA); SetIndexBuffer( 2,P1B3,INDICATOR_DATA); SetIndexBuffer( 3,P1B4,INDICATOR_DATA); SetIndexBuffer( 4,P1BC,INDICATOR_COLOR_INDEX); SetIndexBuffer( 5,P2B1,INDICATOR_DATA); SetIndexBuffer( 6,P3B1,INDICATOR_DATA); SetIndexBuffer( 7,P4B1,INDICATOR_DATA); SetIndexBuffer( 8,P4B2,INDICATOR_DATA); SetIndexBuffer( 9,P4BC,INDICATOR_COLOR_INDEX); SetIndexBuffer(10,P5B1,INDICATOR_DATA); SetIndexBuffer(11,P5BC,INDICATOR_COLOR_INDEX); //--- Buffer tambahan untuk pengiraan antara SetIndexBuffer(12,P4M1,INDICATOR_CALCULATIONS); SetIndexBuffer(13,P4M2,INDICATOR_CALCULATIONS); //--- Mereka harus diletakkan selepas semua buffer untuk dipaparkan, atau ... anda boleh mencubanya sendiri //--- ARROW PlotIndexSetInteger(1,PLOT_ARROW,217); PlotIndexSetInteger(2,PLOT_ARROW,218); PlotIndexSetInteger(1,PLOT_ARROW_SHIFT,-iArrowShift); PlotIndexSetInteger(2,PLOT_ARROW_SHIFT,iArrowShift); PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE); PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,EMPTY_VALUE); //--- ZIGZAG PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,0.0); //--- MA maHandle=iMA(Symbol(),0,ExtPeriod,0,MODE_EMA,PRICE_CLOSE); return(0); } //+------------------------------------------------------------------+ //| Fungsi iterasi indikator khusus | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime& time[], const double& open[], const double& high[], const double& low[], const double& close[], const long& tick_volume[], const long& volume[], const int& spread[]) { //--- CalcCandles(rates_total,prev_calculated,open,high,low,close); CalcFractal(rates_total,prev_calculated,high,low,P2B1,P3B1); CalcZigzag (rates_total,prev_calculated,high,low,P4B1,P4B2,P4BC,P4M1,P4M2); CalcColorMA(rates_total,prev_calculated,P5B1,P5BC); //--- nilai kembali dari prev_calculated untuk panggilan seterusnya return(rates_total); }

Komen 0