Но ни ответа, ни привета. Вышел новый билд, а баги и ныне там. Неприятно такое отношение, честно говоря. Вроде помогаешь им, указываешь на ошибки, но никто даже ответить не соизволит. Неужели вам настолько плевать на кривость собственных библиотек?
Метод GetData() определен в базовом родительском классе и не требуется переопределять в данном случае.
Учтите, что перед вызовом GetData() необходимо обновлять значения в индикаторных буферах класса методом Refresh()
//+------------------------------------------------------------------+//| CheckCiATR.mq5 |//| Copyright 2013, MetaQuotes Software Corp. |//| http://www.mql5.com |//+------------------------------------------------------------------+#property copyright "Copyright 2013, MetaQuotes Software Corp."#property link "http://www.mql5.com"#property version "1.00"#include<Indicators\Oscilators.mqh>
#property script_show_inputs
inputint sleep_debug=10; // пауза в секундах при отладке//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
//---
CiATR iatr;
bool res=iatr.Create(_Symbol,0,15);
if(res)
{
Sleep(3000); // дадим время на расчет индикатораlong handle=iatr.Handle(); // хендл индикатора
//--- набросим индикатор на график
iatr.AddToChart(0,1);
//--- количество баров, на которых индикатор рассчитанint bars=iatr.BarsCalculated();
//--- количество буферов в индикаторе int buffers=iatr.BuffersTotal();
Print("Buffers=",buffers);
//--- размер индикаторного буфера int size=iatr.BufferSize(); // для экономии по умолчанию установлено 100Print("BufferSize=",size);
//--- покажем как увеличить размер индикаторного буфера bool resized=iatr.BufferResize(bars-1);
//--- если изменить размер индикаторного буфера не удалось вдругif(!resized)
{
PrintFormat("Ошибка при попытке увеличить размер индикаторного буфера!, GetLastError = "
,GetLastError());
}
//--- ! обязательно обновляем данные в буфере перед обращением к данным индикатора iatr.Refresh();//--- выведем 10 последних значений индикатора и сравних их с DataWindow for(int i=10;i>=0;i--)
{
// буфер индикаторя является таймсерией - индекс увеличивается вглубь историиPrintFormat(" ATR(%d) = %f",i,iatr.GetData(0,i));
}
}
//--- пауза на тот случай, если скрипт запустили в отладкеif(MQLInfoInteger(MQL_DEBUG))
{
Sleep(sleep_debug*1000);
}
}
//+------------------------------------------------------------------+
Для индикаторов, использующих параметр типа ENUM_APPLIED_VOLUME (CiForce, CiOBV), выдаётся ошибка: improper enumerator cannot be used
Вот для примера, которые компилируются и работают.
//+------------------------------------------------------------------+//| Check_CiForce.mq5 |//| Copyright 2013, MetaQuotes Software Corp. |//| http://www.mql5.com |//+------------------------------------------------------------------+#property copyright "Copyright 2013, MetaQuotes Software Corp."#property link "http://www.mql5.com"#property version "1.00"#include<Indicators\Oscilators.mqh>
#property script_show_inputs
inputint sleep_debug=10; // пауза в секундах при отладке//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
//---
CiForce iforce;
bool res=iforce.Create(_Symbol,0,15,MODE_SMA,VOLUME_TICK);
if(res)
{
Sleep(3000); // дадим время на расчет индикатораlong handle=iforce.Handle(); // хендл индикатор//--- набросим индикатор на график
iforce.AddToChart(0,1);
//--- ! обязательно обновляем данные в буфере перед обращением к данным индикатора iforce.Refresh();//--- выведем 10 последних значений индикатора и сравних их с DataWindow for(int i=10;i>=0;i--)
{
// буфер индикаторя является таймсерией - индекс увеличивается вглубь историиPrintFormat(" %s(%d) = %f",iforce.Name(),i,iforce.GetData(0,i));
}
}
//--- пауза на тот случай, если скрипт запустили в отладкеif(MQLInfoInteger(MQL_DEBUG))
{
Sleep(sleep_debug*1000);
}
}
//+------------------------------------------------------------------+
и
//+------------------------------------------------------------------+//| Check_CiOBV.mq5 |//| Copyright 2013, MetaQuotes Software Corp. |//| http://www.mql5.com |//+------------------------------------------------------------------+#property copyright "Copyright 2013, MetaQuotes Software Corp."#property link "http://www.mql5.com"#property version "1.00"#include<Indicators\Volumes.mqh>
#property script_show_inputs
inputint sleep_debug=10; // пауза в секундах при отладке//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart()
{
//---
CiOBV indicator;
bool res=indicator.Create(_Symbol,0,VOLUME_TICK);
if(res)
{
Sleep(3000); // дадим время на расчет индикатораlong handle=indicator.Handle(); // хендл индикатор//--- набросим индикатор на график
indicator.AddToChart(0,1);
//--- ! обязательно обновляем данные в буфере перед обращением к данным индикатора
indicator.Refresh();
//--- выведем 10 последних значений индикатора и сравних их с DataWindow for(int i=10;i>=0;i--)
{
// буфер индикаторя является таймсерией - индекс увеличивается вглубь историиPrintFormat(" %s(%d) = %f",indicator.Name(),i,indicator.GetData(0,i));
}
}
//--- пауза на тот случай, если скрипт запустили в отладкеif(MQLInfoInteger(MQL_DEBUG))
{
Sleep(sleep_debug*1000);
}
}
//+------------------------------------------------------------------+
ALXIMIKS: вылетело в лог сообщение, в чем может быть причина? Очень редко появляется, но все равно хочу разобраться - надо стабильность работы программы.
При каких условиях проявляется? Имя индикатора какое?
Метод GetData() определен в базовом родительском классе и не требуется переопределять в данном случае.
Учтите, что перед вызовом GetData() необходимо обновлять значения в индикаторных буферах класса методом Refresh()
Вот для примера, которые компилируются и работают.
Речь шла про MQL4. Там ничего этого не компилируется из-за тех багов, что я указывал. Как я понял из ответа в сервис-деске, четвёркой уже никто заниматься не хочет.
314:55:11.739Cannot open file 'D:\progy\mt4\MQL4\indicators\.ex4' [123]
Появлялось при очень быстрой работе цикла:
1. переключение чарта на следующий по порядку 2. открытие списка индикаторов 3. проверка всех имен индикаторов 4. запуск нового индикатора (пользовательский индикатор "ХХХ_Сombo")
Задержки небольшие вставил в код - вроде попустило (наверное где-то асинхронные операции не успевали друг за другом)
MT4. Демо-сервер MetaQuotes-Demo. Дыра с 30.08.2012 по 10.09.2012. Подтверждаю.
Речь оказывается о 2012 годе, а не о 2014.
Да, там дыра есть. Загрузите минутную историю из History Center и согласитесь на пересчет таймфреймов. Дыра заполнится.
Используйте серверы брокеров или переходите на МТ5, где с историей все гораздо лучше за счет единой минутной истории для всех таймфреймов.
Почему никто не отвечает на заявку в сервис-деске #1073960 от 2014.09.30 касательно MQL4?
Ошибка в файлах стандартной библиотеки при попытке использовать метод GetData классов CiForce и CiOBV
'm_applied' - improper enumerator cannot be used Oscilators.mqh 494 60
'm_applied' - improper enumerator cannot be used Volumes.mqh 241 34
И ещё ошибка в классе CiATR:
'GetData' - function must have a body Oscilators.mqh 25 22
Об этих же ошибках я писал и тут 3 месяца назад: https://www.mql5.com/ru/forum/1111/page1190#comment_993762
Но ни ответа, ни привета. Вышел новый билд, а баги и ныне там. Неприятно такое отношение, честно говоря. Вроде помогаешь им, указываешь на ошибки, но никто даже ответить не соизволит. Неужели вам настолько плевать на кривость собственных библиотек?
Нет поста - нет проблемы?
Децкий сад.
Нет поста - нет проблемы?
Децкий сад.
Имеются ошибки в стандартной библиотеке для MQL4, а конкретно в индикаторных классах.
Для класса CiATR отсутствует тело метода GetData.
Метод GetData() определен в базовом родительском классе и не требуется переопределять в данном случае.
Учтите, что перед вызовом GetData() необходимо обновлять значения в индикаторных буферах класса методом Refresh()
Имеются ошибки в стандартной библиотеке для MQL4, а конкретно в индикаторных классах.
Для индикаторов, использующих параметр типа ENUM_APPLIED_VOLUME (CiForce, CiOBV), выдаётся ошибка: improper enumerator cannot be used
Вот для примера, которые компилируются и работают.
и
Очень редко появляется, но все равно хочу разобраться - надо стабильность работы программы.
вылетело в лог сообщение, в чем может быть причина?
Очень редко появляется, но все равно хочу разобраться - надо стабильность работы программы.
Метод GetData() определен в базовом родительском классе и не требуется переопределять в данном случае.
Учтите, что перед вызовом GetData() необходимо обновлять значения в индикаторных буферах класса методом Refresh()
Вот для примера, которые компилируются и работают.
Речь шла про MQL4. Там ничего этого не компилируется из-за тех багов, что я указывал. Как я понял из ответа в сервис-деске, четвёркой уже никто заниматься не хочет.
3 14:55:11.739 Cannot open file 'D:\progy\mt4\MQL4\indicators\.ex4' [123]
Появлялось при очень быстрой работе цикла:
1. переключение чарта на следующий по порядку
2. открытие списка индикаторов
3. проверка всех имен индикаторов
4. запуск нового индикатора (пользовательский индикатор "ХХХ_Сombo")
Задержки небольшие вставил в код - вроде попустило (наверное где-то асинхронные операции не успевали друг за другом)