119 lines
4.4 KiB
Bash
119 lines
4.4 KiB
Bash
function binance_convert {
|
|
# Info for log
|
|
g_echo_note "RUNNING FUNCTION ${FUNCNAME} $@"
|
|
|
|
# needed vars
|
|
local f_ASSET=$1
|
|
local f_CURRENCY=$2
|
|
local f_QUANTITY=$3
|
|
local f_ACTION=$4 # buy or sell
|
|
local f_COMMENT=$5
|
|
local f_QUANTITY_CURRENCY=$6
|
|
|
|
local f_DATE=$(date '+%F_%H-%M-%S')
|
|
local f_ASSET_HIST_FILE="asset-histories/${f_ASSET}${f_CURRENCY}.history.csv"
|
|
|
|
local f_link="https://www.coingecko.com/de/munze/$(egrep -i ^${f_ASSET}, COINGECKO_IDS | cut -d, -f2)"
|
|
|
|
local f_CMDFILE="trade-histories/${f_DATE}-${f_CURRENCY}-BINANCE_CONVERT-TRADE_CMD"
|
|
|
|
local f_num_converts=$(find trade-histories/*-*-BINANCE_CONVERT-TRADE_CMD -type f -mmin 60 | wc -l)
|
|
if [ $f_num_converts -ge 99 ]
|
|
then
|
|
g_echo_note "Already did 99 or more binance converts last hour."
|
|
return 1
|
|
fi
|
|
|
|
if [ "${f_ACTION}" = "buy" ]
|
|
then
|
|
# check for enough balance for trade
|
|
get_balances
|
|
local f_CURRENCY_BALANCE=$(egrep "^${f_CURRENCY}," EXCHANGE_GET_BALANCES_CMD_OUT | cut -d"," -f2)
|
|
g_echo_note "Checking for enough balance for trade (${f_CURRENCY_BALANCE} > ${f_QUANTITY})"
|
|
if [ $(echo "${f_CURRENCY_BALANCE} > ${f_QUANTITY}" | bc -l) -eq 0 ]
|
|
then
|
|
local f_note="Not enough balance for trade (${f_CURRENCY_BALANCE} > ${f_QUANTITY}) :${f_COMMENT}
|
|
${FUNCNAME} $@"
|
|
g_echo_note "$f_note"
|
|
g_signal-notify "$f_note"
|
|
return 1
|
|
fi
|
|
|
|
# get quote on buy
|
|
echo "binance-api-call POST /sapi/v1/convert/getQuote '&fromAsset=${f_CURRENCY}&toAsset=${f_ASSET}&fromAmount=${f_QUANTITY}&walletType=SPOT&validTime=10s'" >${f_CMDFILE}
|
|
fi
|
|
|
|
if [ "${f_ACTION}" = "sell" ]
|
|
then
|
|
# get quote on sell
|
|
echo "binance-api-call POST /sapi/v1/convert/getQuote '&fromAsset=${f_ASSET}&toAsset=${f_CURRENCY}&fromAmount=${f_QUANTITY}&walletType=SPOT&validTime=10s'" >${f_CMDFILE}
|
|
fi
|
|
|
|
echo "cat ${g_tmp}/API_CMD_OUT >${f_CMDFILE}_QUOTE_OUT
|
|
local f_quoteid=\$(cat ${g_tmp}/API_CMD_OUT | jq -r '.quoteId')
|
|
binance-api-call POST /sapi/v1/convert/acceptQuote \""eId=\${f_quoteid}\"
|
|
cat ${g_tmp}/API_CMD_OUT >${f_CMDFILE}_OUT
|
|
" >>${f_CMDFILE}
|
|
|
|
# convert/trade
|
|
g_echo_note "Command: $(cat ${f_CMDFILE})"
|
|
. ${f_CMDFILE}
|
|
cat ${g_tmp}/API_CMD_OUT >${f_CMDFILE}_OUT
|
|
g_echo_note "Command Output: $(cat ${f_CMDFILE}_OUT)"
|
|
|
|
|
|
# Check return and log trade
|
|
f_STATUS=$(cat ${f_CMDFILE}_OUT | grep '^{' | jq -r .orderStatus)
|
|
|
|
local f_trade_info_msg="CONVERT/TRADE - ${f_ACTION} ${f_ASSET}${f_CURRENCY}
|
|
${f_link}
|
|
|
|
Complete Overview: https://bot.ds9.dedyn.io/
|
|
|
|
Comment: ${f_COMMENT}"
|
|
|
|
if echo "${f_STATUS}" | egrep -q "PROCESS|ACCEPT_SUCCESS|SUCCESS"
|
|
then
|
|
g_echo_note "CONVERT/TRADE SUCCESSFUL!"
|
|
[ "${f_ACTION}" = "buy" ] && local f_PRICE=$(cat ${f_CMDFILE}_QUOTE_OUT | grep '^{' | jq -r .inverseRatio | head -n1)
|
|
[ "${f_ACTION}" = "sell" ] && local f_PRICE=$(cat ${f_CMDFILE}_QUOTE_OUT | grep '^{' | jq -r .ratio | head -n1)
|
|
local f_COMMISSION="0"
|
|
local f_COMMISSIONASSET="${f_CURRENCY}"
|
|
echo "${f_DATE},${f_ACTION},${f_CMDFILE}_OUT,${f_QUANTITY} ${f_CURRENCY},${f_PRICE},${f_COMMISSION} ${f_COMMISSIONASSET},${f_COMMENT}" | head -n1 >>trade-histories/${f_ASSET}${f_CURRENCY}.history.csv
|
|
if [ "${f_ACTION}" = "buy" ]
|
|
then
|
|
echo "${f_DATE},${f_ACTION},${f_CMDFILE}_OUT,${f_QUANTITY} ${f_CURRENCY},${f_PRICE},${f_COMMISSION} ${f_COMMISSIONASSET},${f_COMMENT}" | head -n1 >>trade-histories/trade-$(date +%F.%T. | sed 's/:/_/g')${f_ASSET}${f_CURRENCY}-open.history.csv
|
|
fi
|
|
if [ "${f_ACTION}" = "sell" ]
|
|
then
|
|
f_tradehistfile="$(ls trade-histories/trade-*${f_ASSET}${f_CURRENCY}-open.history.csv | tail -n1)"
|
|
echo "${f_DATE},${f_ACTION},${f_CMDFILE}_OUT,${f_QUANTITY_CURRENCY} ${f_CURRENCY},${f_PRICE},${f_COMMISSION} ${f_COMMISSIONASSET},${f_COMMENT}" | head -n1 >>${f_tradehistfile}
|
|
f_tradehistfileclosed=$(echo ${f_tradehistfile} | sed 's/open.history.csv/closed.history.csv/')
|
|
mv ${f_tradehistfile} ${f_tradehistfileclosed}
|
|
fi
|
|
g_signal-notify "CONVERT/TRADE SUCCESSFUL!
|
|
|
|
${f_trade_info_msg}
|
|
|
|
Command stored: ${f_CMDFILE}[_OUT]"
|
|
[ -f DIFF_BUY_PRICE_${f_ASSET}${f_CURRENCY} ] && [ "${f_ACTION}" = "sell" ] && rm -f DIFF_BUY_PRICE_${f_ASSET}${f_CURRENCY}
|
|
# get new balances
|
|
get_balances
|
|
return 0
|
|
else
|
|
g_echo_note "CONVERT/TRADE FAILED!
|
|
$(cat ${f_CMDFILE}_OUT)"
|
|
g_signal-notify "CONVERT/TRADE FAILED!
|
|
${f_trade_info_msg}
|
|
|
|
Command ${f_CMDFILE}:
|
|
$0 $@
|
|
$(cat ${f_CMDFILE})
|
|
|
|
OUTPUT:
|
|
$(cat ${f_CMDFILE}_OUT)
|
|
"
|
|
return 1
|
|
fi
|
|
}
|