Compare commits

...

4 Commits

Author SHA1 Message Date
oleg c2dae20d7b improvements to alpaca md 2024-03-26 11:30:41 -04:00
oleg 8607db6506 fix 2024-03-25 20:42:35 -04:00
oleg 465d4c746e progress 2024-03-25 18:04:49 -04:00
oleg 70c7769fd6 fix and progress 2024-03-24 16:40:20 -04:00
4 changed files with 110 additions and 29 deletions
+1 -1
View File
@@ -1 +1 @@
0.6.4 0.6.8
+28
View File
@@ -0,0 +1,28 @@
#!/bin/bash
CredsFile=${1}
CredKey=${2}
if [ "${CredsFile}" == "" ] ; then
CredsFile="${HOME}/.creds"
fi
if [ "${CredKey}" == "" ] ; then
CredKey="ALPACA_SANDBOX"
fi
key=$(jq -r ".[\"${CredKey}\"] | .api_key" ${CredsFile})
secret=$(jq -r ".[\"${CredKey}\"] | .secret_key" ${CredsFile})
Cmd="curl -s --request GET --url 'https://paper-api.alpaca.markets/v2/assets?status=active'"
Cmd="${Cmd} --header 'APCA-API-KEY-ID: ${key}'"
Cmd="${Cmd} --header 'APCA-API-SECRET-KEY: ${secret}'"
Cmd="${Cmd} --header 'accept: application/json'"
eval ${Cmd}
# split string into array
Instruments=()
for Inst in $(eval ${Cmd})
do
Instruments+=("$Inst")
done
+22 -18
View File
@@ -1,6 +1,11 @@
#!/bin/bash #!/bin/bash
CalendarURL=http://cloud16.cvtt.vpn:8000/api/v1/markets/hours?mic=XNYS Start=${1}
NumJobs=${2}
InstListFile=${3}
export CalendarURL=http://cloud16.cvtt.vpn:8000/api/v1/markets/hours?mic=XNYS
is_business_day() { is_business_day() {
dt=${1} dt=${1}
@@ -14,13 +19,9 @@ is_business_day() {
} }
export -f is_business_day export -f is_business_day
Start=${1}
End=${2}
NumJobs=${3}
if [ "${Start}" == "" ] ; then if [ "${Start}" == "" ] ; then
echo "Usage: ${0} <start_date> [<end_date>] [<num_jobs> (25)]]" Start=$(date -d "yesterday" "+%Y-%m-%d")
exit
fi fi
if ! is_business_day ${Start}; then if ! is_business_day ${Start}; then
@@ -28,23 +29,23 @@ if ! is_business_day ${Start}; then
exit exit
fi fi
if [ "${End}" == "" ] ; then
End=$(date -d "${Start} + 1 day" "+%Y-%m-%d") End=$(date -d "${Start} + 1 day" "+%Y-%m-%d")
fi
if [ "${NumJobs}" == "" ] ; then if [ "${NumJobs}" == "" ] ; then
NumJobs=25 NumJobs=30
fi fi
echo "Start=${Start} End=${End} NumJobs=${NumJobs}" echo "Start=${Start} End=${End} NumJobs=${NumJobs}"
export PYTHONPATH=/home/cvtt/prod
export Python=/home/cvtt/.pyenv/python3.10-venv/bin/python3
export PyScript=/home/cvtt/prod/cvttpy/exchanges/alpaca/hist_mkt_data.py
Python=/home/cvtt/.pyenv/python3.10-venv/bin/python3 export OutputDir=/home/cvtt/host_drive/alpaca_md # Local
PyScript=/home/cvtt/prod/cvttpy/exchanges/alpaca/hist_mkt_data.py export Config=http://cloud16.cvtt.vpn:6789/apps/minimal_md
export LogDir=/home/cvtt/prod/logs/alpaca_md
OutputDir=/home/cvtt/alpaca_md
Config=http://cloud16.cvtt.vpn:6789/apps/minimal_md
mkdir -p ${LogDir}
run_proc() { run_proc() {
Inst=${1} Inst=${1}
@@ -52,7 +53,6 @@ run_proc() {
End=${3} End=${3}
echo "Running for $Inst" echo "Running for $Inst"
Cmd="${Python} ${PyScript}" Cmd="${Python} ${PyScript}"
Cmd="${Cmd} --config=${Config}" Cmd="${Cmd} --config=${Config}"
Cmd="${Cmd} --output_dir=${OutputDir}" Cmd="${Cmd} --output_dir=${OutputDir}"
@@ -61,14 +61,15 @@ run_proc() {
if [ "${End}" != "" ]; then if [ "${End}" != "" ]; then
Cmd="${Cmd} --end=${End}" Cmd="${Cmd} --end=${End}"
fi fi
Cmd="${Cmd} --log_file=./logs/${Start}.${Inst}.log" Cmd="${Cmd} --log_file=${LogDir}/${Start}.${Inst}.log"
echo ${Cmd} echo ${Cmd}
eval ${Cmd} eval ${Cmd}
} }
export PYTHONPATH=/home/cvtt/prod
export -f run_proc export -f run_proc
if [ -n $InstListFile ]; then
key=$(jq -r '.["ALPACA_SANDBOX"] | .api_key' ~/.creds) key=$(jq -r '.["ALPACA_SANDBOX"] | .api_key' ~/.creds)
secret=$(jq -r '.["ALPACA_SANDBOX"] | .secret_key' ~/.creds) secret=$(jq -r '.["ALPACA_SANDBOX"] | .secret_key' ~/.creds)
@@ -79,6 +80,9 @@ Cmd="${Cmd} --header 'accept: application/json'"
Cmd="${Cmd} | jq '.[] | select(.class == \"us_equity\" and .exchange != \"OTC\") | .symbol'" Cmd="${Cmd} | jq '.[] | select(.class == \"us_equity\" and .exchange != \"OTC\") | .symbol'"
Cmd="${Cmd} | sed 's/\"//g'" Cmd="${Cmd} | sed 's/\"//g'"
Cmd="${Cmd} | sed 's/^/STOCK-/'" Cmd="${Cmd} | sed 's/^/STOCK-/'"
else
Cmd="cat ${InstListFile}"
fi
# split string into array # split string into array
Instruments=() Instruments=()
@@ -87,7 +91,7 @@ do
Instruments+=("$Inst") Instruments+=("$Inst")
done done
slice_size=100 # 10K symbols parallel cannot handle slice_size=500 # 10K symbols parallel cannot handle
for ((ii=0; ii <${#Instruments[@]}; ii+=slice_size)); do for ((ii=0; ii <${#Instruments[@]}; ii+=slice_size)); do
InstSlice=("${Instruments[@]:ii:slice_size}") InstSlice=("${Instruments[@]:ii:slice_size}")
+49
View File
@@ -0,0 +1,49 @@
#!/bin/bash
is_business_day() {
dt=${1}
open_time=$(curl -s "${CalendarURL}&start=${dt}&end=${dt}" | jq '.[] | .open_time')
if [ -n "${open_time}" ]; then
return 0
else
return 1
fi
}
export -f is_business_day
# Dates are in descending order
FinishedDateFile=${HOME}/prod/run/alpaca_md_last_date
Script=${HOME}/prod/run/alpaca_md.sh
last_date=$(cat ${FinishedDateFile})
if [ "${last_date}" == "" ]; then
echo "process is currently on"
exit
fi
while true; do
new_date=$(date -d "${last_date} - 1 day" "+%Y-%m-%d")
if is_business_day ${new_date}; then
break
else
last_date=${new_date}
fi
done
echo Collecting data for ${new_date}
Cmd="${Script} ${new_date}"
echo "${0} Starting at $(date)"
echo > ${FinishedDateFile}
echo ${Cmd} && eval ${Cmd}
echo $new_date > ${FinishedDateFile}
echo "${0} Done at $(date)"