image thumbnail
from Scrolling display by Dimitri Shvorob
(price/volume chart)

TradeGenerator
classdef TradeGenerator < handle
    
    properties (SetAccess = private)
        Running = false;
        Period = .1;
    end
    
    properties (SetAccess = private, GetAccess = private, Hidden)
        Timer 
    end   
    
    methods (Static)
        
       function[obj] = getInstance()
           persistent g
           if isempty(g)
              g = TradeGenerator();
           end
           obj = g; 
       end 
        
    end
      
    methods
        
        function start(obj)
            obj.Running = true;
            obj.Timer = timer('TimerFcn','TradeGenerator.getInstance().step', ...
                              'Period',obj.Period, ...
                              'ExecutionMode','fixedRate'); 
            start(obj.Timer)  
        end 
        
        function stop(obj)
            obj.Running = false;
            if ~isempty(obj.Timer)
                stop(obj.Timer)
                delete(obj.Timer)
                obj.Timer = [];
            end
        end        
        
        function step(obj)
            if rand < .5
               size  = ceil(10*rand);
               price = ceil(10*rand);
               trade = Trade(size,price);
               notify(obj,'NewTrade',trade)
               %disp(char(trade))
            end
        end  
        
        function delete(obj)
          try
              stop(obj.Timer)
              delete(obj.Timer)
          catch     %#ok  
          end
       end
        
    end 
    
    methods (Access = private)
            
        function[obj] = TradeGenerator()
        end
            
    end
    
    events
        NewTrade
    end  

end

Contact us at files@mathworks.com