function MarketModel() p0=20; muBuyTime=1; muBuyOrigin=2; nuBuy=4; muSellTime=1; muSellOrigin=2; nuSell=4; if p0>5 pCurrent(1)=p0; dp=0.01; % Price increment % Initialize the Bid and Ask Queues: numBuy=zeros(1001,1); numSell=zeros(1001,1); else disp('Equity price is too low!') return end % Estimate time of first submission of a Bid price: tBuy(1)=exprnd(muBuyTime); % Estimate time of first submission of an Ask price: tSell(1)=exprnd(muSellTime); n=1; while tBuy(n)<=390 && tSell(n)<=390 % If the submission of a Bid price preceeds the submission % of an Ask price then the Bid price is checked for matches with % previous Ask prices and then the new Ask price is checked for % matches with previous Bid prices. The new Bid price will, therefore, % be included in the check. if tBuy(n)<=tSell(n) pBuyOrigin=pCurrent(n)+exprnd(muBuyOrigin); pBuy(n)=round(pBuyOrigin)-round(chi2rnd(nuBuy)); buyPriceDistance=pBuy(n)-pCurrent(n); buyPriceLocation=501+buyPriceDistance; if numSell(buyPriceLocation) ~= 0 numSell(buyPriceLocation)=numSell(buyPriceLocation)-1; pCurrentHold=pBuy(n); else numBuy(buyPriceLocation)=numBuy(buyPriceLocation)+1; pCurrentHold=pCurrent(n); end pSellOrigin=pCurrent(n)-exprnd(muSellOrigin); pSell(n)=round(pSellOrigin)+round(chi2rnd(nuSell)); sellPriceDistance=pSell(n)-pCurrent(n); sellPriceLocation=501+sellPriceDistance if numBuy(sellPriceLocation) ~= 0 numBuy(sellPriceLocation)=numBuy(sellPriceLocation)-1; pCurrent(n+1)=pCurrentHold+pSell(n); else numsell(sellPriceLocation)=numSell(sellPriceLocation)+1; pCurrent(n+1)=pCurrentHold; end % Similar to what's described above, the Bid and Ask prices % are matched via their queues, however, the new Ask price is now % considered before the new Bid price. else pSellOrigin=pCurrent(n)-exprnd(muSellOrigin); pSell(n)=round(pSellOrigin)+round(chi2rnd(nuSell)); sellPriceDistance=pSell(n)-pCurrent(n); sellPriceLocation=501+sellPriceDistance; if numBuy(sellPriceLocation) ~= 0 numBuy(sellPriceLocation)=numBuy(sellPriceLocation)-1; pCurrentHold=pSell(n); else numSell(sellPriceLocation)=numSell(sellPriceLocation)+1; pCurrentHold=pCurrent(n); end pBuyOrigin=pCurrent(n)+exprnd(muBuyOrigin); pBuy(n)=round(pBuyOrigin)-round(chi2rnd(nuBuy)); buyPriceDistance=pBuy(n)-pCurrent(n); buyPriceLocation=501+buyPriceDistance; if numSell(buyPriceLocation) ~= 0 numSell(buyPriceLocation)=numSell(buyPriceLocation)-1; pCurrent(n+1)=pCurrentHold+pBuy(n); else numBuy(buyPriceLocation)=numBuy(buyPriceLocation)+1; pCurrent(n+1)=pCurrentHold; end end tBuy(n+1)=tBuy(n)+exprnd(muBuyTime); tSell(n+1)=tSell(n)+exprnd(muSellTime); n=n+1; end t=[tBuy tSell]; t=sort(t); hist(t,20) figure plot(1:n,pCurrent) clear all