Miscellaneous
Implements a curve of type %1
0 Views
0 Downloads
0 Favorites
Ticker_v1
//+------------------------------------------------------------------+
//                                                        Ticker.mq4 |
//+------------------------------------------------------------------+
#property strict
//---- отрисовка индикатора в отдельном окне
#property indicator_separate_window
//---- количество индикаторных буферов
#property indicator_buffers 1
//---- цвет индикаторных линий
#property indicator_color1 Blue
//---- buffers
double ExtMapBuffer1[];
// ---- Пользовательские переменные --------
extern int MaxDeep=2000;//глубина отрисовки индикатора 
// --- Вспомогательные переменные ----------
int    TickCounter=0;//счётчик тиков
int    myBars=0;
int    counted_bars=0;//количество уже посчитанных баров

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init(){
	SetIndexStyle(0,DRAW_LINE);
	SetIndexBuffer(0,ExtMapBuffer1);
	SetIndexEmptyValue(0,0.0);//начинаем с пустого значения
	return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit(){
  return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start(){
	/*
		На новом баре индикаторый буффер сдвигается сам, но поскольку мы делаем тиковый нидикатор, то
		нам придётся вручную сдвигать буффер на каждом новом тике за исключением первого тика нового
		бара
	*/
	if(isNewBar()==true){//двигать не надо, терминал сдвинул сам
     TickCounter++;//на каждом тике увеличиваем счётчик тиков
     ExtMapBuffer1[0]=Ask;
     
	}
	else{//иначе бар старый и мы должны сдвинуть массивы вручную
		TickCounter++;//на каждом тике увеличиваем счётчик тиков
		ShiftArray();//сдвигаем значения массива на 1
		ExtMapBuffer1[0]=Ask;
    
  }
  return(0);
}
//+------------------------------------------------------------------+
//-------- Пользовательские подпрограммы -----------------------------
//+------------------------------------------------------------------+
/*
  Индикаторы, встроенные в терминал сдивигают буферный массив сами. Нам же придётся написать для этого отдельную функцию.
  Поэтому нижеследующая функция ShiftArray() именно это и делает - сдвигает значения массива на 1 при поступлении нового тика. 
*/
// ---------------------- ShiftArray() -----------------------
// Функция сдвигает массив 
//--------------------------
void ShiftArray(){
  if(TickCounter>2*MaxDeep){//если число тиков превысило допуск в 2 раза, то обрезаем лишние тики
		for(int i=TickCounter;i>=MaxDeep;i--){
			ExtMapBuffer1[i]=0.0;
		}
    TickCounter=MaxDeep;
  }
	int ArrSize=ArraySize(ExtMapBuffer1);
	for(int i=ArrSize-1;i>0;i--){//Иначе производим сдвиг
		ExtMapBuffer1[i]=ExtMapBuffer1[i-1];
	}
}
/*
 Нам пришлось ввести новую глобальную переменную TickCounter,
 чтобы знать на какую глубину сдвигать значения массива.
 Но мы забыли, что при появлении нового бара индикаторный массив сдвигается автоматически.
 Добавим обработку события «Новый бар»:
*/
//+------------------------------------------------------------------+
//| функция isNewBar() - возвращает признак нового бара                                              |
//+------------------------------------------------------------------+
bool isNewBar(){
  bool res=false;
  if(myBars!=Bars){
    res=true;
    myBars=Bars;
  }   
	return(res);
}
//------------------------------------------------------------

Comments

Markdown supported. Formatting help

Markdown Formatting Guide

Element Markdown Syntax
Heading # H1
## H2
### H3
Bold **bold text**
Italic *italicized text*
Link [title](https://www.example.com)
Image ![alt text](image.jpg)
Code `code`
Code Block ```
code block
```
Quote > blockquote
Unordered List - Item 1
- Item 2
Ordered List 1. First item
2. Second item
Horizontal Rule ---