[13] | crudeoil.dta | ||
master.do:7 | |||
→ | ch10.6.do | ↘ |
ch10.6.do open
file:script:do
# | content |
---|---|
1 [+] | * ITSP 10.6 - |
3 [+] | *use CLquotes, clear *drop matmy open high low delt delm contr quotedate *order qmdy cmdy *rename contract contractcode *encode contractcode, gen(contract) *drop contractcode *generate qm = mofd(qmdy) *generate cm = mofd(cmdy) *format settle %7.2f |
13 [+] | use crudeoil , |
14 [+] | list in 1/51 , |
// identify last day of trading for near contract in each month |
|
17 [+] | bysort qmdy (cmdy): generate near = contract if _n == 1 |
// qmdy is the first date when the near contract is no longer quoted // that minus 3 trading days is the target rollover date |
|
21 [+] | bysort cmdy (qmdy): generate rolldate = qmdy[_n-3] if near[_n] != near[_n-1] |
22 [+] | bysort cmdy (qmdy): generate roll1date = qmdy[_n-4] if near[_n] != near[_n-1] |
23 [+] | bysort cmdy (qmdy): generate nnear = contract if near[_n] != near[_n-1] |
// fixup for first obs |
|
25 [+] | replace nnear = . in 1 |
27 [+] | bysort qm: egen rollover = mean(rolldate) |
28 [+] | bysort qm: egen rollover1 = mean(roll1date) |
29 [+] | bysort qm: egen nextnear = mean(nnear) |
// calculate price series as settle(near) for pre-rollover dates |
|
32 [+] | bysort qm: generate futprice = settle if contract == near & qmdy < rollover |
// calculate price series as settle(nnear) for rollover date et seq. |
|
34 [+] | bysort qm: replace futprice = settle if contract==nextnear & qmdy >= rollover |
35 [+] | format futprice %9.2f |
// calculate return series for the rollover date |
|
37 [+] | bysort qm: generate settleprev = settle if contract == nextnear & qmdy == rollover1 |
38 [+] | bysort qm: egen sprev = mean(settleprev) |
39 [+] | bysort qm: generate double futret = log(settle) - log(sprev) if qmdy == rollover |
// drop obs no longer needed, flagged by missing settle |
|
41 [+] | drop if futprice == . |
// calc returns for all non-settle dates |
|
43 [+] | sort qmdy |
44 [+] | replace futret = log(settle) - log(settle[_n-1]) if missing(futret) |
46 [+] | format rollover %td |
48 [+] | sort qmdy cmdy |
49 [+] | list qmdy contract futprice futret if !missing(futprice) in 1/62 , |
* ITSP 10.6 - *use CLquotes, clear *drop matmy open high low delt delm contr quotedate *order qmdy cmdy *rename contract contractcode *encode contractcode, gen(contract) *drop contractcode *generate qm = mofd(qmdy) *generate cm = mofd(cmdy) *format settle %7.2f use crudeoil, clear list in 1/51, sepby(qmdy) // identify last day of trading for near contract in each month bysort qmdy (cmdy): generate near = contract if _n == 1 // qmdy is the first date when the near contract is no longer quoted // that minus 3 trading days is the target rollover date bysort cmdy (qmdy): generate rolldate = qmdy[_n-3] if near[_n] != near[_n-1] bysort cmdy (qmdy): generate roll1date = qmdy[_n-4] if near[_n] != near[_n-1] bysort cmdy (qmdy): generate nnear = contract if near[_n] != near[_n-1] // fixup for first obs replace nnear = . in 1 bysort qm: egen rollover = mean(rolldate) bysort qm: egen rollover1 = mean(roll1date) bysort qm: egen nextnear = mean(nnear) // calculate price series as settle(near) for pre-rollover dates bysort qm: generate futprice = settle if contract == near & qmdy < rollover // calculate price series as settle(nnear) for rollover date et seq. bysort qm: replace futprice = settle if contract==nextnear & qmdy >= rollover format futprice %9.2f // calculate return series for the rollover date bysort qm: generate settleprev = settle if contract == nextnear & qmdy == rollover1 bysort qm: egen sprev = mean(settleprev) bysort qm: generate double futret = log(settle) - log(sprev) if qmdy == rollover // drop obs no longer needed, flagged by missing settle drop if futprice == . // calc returns for all non-settle dates sort qmdy replace futret = log(settle) - log(settle[_n-1]) if missing(futret) format rollover %td sort qmdy cmdy list qmdy contract futprice futret if !missing(futprice) in 1/62, noobs sepby(qm)