Ошибки, баги, вопросы - страница 708

 

Здравствуйте! OpenCL! В режиме отладки код работает великолепно.... а в тестере выдает ошибку 5100 при вызове CLContextCreate... Сервисдеск?

Terminal CPU: GenuineIntel Intel(R) Core(TM) i3-2310M CPU @ 2.10GHz with OpenCL 1.1 (4 units, 2095 MHz, 5990 Mb, version 2.0)

Terminal GPU: Advanced Micro Devices, Inc. Turks with OpenCL 1.1 (6 units, 725 MHz, 1024 Mb, version CAL 1.4.1703 (VM))

Build 619 Windows 7 SP1 64-x

...

На хрюшке с другой видюхой повторил - не помогло...

Файлы:
 
MigVRN:

В режиме отладки код работает великолепно.... а в тестере выдает ошибку 5100 при вызове CLContextCreate... Сервисдеск?

Вряд ли это баг.  Я думаю в тестере OpenCL не работает - отключена поддержка. Временно отключена или навсегда, вопрос открытый.
 
MigVRN:

Здравствуйте! OpenCL! В режиме отладки код работает великолепно.... а в тестере выдает ошибку 5100 при вызове CLContextCreate... Сервисдеск?

...

На хрюшке с другой видюхой повторил - не помогло...

Чё то я не припомню, чтоб объявляли, что OpenCL в тестере включили, может чего пропустил.

Пока функционал отлаживается в терминале, как будет готово подключат поддержку в тестере.

Там ведь придётся и удалённое тестирование поддерживать.

 
MetaDriver:
Вряд ли это баг.  Я думаю в тестере OpenCL не работает - отключена поддержка. Временно отключена или навсегда, вопрос открытый.
Urain:

Чё то я не припомню, чтоб объявляли, что OpenCL в тестере включили, может чего пропустил.

Пока функционал отлаживается в терминале, как будет готово подключат поддержку в тестере.

Там ведь придётся и удалённое тестирование поддерживать.

 Спасибо! :(  Буду ждать c нетерпением... Попробовать очень хочется уже.
 

Решил написать советник. Когда что-то начинаю писать с ноля, обязательно проверяю каждый этап на предмет ошибок, а код на работоспособность. Мне не понравилось, как пока ещё только заготовка советника отрабатывает такую вещь как работа по событию "новый бар". Долго и нудно искал причину - докопался только когда в коде остались только строки

//+------------------------------------------------------------------+
//| Expert tick function                                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
  Alert("Новый тик",TimeCurrent());
  }
//+------------------------------------------------------------------+

В результате получил согласно отчёту тестера качество моделирования 100%, число смоделированных тиков 38242987 а в логе тестера дикие пропуски (целыми днями), насчитал всего 13259 тиков...
В чём может быть причина?

Файлы:
20120408.log  2074 kb
 

Ренат, Слава,  можно вплотную приблизиться к параметризации, если (влёгкую) сделать спец-директиву препроцессора, работающую аналогично #include, но позволяющую повторные компиляции одного и того же инслюдника.  Пример:

#define ArrayType double
#include "ISTemplate.mqh"
#define ArrayType float
#include "ISTemplate.mqh"
#define ArrayType int
#include "ISTemplate.mqh"
#define ArrayType uint
#include "ISTemplate.mqh"
#define ArrayType long
#include "ISTemplate.mqh"
#define ArrayType ulong
#include "ISTemplate.mqh"
#define ArrayType short
#include "ISTemplate.mqh"
#define ArrayType ushort
#include "ISTemplate.mqh"
#define ArrayType char
#include "ISTemplate.mqh"
#define ArrayType uchar
#include "ISTemplate.mqh"
#define ArrayType string
#include "ISTemplate.mqh"

Сейчас это компилируется, но не работает (вернее работает только для первого #include).  Спец-директива (#reinclude, #Include или #template) могла бы решить проблему.  Кстати, вам тоже кучу времени сэкономит, при написании перегрузок функций для стандартных типов.  И стандартная библиотека могла бы стать компактной и красивой.  А там уже и до "нормальных" параметризуемых классов недалеко - только синтаксис новый добавить в язык и автоматизировать скрытый #reinclude.

// работающий пример, где этот инклюдник развёрнут моим собственным препроцессором здесь.

Файлы:
ISort.mqh  2 kb
 

Тоже вариант параметризации классов. 

#define _MyContainer(name,type,size) class name {public: type array[size]; virtual type At(int i){return array[i];}}
#define  ASize 8
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   _MyContainer(MyClass,int,ASize);
   MyClass MyVar;
   Print(sizeof(MyVar)); 
   for(int i=0;i<ASize;i++)
     {
      MyVar.array[i]=i*i;
     }
   for(int i=0;i<ASize;i++)
     {
      Print(MyVar.At(i));
     }
  }

Работает.  Можно даже наследование прикрутить. ;)

Но чтоб этим вариантом более-менее сносно пользоваться, нужно как минимум перенос строк в макросах сделать. 

// Да и выглядит такая фишка (с непривычки?) довольно дико. :))

Файлы:
DefTest.mq5  2 kb
 
MetaDriver:

Ренат, Слава,  можно вплотную приблизиться к параметризации, если (влёгкую) сделать спец-директиву препроцессора, работающую аналогично #include, но позволяющую повторные компиляции одного и того же инслюдника.  Пример:

Мысль понятна, но лучше уже сразу реализовать шаблоны.

Чуть позже вернемся к этому вопросу.

 
Renat:

Мысль понятна, но лучше уже сразу реализовать шаблоны.

Чуть позже вернемся к этому вопросу.

Ура!!!  Спасибо.
 

Вот такая запись в тестере проходит на ура, При попытке присоединить эксперта к графику дает ошибку.

int OnInit()
  {
   hPerCros=iCustom(_Symbol,0,"\\Каналы\PercentageCrossoverChannel",Percent,Shift) ;
   if( hPerCros < 0)
      Print("Ошибка создания индикатора=  ",GetLastError());
   return(0);
  }
Причина обращения: