function MarketModel() p0=20; muOrderTime=1.2; muBuyOrigin=1.4; muSellOrigin=1.4; nu=3; 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 tOrder(1)=randexp(muOrderTime); n=1; while tOrder(n)<=1000 if rand>0.50 orderType=1; % Buy pOrigin=pCurrent(n)+randexp(muBuyOrigin); % Matlab: exprnd(muBuyOrigin) p(n)=round(pOrigin)-round(randchi(nu)); % Matlab: chi2rnd(nu) if numSell(max(p(n),1))~= 0 numSell(max(p(n),1))=numSell(max(p(n),1))-1; pCurrent(n+1)=p(n); else numBuy(max(p(n),1))=numBuy(max(p(n),1))+1; pCurrent(n+1)=pCurrent(n); end else orderType=-1; % Sell pOrigin=pCurrent(n)-randexp(muSellOrigin); p(n)=round(pOrigin)+round(randchi(nu)); if numBuy(min(p(n),1001))~= 0 numBuy(min(p(n),1001))=numBuy(min(p(n),1001))-1; pCurrent(n+1)=p(n); else numSell(min(p(n),1001))=numSell(min(p(n),1001))+1; pCurrent(n+1)=pCurrent(n); end end tOrder(n+1)=tOrder(n)+randexp(muOrderTime); n=n+1; end sparse(numBuy) sparse(numSell) plot(tOrder,pCurrent) figure hist(pCurrent) figure plot(0:49,numSell(1:50)) hold on plot(0:49,numBuy(1:50),'r') clear all