Набор инструментов для торговли: Предупреждение: произошла ошибка при оценке обратного вызова прослушивателя, полученного только при запуске автономной программы.

У меня есть объект Matlab со следующей функцией:

   function obj = request_historical(obj,ticktype)
        startdate = floor(now)-1500;
        enddate = floor(now);
        period = '1 day';
        tradehours = false;
        eventhandler = 'IB_histHandler';

        d2 = history(obj.ib,obj.ibContract,startdate,enddate,ticktype,period,...
        tradehours,eventhandler);
   end

Затем я вызываю эту функцию. Функция отправляет исторические финансовые данные и обрабатывается другой функцией "IB_histhandler". Функция находится в том же каталоге, что и отдельная программа.

Он отлично работает при запуске его через программу Matlab с использованием рабочей области, но всякий раз, когда я запускаю скомпилированную программу Standalone, я получаю кучу предупреждений:

Warning: Error occurred while evaluating listener callback.
> In pause (line 21)
  In IB_socket (line 432)
  In start (line 13)
  In tradingbot (line 31)
Error using comeventcallback (line 24)
Error firing event 'historicalData' to 'IB_histHandler'.

это похоже на то, что моя автономная программа exe не может найти функцию «IB_histhandler», как программа находит ее при запуске через MATLAB с использованием рабочей области.

Любые идеи??


person Luis Cruz    schedule 15.11.2016    source источник


Ответы (1)


Не уверен, что это отвечает на ваш вопрос, но я обычно помещаю свои обработчики событий в статические методы моего базового класса. Это упрощает передачу ручки через панель инструментов.

Создайте постоянную переменную (версия статического свойства Matlab) в этом статическом методе, который содержит объект, который может вызывать события, на которые может подписаться базовый класс. Например...

methods (Static)

    function HandleEvents(newObject,varargin)

        persistent obj
        % obj is filled during base object construction...
        if nargin==1
            obj=newObject;
            return
        end % Rest of the function follows...

Вы можете назначить свойство в базовом классе для хранения указателя на этот объект.

Держит все в одном классе и хорошо работает для меня.

person CNEV    schedule 21.12.2016