image thumbnail
from Order book simulation by Dimitri Shvorob
(a naive artificial stock market)

DataVendor
classdef DataVendor < TimerDriven
      
    properties (SetAccess = private)      
        ArchivedTradeAnnouncements        
    end
    
    properties (SetAccess = private, Hidden)
        TradeAnnouncementsToReview
    end
    
    methods (Static)
        
        function[obj] = getInstance()
           persistent local
           if isempty(local)
              local = DataVendor();
           end
           obj = local; 
        end      
               
    end
    
    methods
       
        function step(obj)
            while true    % process trade announcements reported by exchange
                tanno = obj.TradeAnnouncementsToReview.get;
                if ~isempty(tanno)
                    if Settings.Verbose
                       fprintf('%s reported to traders by data vendor\n',char(tanno))
                    end
                    obj.ArchivedTradeAnnouncements.put(tanno);
                    notify(obj,'TradeAnnouncement',tanno)
                else
                    break
                end
            end            
        end
        
        function processTradeAnnouncement(obj,src,tanno)  %#ok
            obj.TradeAnnouncementsToReview.put(tanno);
        end
        
    end
           
    methods (Access = private)
        
        function[obj] = DataVendor()
           obj = obj@TimerDriven(Settings.DataVendorPeriod);
           obj.ArchivedTradeAnnouncements = Queue();
           obj.TradeAnnouncementsToReview = Queue();
           addlistener(Exchange.getInstance,'TradeAnnouncement',@(src,evt) processTradeAnnouncement(obj,src,evt));       
        end 
        
    end
    
    events
        TradeAnnouncement % listened to by traders 
    end        
    
end

Contact us at files@mathworks.com