OnCalculate может вызываться, например, при подкачке истории.
Но если не брать во внимание возможные пропуски тиков, то в долгосрочной перспективе счетчики индикатора и эксперта должны показывать примерно одно и то же (+/- 2%).
Оставьте своих подопытных на несколько часов, а потом поделитесь результатами (кодом и распечатками).
Предположение, выделенное синим, неверно.
OnCalculate может вызываться, например, при подкачке истории.
Но если не брать во внимание возможные пропуски тиков, то в долгосрочной перспективе счетчики индикатора и эксперта должны показывать примерно одно и то же (+/- 2%).
Оставьте своих подопытных на несколько часов, а потом поделитесь результатами (кодом и распечатками).
Предположение, выделенное синим, неверно.
Начали отсчет
2013.10.24 20:21:49 Experts777 (EURUSD.e,H1) Количество тиков от советника - 7
2013.10.24 20:21:49 Indicators777 (EURUSD.e,H1) Количество тиков от индикатора - 11
Закончили отсчет.
2013.10.24 20:23:09 Indicators777 (EURUSD.e,H1) Количество тиков от индикатора - 327
2013.10.24 20:23:09 Experts777 (EURUSD.e,H1) Количество тиков от советника - 120
Код индикатора :
#property link "http://www.mql5.com"
#property version "1.00"
#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//--- indicator buffers mapping
//---
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[])
{
//---
static int t;
t++;
Print("Количество тиков от индикатора - ",t);
//--- return value of prev_calculated for next call
return(rates_total);
}
//+------------------------------------------------------------------+
Код советника:
#property link "http://www.mql5.com"
#property version "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
static int t;
t++;
Alert("Количество тиков от советника - ",t);
}
//+------------------------------------------------------------------+
Разница почти в 3 раза. Причем советник был установлен на 4 тика раньше.
Кто что может сказать по этому поводу?
Нет, разница в 200 вызовов за 2 минуты - многовато.
А что будет, если на несколько часов оставить?
И есть ли сообщения о реконнектах в журнале?
Нет, разница в 200 вызовов за 2 минуты - многовато.
А что будет, если на несколько часов оставить?
И есть ли сообщения о реконнектах в журнале?
Попробую с понедельника на несколько часов поставить счетчик.
А насчет реконнектов , при тестировании не замечал их.
- www.mql5.com
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте , уважаемые программисты.
Подскажите пожалуйста , почему и по какому принципу работают 2-е эти функции. А конкретние меня интересует следующий вопрос.
OnCalculate - Эта функция работает от послупнения нового тика. Но если начать считать тики , то их получиться больше чем в функции OnTick.
Например в виде подсчета возьмем вот этот код.
static int t;
t++;
Alert("Количество тиков - ",t);
Если поставить на график советник , в котором реализован этот код в OnTick и одновременно или почти одновременно , установить на на этот же график индикатор , в котором будет реализован этот код в OnCalculate , то спустя некоторое время , значения будут разные.
в индикаторе значение будет больше , чем в советнике.
Мое предположение что индикатор будет считать вот так - цена 100 - произошел тик стало 110 - Индикатор посчитал что прошло 10 тиков.
Советник считает так - цена 100 - произошел тик стало 110 - советник посчитал что прошел 1 тик.
Спасибо за ответ всем кто поможет разобраться в этом.