gen quarter=(mofd( Date)-mofd(mdy(3,12,1993)))/3+1 gen balance=1000 gen pastbalance=1000 gen StartShares=1000 gen InitialPortf=1000 gen TargetBalance=1000 gen ActualBalance=1000 gen Buy=1000 gen TradeCost=1000 gen sumcost=1000 gen expostreturn=1000 gen quarter=(mofd( Date)-mofd(mdy(3,12,1993)))/3+1 bysort Date: egen ew_spreat=mean(return) forvalues x=1/88 { if quarter=x {gen pastexpostreturn=expostreturn[_n-1] replace pastbalance=balance[_n-1] bysort Date: replace balance=pastbalance*(1+pastexpostreturn) if quarter>1 replace pastbalance=balance[_n-1] bysort Date: replace balance=pastbalance if _n>1 replace StartShares=balance/prc replace InitialPortf=balance*(1+return) sort Date replace TargetBalance=balance*(1+ew_spreat) replace ActualBalance=StartShares*prc replace Buy=-( ActualBalance- TargetBalance)/ bid replace Buy=-(ActualBalance-TargetBalance)/ask if ActualBalance<= TargetBalance replace TradeCost=(prc-bid)*Buy replace TradeCost=-(prc-ask)*Buy if ActualBalance<= TargetBalance