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