Обсуждение статьи "Создание тиковых индикаторов"

 

Опубликована статья Создание тиковых индикаторов:

В этой статье описывается создание двух индикаторов: строящего тиковый график цены и рисующего "тиковые свечи" - свечи, содержащие заданное число тиков. Каждый из рассмотренных индикаторов записывает поступающие значения цен в файл для построения индикаторов при повторном запуске терминала (эти данные также могут использоваться другими приложениями).

Рис.1. Тиковый график.

Автор: Denis

 

Добрый день!

Вот бы еще увидеть секундные графики - свеча это несколько секунд (5 сек, 6 сек, 10, 12,15). Чтобы видеть изменения цены в привязке ко времени.


 
Silent:

Очепятка?

В тексте статьи. В примере правильно, AskBuffer
Да, это опечатка. Исправлено. Спасибо.
 

Добрый день!

Можно ли использовать получаемые предлагаемым индикатором файлы тиков для мультивалютного тестирования в тестере при этом отключив в тестере создание виртуальных тиков и сделать синхронизацию данных о ценах инструментов по времени?

Спасибо.

Документация по MQL5: Получение рыночной информации / SymbolIsSynchronized
Документация по MQL5: Получение рыночной информации / SymbolIsSynchronized
  • www.mql5.com
Получение рыночной информации / SymbolIsSynchronized - Документация по MQL5
 
robinz:

Добрый день!

Вот бы еще увидеть секундные графики - свеча это несколько секунд (5 сек, 6 сек, 10, 12,15). Чтобы видеть изменения цены в привязке ко времени.

Эти графики выходят за рамки данной статьи, поэтому предлагаю вам их построить самостоятельно - это не сложнее, чем описанные в статье.
rrr:

Добрый день!

Можно ли использовать получаемые предлагаемым индикатором файлы тиков для мультивалютного тестирования в тестере при этом отключив в тестере создание виртуальных тиков и сделать синхронизацию данных о ценах инструментов по времени?

Спасибо.

Файлы с котировками, создаваемые индикатором, конечно же, можно использовать и для других целей. Отключением ненужных вам функций (например, рисование графиков) и обработкой данных (например, синхронизацией данных разных инструментов) предлагаю заняться самостоятельно. Кстати, на мой взгляд, записывать котировки в файл проще с помощью такого советника (он же в прикрепленном файле):

int h;
void OnInit()
  {
   string s;
   StringConcatenate(s,Symbol(),".txt");
   h=FileOpen(s,FILE_READ|FILE_WRITE|FILE_ANSI|FILE_SHARE_READ);
   FileSeek(h,0,SEEK_END);
  }

void OnTick()
  {
   string s;
   StringConcatenate(s,TimeCurrent(),"  ",DoubleToString(SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits)," ",DoubleToString(SymbolInfoDouble(Symbol(),SYMBOL_ASK),_Digits));
   FileWrite(h,s);
   FileFlush(h);
  }

void OnDeinit(const int reason)
  {
   FileClose(h);
  }

 

Файлы:
ticklog.mq5  1 kb
 

Отличная статья, спасибо за индикаторы!

Есть такая проблема при запуске tickindicator.mq5.

Откомпилировал индикатор. Запускаю.

Появляется окно индикатора. В нём шкала с большими числами как по минимуму, так и по максимуму. И движении индикатора по горизонтальной линии. Пробовал фиксировать минимум и максимум индикатора. Вроде появляется индикатор, но какие-то вертикальные линии есть по биду.


 
denkir:

Отличная статья, спасибо за индикаторы!

Есть такая проблема при запуске tickindicator.mq5.

Откомпилировал индикатор. Запускаю.

Появляется окно индикатора. В нём шкала с большими числами как по минимуму, так и по максимуму. И движении индикатора по горизонтальной линии. Пробовал фиксировать минимум и максимум индикатора. Вроде появляется индикатор, но какие-то вертикальные линии есть по биду.

Инициализировать надо все значения в индикаторном буфере.

Скорей всего ИМХО - код не смотрел)

 

Подскажите где что исправить.

На таймфреймах больше M30 шкала начинает показывать дикие числа.

 
fyords:

Подскажите где что исправить.

На таймфреймах больше M30 шкала начинает показывать дикие числа.

Как подсказывал коллега Dima_S при инициализации индикатора стоит буферы заполнить чем-то.

А так как в коде TickIndicator.mq5 имеем:

//+------------------------------------------------------------------+
//| функция OnInit()                                                 |
//+------------------------------------------------------------------+
void OnInit()
  {
// массив BidBuffer[] является индикаторным буфером
   SetIndexBuffer(0,BidBuffer,INDICATOR_DATA);
// массив AskBuffer[] является индикаторным буфером
   SetIndexBuffer(1,AskBuffer,INDICATOR_DATA);
// не отрисовываются нулевые значения линии Bid
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
// не отрисовываются нулевые значения линии Ask
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0);
  }

То нужно вставить такие строки:

ArrayInitialize(BidBuffer,0);
ArrayInitialize(AskBuffer,0);
 
denkir:

Как подсказывал коллега Dima_S при инициализации индикатора стоит буферы заполнить чем-то. Я так сделал:

ArrayInitialize(BidBuffer,EMPTY_VALUE);
ArrayInitialize(AskBuffer,EMPTY_VALUE);

Сделал так, но не помогло.

ArrayInitialize(BidBuffer,0.0);
ArrayInitialize(AskBuffer,0.0);
Так тоже.

 

 

А так?

//+------------------------------------------------------------------+
//| 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[])
  {
//---
   if(prev_calculated==0)
     {
      ArrayInitialize(BidBuffer,0);
      ArrayInitialize(AskBuffer,0);

     }
.....
  }