#property indicator_chart_window #property indicator_buffers 1 #property indicator_plots 1 //---- dessin des numéros #property indicator_label1 "Numeration" #property indicator_type1 DRAW_LINE #property indicator_color1 CLR_NONE //--- buffers de l'indicateur double NumerationBuffer[]; //+------------------------------------------------------------------+ //| Fonction d'initialisation de l'indicateur personnalisé | //+------------------------------------------------------------------+ int OnInit() { //--- mapping des buffers de l'indicateur SetIndexBuffer(0,NumerationBuffer,INDICATOR_DATA); //--- définit l'indexation du buffer comme les timeseries ArraySetAsSeries(NumerationBuffer,true); //--- définit la précision d'affichage dans DataWindow IndicatorSetInteger(INDICATOR_DIGITS,0); //--- comment le nom du tableau de l'indicateur est affiché dans DataWindow PlotIndexSetString(0,PLOT_LABEL,"Bar #"); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Fonction d'itération de l'indicateur personnalisé | //+------------------------------------------------------------------+ 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[]) { //--- nous stockerons l'heure d'ouverture de la barre zéro courante static datetime currentBarTimeOpen=0; //--- renverse l'accès au tableau time[] - mettons le comme dans les timeseries ArraySetAsSeries(time,true); //--- Si l'heure de la barre zéro diffère de celle stockée if(currentBarTimeOpen!=time[0]) { //--- énumère toutes les barres depuis la barre courante jusqu'au début du graphique for(int i=rates_total-1;i>=0;i--) NumerationBuffer[i]=i; currentBarTimeOpen=time[0]; } //--- retourne la valeur de prev_calculated pour le prochain appel return(rates_total); } |