72 lines
2.6 KiB
Markdown
72 lines
2.6 KiB
Markdown
|
|
# Charls Schwab Quote recording bot
|
||
|
|
|
||
|
|
## Expiry
|
||
|
|
* Access token expires in 30 Min.
|
||
|
|
* Refresh token expires in ?
|
||
|
|
|
||
|
|
## File - Descriptions
|
||
|
|
### **`appCredentials.dat`**
|
||
|
|
* Base64 encoded App Credentials - `"{app key}:{secret}"`
|
||
|
|
* Manually maintained
|
||
|
|
|
||
|
|
### **`appKey.dat`**
|
||
|
|
* only the application's AppKey
|
||
|
|
* Manually maintained
|
||
|
|
|
||
|
|
#### **`allSymbols.json`**
|
||
|
|
* List of all Symbols to get Data for
|
||
|
|
* Manually maintained
|
||
|
|
|
||
|
|
### **`access_token.dat`**
|
||
|
|
* Current Access Token
|
||
|
|
* written by `getNewAccessToken.sh`
|
||
|
|
|
||
|
|
### **`accessTokenReqResp.json`**
|
||
|
|
* Full JSON response of the last Access Token request
|
||
|
|
* written by `getNewAccessToken.sh`
|
||
|
|
|
||
|
|
### **`refresh_token.dat`**
|
||
|
|
* Current refresh token
|
||
|
|
* written by `getNewRefreshToken.sh`
|
||
|
|
|
||
|
|
### **`refreshTokenReqResp.json`**
|
||
|
|
* Full JSON response of the last Refresh Token request
|
||
|
|
* written by `getNewRefreshToken.sh`
|
||
|
|
|
||
|
|
### **`codeReceiveServer.py`**
|
||
|
|
* Python HTTPS web server to receive and output the Authentication code from the Schwab Website callback
|
||
|
|
* This web server only runs temporarily and ends after receiving a request
|
||
|
|
|
||
|
|
### **`cert.pem`**
|
||
|
|
* self signed certificate for the temporary HTTPS server that receives the code.
|
||
|
|
* Manually maintained with:
|
||
|
|
`openssl req -new -x509 -keyout cert.pem -out cert.pem -days 365 -nodes`
|
||
|
|
*Answer all questions hitting enter.*
|
||
|
|
|
||
|
|
## **`data/`**
|
||
|
|
* Folder containing date sub-folders for the output data
|
||
|
|
* Created and maintained by `recordSingleSymbolSingleRun.sh`
|
||
|
|
|
||
|
|
### **`getNewAccessToken.sh`**
|
||
|
|
* Gets a new access Token and saves it to file `access_token.dat`
|
||
|
|
|
||
|
|
### **`getNewRefreshToken.sh`**
|
||
|
|
* Gets a new refresh Token and saves it to file `refresh_token.dat`
|
||
|
|
|
||
|
|
### **`recordAllSymbolsSingleRun.sh`**
|
||
|
|
* Runs `recordSingleSymbolSingleRun.sh` for every Symbol in file `allSymbols.json`
|
||
|
|
|
||
|
|
### **`recordQuoteSingleSymbolSingleRun.sh`**
|
||
|
|
* requests stock quote data for a single symbol and writes output into the `data/*` Folder structure.
|
||
|
|
|
||
|
|
### **`recordOptionChainSingleSymbolSingleRun.sh`**
|
||
|
|
* requests option chain data for a single symbol and writes output into the `data/*` Folder structure.
|
||
|
|
|
||
|
|
|
||
|
|
# NEW CHANGES, NEED TO DOCUMENT
|
||
|
|
jq <<< '{ "numberOfContracts":'$(( $(jq '.numberOfContracts' < ITM.json) + $(jq '.numberOfContracts' < OTM.json) ))' }' > numberOfContracts.tmp
|
||
|
|
jq '. | del(.numberOfContracts) | map_values(select(type!="object"))' < ITM.json > CommonDetail.tmp
|
||
|
|
jq '. | map_values(select(type=="object"))' < ITM.json > ITMo.tmp
|
||
|
|
jq '. | map_values(select(type=="object"))' < OTM.json > OTMo.tmp
|
||
|
|
jq -s '.[0] * .[1] * .[2] * .[3]' numberOfContracts.tmp CommonDetail.tmp ITMo.tmp OTMo.tmp | less
|