Из индикатора вам надо свой таймер запускать. Из OnInit() запускаете EventSetTimer().
Так и делаю. Таймер запускаю, как говорите, я снизу уточнил, что в этом коде его нету. В советнике таймер работает, а в индикаторах не запускается.
Приаттачить индикатор для теста можете?
Вот, что я видел, когда искал решение проблемы
https://www.mql5.com/ru/forum/962
Но так как у меня и onCalculate работает неверно, и запустить задержку Sleep из индикатора я тоже не могу, решил что проблема индивидуальна.
Так откуда у вас будет таймер, когда вы его не запускаете?
Из индикатора вам надо свой таймер запускать. Из OnInit() запускаете EventSetTimer().
Так откуда у вас будет таймер, когда вы его не запускаете?
Из индикатора вам надо свой таймер запускать. Из OnInit() запускаете EventSetTimer().
Повторю третий раз, я знаю, что здесь таймера нету, но когда я его ставлю, он не работает, в любом случае, здесь не работает onCalculate
Повторю третий раз, я знаю, что здесь таймера нету, но когда я его ставлю, он не работает, в любом случае, здесь не работает onCalculate
А смысл тогда приводить такой код не по существу?
Держите. Кое-что закомментировал. Кое-что добавил. OnTimer срабатывает.
При ручном запуске работает у меня тоже (только что проверил), но если запускать из советника - проходит инициализация и все.
double res = iCustom(symb[symb_id].name, CTimeFrame, "iLeprechaun", order[inc_order].current_tick, db.dbName,CGraphUpdate,inc_order, 0,0);
Так выглядит запуск из советника
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Здравствуйте, вот такая вот проблема: написал себе советник, а данные с индикатором синхронизирую через мускул. Так как советник в базу записывает значения приблизительно раз 20 секунд, хотел поставить такой же таймер в индикатор, чтобы он лишний раз не теребонил бд. Hо EventSetTimer не запускает ивент onTimer. Потом попробовал все организовать через onStart, но забил на это дело. т.к. в доках написано, что с индикатором это не работает и взял ивент onCalculate. Он запустился, но только один раз после инициализации. Индикатор запускается через советник причем не один, а 4 штуки для каждого графика отрытого в советнике на его усмотрение.
#property copyright "Maksym Stukalo"
#property link "stukalo.maksym@gmail.com"
#property version "1.00"
#property indicator_separate_window
input int order_ticket;
input string db_name;
input int CGraphUpdate = 15;
input int OrderID;
//input int chart_id;
double ExtBufferLine0[];
double ExtBufferLine1[];
double ExtBufferLine2[];
double ExtBufferLine3[];
double ExtBufferLine4[];
int OnInit()
{
Print("1");
IndicatorBuffers(5);
Print("2");
ilep.lenOfFields = db.getTableLen();
Print("3");
SetIndexBuffer(0, ExtBufferLine0);
SetIndexBuffer(1, ExtBufferLine1);
SetIndexBuffer(2, ExtBufferLine2);
SetIndexBuffer(3, ExtBufferLine3);
SetIndexBuffer(4, ExtBufferLine4);
return(INIT_SUCCEEDED);
}
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[])
{
Print("9");
if(db.getTableLen() != ilep.lenOfFields){
ilep.lenOfFields++;
ilep.updateLines();
Print("10");
}
return(rates_total);
}
Никаких ошибок и вылетов нету, используемые классы работают нормально. В логи число 9 выводиться только раз. Максимальное время работы - 10 минут. Таймер вообще не стартует (его тут в коде нету).
MetaTrader 4, build 891