All pastes #1071494 Raw Edit

stocksim.m

public text v1 · immutable
#1071494 ·published 2008-07-14 05:34 UTC
rendered paste body
clear;
format short;

% Parameters
p = 1; % How often do we trade? (Range [0,1]; 1: always; 0: never)
onehand=400;
morecash=0;

% Fetch the data from data file
A=load "0005HK.csv"; % 2003-2007
price=A(:,7);
time=A(:,1);

sellprice=price(1);
buyprice=price(1);

cash=zeros(size(price));
stock=zeros(size(price));

cash(1)=200000; % initial cash available

for t=1:length(time)

  if(rem(t,27)==0) % allocate more cash each month to buy the stock
    cash(t) = cash(t) + morecash; % set morecash=0 above to disable
  endif

  %Do nothing by default
  dc(t) = 0; ds(t) = 0;
  
  if(rand<p && t>50)

    % Buy?
    % if(1)
    if(maverage(price,t,2)(t)>maverage(price,t,19)(t)) % Buy (put advanced criteria (e.g. moving average) here)
      buyhand=floor(cash(t)/price(t)/onehand);
      dc(t) = -price(t)*buyhand*onehand; ds(t) = +buyhand*onehand;
      if(buyhand>0)
        buyprice=price(t);
      endif
    endif

    % Sell?
    % if(0)
    if(maverage(price,t,2)(t)<maverage(price,t,19)(t) || price(t)<0.8*buyprice) % Sell all
      sellhand=floor(stock(t)/onehand);
      dc(t) = +price(t)*sellhand*onehand; ds(t) = -sellhand*onehand;
      if(sellhand>0)
        sellprice=price(t);
      endif
    endif

  endif
  
  cash(t+1) = cash(t) + dc(t);
  stock(t+1) = stock(t) + ds(t);

end

% Analysis
price(t+1) = price(t);
time(t+1) = time(t) + 1;
total = cash + stock.*price;

% Display the final results
[total(t+1)./total(1) price(t+1)./price(1)]

% Output the results to data file
output=[time cash./total(1) stock.*price./total(1) total./total(1) price./price(1)];
save -ascii "buysell.dat" output;