Noong Martes, 10:07, may na-flag ang research agent namin na panandaliang bullish setup sa isang index ETF. Karaniwan lang ang pinagbabatayang signal: nabawi ng presyo ang 20-bar average nito, humuhupa ang realized volatility, at may nakaiskedyul na macro release sa susunod na session. Ang iminungkahing trade ay call spread na may humigit-kumulang dalawang linggo bago mag-expire.
Nagustuhan ito ng backtest. Hindi ito inilagay ng paper strategy. Nang ikumpara namin ang mga order, magkatugma ang mga timestamp ng signal at ilang sentimo lang ang pagitan ng mga presyo ng underlying. Magkaiba ang mga kontrata: binili ng backtest ang expiration sa Biyernes na pinakamaganda ang itsura sa historical chain; pinili naman ng paper process ang susunod na naka-listang expiration, isang linggo pagkaraan.
Dahil sa calendar join ang agwat na iyon. Itinuring namin ang “days to expiration” bilang katangian ng isang petsa, saka pinili ang kontratang pinakamalapit ang expiration sa target. Sa historical data, kasama sa expiration calendar ang isang weekly listing na idinagdag matapos ang petsang sinusuri namin. Gumamit ang backtest ng kontrata mula sa hinaharap sa paraang mukhang walang-salang pampadali lang.
Noong una, timezone bug ang hinala namin. Madalas pagmulan ng ganitong problema ang mga petsa ng expiration ng options: sa New York nagtatapos ang market session, maaaring naka-imbak sa UTC ang mga timestamp ng exchange, at puwedeng magbago ang petsang hatinggabi kapag pabaya itong kino-convert ng pipeline. Sinuri namin. Maayos ang mga timestamp. Hindi lang talaga umiiral ang kontrata sa historical universe noong Martes na iyon.
Ito ang unang aral: kailangan ng historical option chain ng point-in-time na listing universe. Sinasabi ng expiration date ng kontrata kung kailan ito magtatapos. Hindi nito sinasabi kung kailan ito inilista, kung kailan ito naging puwedeng i-trade, o kung mapipili sana ito ng sistema mo noon.
Muli naming binuo ang hakbang ng pagpili batay sa impormasyong available sa timestamp ng pagdedesisyon. Para sa bawat posibleng kontrata, itinakda naming dapat hindi lalampas sa oras ng desisyon ang listing timestamp, hindi lalampas sa freshness threshold namin ang edad ng valid na quote, at dapat nasa market session kung kailan makapagsusumite ng order ang strategy. Itinala rin namin ang hanay ng mga kandidato bago sila niranggo. Mahalaga ang huling bahaging iyon dahil ang nanalo lang ang itinago ng lumang backtest; hindi namin matukoy kung ikinumpara nito ang limang kwalipikadong kontrata o palihim itong pumili mula sa kalendaryong hindi pa dumarating.
Sumunod naming sinuri ang quote na ginamit sa pagpresyo ng spread. Hiwalay na kinuha ng backtest ang pinakahuling quote ng bawat leg. Mula 10:06:58 ang ask ng call; mula 10:04:11 naman ang bid ng short call. Pasok pa sa maluwag na data policy ang edad ng dalawa, pero gumalaw na ang market sa pagitan ng mga oras na iyon. Maaaring kumatawan ang midpoint ng spread na binuo mula sa magkakaibang oras ng mga leg sa market na hindi kailanman umiral.
Binago namin ang patakaran sa quote para hinging hindi lalampas sa dalawang segundo ang pagitan ng timestamp ng dalawang leg at tanggihan ang mga market na crossed o walang sukat. Bumaba ang dami ng magagamit na historical observation. Mas kapani-paniwala naman ang mga natirang presyo. Kapag walang sabayang quote, minarkahan naming unavailable ang kandidato sa halip na punan ang puwang gamit ang lumang presyo.
Sumunod ang patakaran sa pagraranggo. Pinili ng agent ang expiration na may pinakamababang quoted spread cost. Mukhang makatuwiran ito hangga't hindi isang kontrata lang ang lawak ng spread at luma ang quote. Nilinaw namin ang layunin: i-maximize ang inaasahang payoff sa bawat yunit ng itinakdang risk, sa hanay ng mga kontratang pumapasa sa minimum na laki ng quote, freshness, at mga pagsusuri sa listing. Sa halimbawang ito, $0.42 ang quoted width ng pinakamalapit na kwalipikadong expiration sa dalawang leg, samantalang $0.31 naman sa mas huling expiration. Isang kontrata lang din ang nakadispley sa short leg ng mukhang mas murang pagpili.
| Kandidato | Available ba noon ang expiration? | Edad ng quote | Laki ng nakadispley na short leg | Desisyon |
|---|---|---|---|---|
| Weekly sa Biyernes | Hindi | Hindi naaangkop | Hindi naaangkop | Alisin |
| Susunod na Biyernes | Oo | 1.4 segundo | 18 kontrata | Kwalipikado |
| Ikatlong Biyernes | Oo | 9.8 segundo | 1 kontrata | Alisin dahil luma at manipis ang market |
Muli naming pinatakbo ang insidente gamit ang mga patakarang iyon. Pareho na ang expiration na pinili ng backtest at paper, at naitala kung bakit tinanggihan ang ibang kontrata. Mas malala nang $0.11 ang naging entry sa spread kumpara sa orihinal na historical fill. Hindi ibig sabihin nito na walang halaga ang strategy; kasama sa lumang performance number ang pagpili ng trade na hindi kayang ulitin ng live process.
May isa pang maliit na abala: dahil sa mga format ng simbolo ng exchange, nagmumukhang problema sa kalidad ng datos ang mga bug sa expiration. May nakita kaming weekly code ng isang vendor na nagkakaiba ng isang character sa monthly code. Inilalagay ko pa rin sa audit log ang raw symbol katabi ng normalized contract key. Hindi ito elegante, pero napigilan na kami nitong magtiwala agad sa mukhang maayos na join.
Kung gumagawa ka ng options backtest, itago ang buong hanay ng mga kandidato sa bawat desisyon, kasama ang listing status, mga timestamp at laki ng quote, at dahilan ng pagtanggi para sa bawat kontrata. Pagkatapos, gawing deterministic function ng snapshot na iyon ang pagpili ng kontrata. Bahagi ng strategy ang pagpili ng expiration. Kung nakakakita ang backtest ng kontratang hindi nakikita ng paper, nagbabago na ang sagot bago pa magsimula ang paghahambing ng mga signal.
← Lahat ng post


