95 lines
3.6 KiB
Markdown
95 lines
3.6 KiB
Markdown
# ArraySetAsSeries
|
||||
|
|
|
|||
|
|
The function sets the AS_SERIES flag to a selected [object of a dynamic array](/en/docs/basis/types/dynamic_array), and elements will be indexed like in [timeseries](/en/docs/series).
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
bool ArraySetAsSeries(
|
|||
|
|
const void& array[], // array by reference
|
|||
|
|
bool flag // true denotes reverse order of indexing
|
|||
|
|
);
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Parameters
|
|||
|
|
|
|||
|
|
array[]
|
|||
|
|
|
|||
|
|
[in][out] Numeric array to set.
|
|||
|
|
|
|||
|
|
flag
|
|||
|
|
|
|||
|
|
[in] Array indexing direction.
|
|||
|
|
|
|||
|
|
Return Value
|
|||
|
|
|
|||
|
|
The function returns true on success, otherwise - false.
|
|||
|
|
|
|||
|
|
Note
|
|||
|
|
|
|||
|
|
The [AS_SERIES](/en/docs/array/arraygetasseries) flag can't be set for multi-dimensional arrays or static arrays (arrays, whose size in square brackets is preset already on the compilation stage). Indexing in timeseries differs from a common array in that the elements of timeseries are indexed from the end towards the beginning (from the newest to oldest data).
|
|||
|
|
|
|||
|
|
Example: Indicator that shows bar number
|
|||
|
|
|
|||
|
|

|
|||
|
|
|
|||
|
|
```
|
|||
|
|
#property indicator_chart_window
|
|||
|
|
#property indicator_buffers 1
|
|||
|
|
#property indicator_plots 1
|
|||
|
|
//---- plot Numeration
|
|||
|
|
#property indicator_label1 "Numeration"
|
|||
|
|
#property indicator_type1 DRAW_LINE
|
|||
|
|
#property indicator_color1 CLR_NONE
|
|||
|
|
//--- indicator buffers
|
|||
|
|
double NumerationBuffer[];
|
|||
|
|
//+------------------------------------------------------------------+
|
|||
|
|
//| Custom indicator initialization function |
|
|||
|
|
//+------------------------------------------------------------------+
|
|||
|
|
int OnInit()
|
|||
|
|
{
|
|||
|
|
//--- indicator buffers mapping
|
|||
|
|
SetIndexBuffer(0,NumerationBuffer,INDICATOR_DATA);
|
|||
|
|
//--- set indexing for the buffer like in timeseries
|
|||
|
|
ArraySetAsSeries(NumerationBuffer,true);
|
|||
|
|
//--- set accuracy of showing in DataWindow
|
|||
|
|
IndicatorSetInteger(INDICATOR_DIGITS,0);
|
|||
|
|
//--- how the name of the indicator array is displayed in DataWindow
|
|||
|
|
PlotIndexSetString(0,PLOT_LABEL,"Bar #");
|
|||
|
|
//---
|
|||
|
|
return(INIT_SUCCEEDED);
|
|||
|
|
}
|
|||
|
|
//+------------------------------------------------------------------+
|
|||
|
|
//| Custom indicator iteration function |
|
|||
|
|
//+------------------------------------------------------------------+
|
|||
|
|
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[])
|
|||
|
|
{
|
|||
|
|
//--- we'll store the time of the current zero bar opening
|
|||
|
|
static datetime currentBarTimeOpen=0;
|
|||
|
|
//--- revert access to array time[] - do it like in timeseries
|
|||
|
|
ArraySetAsSeries(time,true);
|
|||
|
|
//--- If time of zero bar differs from the stored one
|
|||
|
|
if(currentBarTimeOpen!=time[0])
|
|||
|
|
{
|
|||
|
|
//--- enumerate all bars from the current to the chart depth
|
|||
|
|
for(int i=rates_total-1;i>=0;i--) NumerationBuffer[i]=i;
|
|||
|
|
currentBarTimeOpen=time[0];
|
|||
|
|
}
|
|||
|
|
//--- return value of prev_calculated for next call
|
|||
|
|
return(rates_total);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
See also
|
|||
|
|
|
|||
|
|
[Access to timeseries](/en/docs/series), [ArrayGetAsSeries](/en/docs/array/arraygetasseries)
|