get via CCXT all (historic) transactions
This commit is contained in:
parent
03ebb54e38
commit
acccc2a463
205
dabo/functions/get_transactions.sh
Normal file
205
dabo/functions/get_transactions.sh
Normal file
@ -0,0 +1,205 @@
|
|||||||
|
function get_transactions {
|
||||||
|
|
||||||
|
g_echo_note "RUNNING FUNCTION ${FUNCNAME} $@"
|
||||||
|
|
||||||
|
local f_exchange f_symbols f_symbol
|
||||||
|
local DEFAULT_STOCK_EXCHANGE=$STOCK_EXCHANGE
|
||||||
|
|
||||||
|
for f_exchange in /dabo/.*-secrets;
|
||||||
|
do
|
||||||
|
# extract ccxt exchange from filename
|
||||||
|
g_basename $f_exchange
|
||||||
|
f_exchange=${g_basename_result/-secrets}
|
||||||
|
f_exchange=${f_exchange/.}
|
||||||
|
STOCK_EXCHANGE=$f_exchange
|
||||||
|
|
||||||
|
[[ $f_exchange = bitpanda ]] && continue
|
||||||
|
[[ $f_exchange = onetrading ]] && continue
|
||||||
|
|
||||||
|
g_echo_note "Exchange: $f_exchange"
|
||||||
|
|
||||||
|
f_ccxt "print(${STOCK_EXCHANGE}.symbols)"
|
||||||
|
f_symbols=${f_ccxt_result}
|
||||||
|
f_symbols=${f_symbols//\"}
|
||||||
|
f_symbols=${f_symbols//, /+}
|
||||||
|
f_symbols=${f_symbols//\[}
|
||||||
|
f_symbols=${f_symbols//\]}
|
||||||
|
|
||||||
|
# transfer-dir
|
||||||
|
mkdir -p "TRANSACTIONS-$f_exchange"
|
||||||
|
# create timestamp file
|
||||||
|
touch --time=mtime -t $(date -d "now -1 day" +%Y%m%d%H%M) TRANSACTIONS-TIMESTAMP
|
||||||
|
|
||||||
|
# go through symbols
|
||||||
|
local f_orig_IFS=$IFS
|
||||||
|
IFS=+
|
||||||
|
for f_symbol in $f_symbols
|
||||||
|
do
|
||||||
|
#echo $f_symbol
|
||||||
|
#[[ $f_symbol =~ ETH|BTC ]] || continue
|
||||||
|
IFS=$f_orig_IFS
|
||||||
|
# binance does not allow derivate trading in germany so ignore because of 400-Error
|
||||||
|
[[ $f_symbol =~ : ]] && [[ $f_exchange = binance ]] && continue
|
||||||
|
f_symbol_file="TRANSACTIONS-$f_exchange/${f_symbol//\/}"
|
||||||
|
|
||||||
|
# remove file older then 1 day and refetch
|
||||||
|
[ "$f_symbol_file" -ot TRANSACTIONS-TIMESTAMP ] && rm -f "$f_symbol_file"
|
||||||
|
|
||||||
|
# fetch only if not exists
|
||||||
|
[ -f "$f_symbol_file" ] && continue
|
||||||
|
g_echo_note "fetchng closed orders of $f_symbol"
|
||||||
|
f_ccxt "print(${STOCK_EXCHANGE}.fetchMyTrades(symbol='$f_symbol', limit=500, params={'paginate': True}))"
|
||||||
|
|
||||||
|
# write to file
|
||||||
|
#cat ${g_python_out} >"$f_symbol_file"
|
||||||
|
[[ $f_ccxt_result = \[\] ]] && f_ccxt_result=""
|
||||||
|
echo -n $f_ccxt_result >"$f_symbol_file"
|
||||||
|
|
||||||
|
# continue if no trade
|
||||||
|
[ -z "$f_ccxt_result" ] && continue
|
||||||
|
|
||||||
|
# get f_asset+f_currency from symbol (BTC/USDT)
|
||||||
|
g_array $f_symbol f_symbol_array /
|
||||||
|
f_asset=${f_symbol_array[0]}
|
||||||
|
f_currency=${f_symbol_array[1]}
|
||||||
|
|
||||||
|
f_symbol_file_csv_tmp="${f_symbol_file}.csv.tmp"
|
||||||
|
f_symbol_file_csv="${f_symbol_file}.csv"
|
||||||
|
>"${f_symbol_file_csv_tmp}"
|
||||||
|
|
||||||
|
# Check for contract/leverage Trade
|
||||||
|
f_leverage=""
|
||||||
|
if [[ $f_currency =~ : ]]
|
||||||
|
then
|
||||||
|
# mark
|
||||||
|
f_leverage="leverage-"
|
||||||
|
|
||||||
|
# get funding fees
|
||||||
|
f_ccxt "print(${STOCK_EXCHANGE}.fetchFundingHistory('$f_symbol', limit=200, params={'paginate': True}))"
|
||||||
|
[[ $f_ccxt_result = \[\] ]] || echo -n $f_ccxt_result >"${f_symbol_file}.FundingFees"
|
||||||
|
cat ${f_symbol_file}.FundingFees | jq -r "
|
||||||
|
.[] |
|
||||||
|
.datetime + \",fundingfee,$f_asset,0,\" + .code + \",0\" + \",$f_exchange,\" + .code + \",\" + (.amount|tostring)
|
||||||
|
" >>$f_symbol_file_csv_tmp
|
||||||
|
|
||||||
|
# remove the ':' in f_currency
|
||||||
|
g_array "$f_currency" f_currency_array :
|
||||||
|
f_currency=${f_currency_array[0]}
|
||||||
|
fi
|
||||||
|
|
||||||
|
# generate csv
|
||||||
|
# get longs (posSide=="1")
|
||||||
|
cat "$f_symbol_file" | jq -r "
|
||||||
|
.[] |
|
||||||
|
select(.side==\"buy\" or .side==\"sell\") |
|
||||||
|
select(.info.posSide==\"1\") |
|
||||||
|
select(.symbol!= null) |
|
||||||
|
.datetime + \",$f_leverage\" + .side + \",$f_asset,\" + (.amount|tostring) + \",$f_currency,\" + (.cost|tostring) + \",$f_exchange,\" + .fee.currency + \",\" + (.fee.cost|tostring)
|
||||||
|
" >>"$f_symbol_file_csv_tmp"
|
||||||
|
|
||||||
|
# get shorts (posSide=="2") sell first, then buy (https://github.com/ccxt/ccxt/issues/22518)
|
||||||
|
cat "$f_symbol_file" | jq -r "
|
||||||
|
.[] |
|
||||||
|
select(.side==\"sell\") |
|
||||||
|
select(.info.posSide==\"2\") |
|
||||||
|
select(.symbol!= null) |
|
||||||
|
.side = \"sell\" |
|
||||||
|
.datetime + \",$f_leverage\" + .side + \",$f_asset,\" + (.amount|tostring) + \",$f_currency,\" + (.cost|tostring) + \",$f_exchange,\" + .fee.currency + \",\" + (.fee.cost|tostring) + \",short\"
|
||||||
|
" >>"$f_symbol_file_csv_tmp"
|
||||||
|
|
||||||
|
cat "$f_symbol_file" | jq -r "
|
||||||
|
.[] |
|
||||||
|
select(.side==\"buy\") |
|
||||||
|
select(.info.posSide==\"2\") |
|
||||||
|
select(.symbol!= null) |
|
||||||
|
.side = \"buy\" |
|
||||||
|
.datetime + \",$f_leverage\" + .side + \",$f_asset,\" + (.amount|tostring) + \",$f_currency,\" + (.cost|tostring) + \",$f_exchange,\" + .fee.currency + \",\" + (.fee.cost|tostring) + \",short\"
|
||||||
|
" >>"$f_symbol_file_csv_tmp"
|
||||||
|
|
||||||
|
if [ -s "$f_symbol_file_csv_tmp" ]
|
||||||
|
then
|
||||||
|
if [ -s "$f_symbol_file_csv" ]
|
||||||
|
then
|
||||||
|
cat "$f_symbol_file_csv_tmp" "$f_symbol_file_csv" | sort -u >"${f_symbol_file_csv}.sorted"
|
||||||
|
mv "${f_symbol_file_csv}.sorted" "$f_symbol_file_csv"
|
||||||
|
rm "$f_symbol_file_csv_tmp"
|
||||||
|
else
|
||||||
|
mv "$f_symbol_file_csv_tmp" "$f_symbol_file_csv"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
rm "$f_symbol_file_csv_tmp"
|
||||||
|
fi
|
||||||
|
|
||||||
|
done
|
||||||
|
|
||||||
|
## Get converts on supported exchanges since 2022
|
||||||
|
if [[ $f_exchange = binance ]]
|
||||||
|
then
|
||||||
|
printf -v f_convert_end_year '%(%Y)T'
|
||||||
|
for ((y=2022;y<=$f_convert_end_year;y++))
|
||||||
|
do
|
||||||
|
f_convert_end_month=12
|
||||||
|
[[ $y == $f_convert_end_year ]] && printf -v f_convert_end_month '%(%m)T'
|
||||||
|
for ((m=1;m<=$f_convert_end_month;m++))
|
||||||
|
do
|
||||||
|
f_start_date="$(date -d "$y-$m-1" +%s)001"
|
||||||
|
em=$((m+1))
|
||||||
|
[ $em = 13 ] && em=1
|
||||||
|
f_end_date="$(date -d "$y-$em-1" +%s)000"
|
||||||
|
f_convert_file="TRANSACTIONS-$f_exchange/CONVERT-$y-$m"
|
||||||
|
|
||||||
|
[ -s "${f_convert_file}.csv" ] && continue
|
||||||
|
|
||||||
|
f_ccxt "print(${f_exchange}.fetchConvertTradeHistory(since=${f_start_date}, params={'until': ${f_end_date}}))"
|
||||||
|
[[ $f_ccxt_result = \[\] ]] && f_ccxt_result=""
|
||||||
|
echo -n $f_ccxt_result >"$f_convert_file"
|
||||||
|
|
||||||
|
if [ -s "$f_convert_file" ]
|
||||||
|
then
|
||||||
|
cat "$f_convert_file" | jq -r "
|
||||||
|
.[] |
|
||||||
|
select(.info.side==\"BUY\") |
|
||||||
|
.datetime + \",\" + (.info.side|ascii_downcase) + \",\" + .toCurrency + \",\" + (.toAmount|tostring) + \",\" + .fromCurrency + \",\" + (.fromAmount|tostring) + \",$f_exchange\"
|
||||||
|
" >"${f_convert_file}.csv"
|
||||||
|
cat "$f_convert_file" | jq -r "
|
||||||
|
.[] |
|
||||||
|
select(.info.side==\"SELL\") |
|
||||||
|
.datetime + \",\" + (.info.side|ascii_downcase) + \",\" + .fromCurrency + \",\" + (.fromAmount|tostring) + \",\" + .toCurrency + \",\" + (.toAmount|tostring) + \",$f_exchange\"
|
||||||
|
" >>"${f_convert_file}.csv"
|
||||||
|
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
# put all sorted n one file
|
||||||
|
if [ -s TRANSACTIONS-$f_exchange.csv ]
|
||||||
|
then
|
||||||
|
cat "TRANSACTIONS-$f_exchange/"*.csv TRANSACTIONS-$f_exchange.csv | sort -u >TRANSACTIONS-$f_exchange.csv.tmp
|
||||||
|
mv TRANSACTIONS-$f_exchange.csv.tmp TRANSACTIONS-$f_exchange.csv
|
||||||
|
else
|
||||||
|
cat "TRANSACTIONS-$f_exchange/"*.csv | sort -u >TRANSACTIONS-$f_exchange.csv
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Switch sides if Fiat is in Krypto side
|
||||||
|
local f_fiats="USD EUR"
|
||||||
|
local f_fiat
|
||||||
|
for f_fiat in $f_fiats
|
||||||
|
do
|
||||||
|
[ -f TRANSACTIONS-$f_exchange.csv.tmp ] && rm TRANSACTIONS-$f_exchange.csv.tmp
|
||||||
|
grep -h ",sell,$f_fiat," TRANSACTIONS-$f_exchange.csv | awk -F, '{print $1",buy,"$5","$6","$3","$4","$7","$8","$9}' >>TRANSACTIONS-$f_exchange.csv.tmp
|
||||||
|
grep -h ",buy,$f_fiat," TRANSACTIONS-$f_exchange.csv | awk -F, '{print $1",sell,"$5","$6","$3","$4","$7","$8","$9}' >>TRANSACTIONS-$f_exchange.csv.tmp
|
||||||
|
if [ -s TRANSACTIONS-$f_exchange.csv.tmp ]
|
||||||
|
then
|
||||||
|
g_echo_note "Switched some fiat/krypto sides"
|
||||||
|
#cat TRANSACTIONS-$f_exchange.csv.tmp
|
||||||
|
cat TRANSACTIONS-$f_exchange.csv | egrep -v ",sell,$f_fiat,|,buy,$f_fiat," >>TRANSACTIONS-$f_exchange.csv.tmp
|
||||||
|
cat TRANSACTIONS-$f_exchange.csv.tmp | sort >TRANSACTIONS-$f_exchange.csv
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
done
|
||||||
|
STOCK_EXCHANGE=$DEFAULT_STOCK_EXCHANGE
|
||||||
|
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user