#!/bin/bash . /dabo/dabo-prep.sh ### MAIN ### g_echo_warn "STARTING DABO BOT $0" touch firstloop export FULL_LOOP=1 # am I the bot (important for functions used by analyze.sh echo $0 | grep -q "dabo-bot\.sh" && BOT=1 # cleanup trashlines in asset-histories (possibly generated by kill further of this progress) find asset-histories -name "*.csv" -type f | while read csv_file do csv_timestamp=$(ls --time-style='+%Y%m%d%H%M' -l "${csv_file}" | cut -d" " -f6) sed -i "/[0-9]$(date +%Y)-/d" ${csv_file} touch -t ${csv_timestamp} "${csv_file}" done # run endless loop while true do # wait until next full minute in the beginning to be able to work with continue in this loop if [ -f firstloop ] then rm -f firstloop else LOOP_INTERVAL=30 # 60s max free coingecko API interval + 30s puffer time_to_interval=$((${LOOP_INTERVAL} - $(date +%s) % ${LOOP_INTERVAL})) time_to_full_interval=$((${INTERVAL} - $(date +%s) % ${INTERVAL})) # Check for next general interval g_echo_note "NEXT LOOP in ${time_to_interval} seconds (Interval=${LOOP_INTERVAL}s)" g_echo_note "NEXT FULL LOOP in ${time_to_full_interval} seconds (Interval=${INTERVAL}s)" if [ ${time_to_full_interval} -le ${time_to_interval} ] then FULL_LOOP=1 g_echo_note "FULL INTERVAL" sleep ${time_to_full_interval} else FULL_LOOP=0 g_echo_note "SHORT INTERVAL" sleep ${time_to_interval} fi fi # reload config g_tries_delay=$(shuf -i 5-15 -n 1) . ../../dabo-bot.conf . ../../dabo-bot.override.conf # Headline export csv_headline="Date and Time,Price,Change,EMA12,EMA26,MACD,EMA9 (Sig.),Histogram,MACD Sig.,RSI5,RSI14,RSI21,RSI720,RSI60,RSI120,RSI240,RSI420,Coingecko Change 24h,Coingecko Change 7d,Coingecko Change 14d,Coingecko Change 30d,Coingecko Change 1y,Coingecko MarketCap Change 24h,RANGE DATE,LOWEST IN RANGE,HIGHEST IN RANGE,PIVOT POINT,SUPPORT1,RESIST1,GOLDEN POCKET SUPPORT,GOLDEN POCKET RESIST,GOLDEN POCKET 65 SUPPORT,GOLDEN POCKET 65 RESIST,SUPPORT3,RESIST3,EMA50,EMA100,EMA200,EMA800,Coingecko Price" # Timestamp export f_timestamp=$(g_date_print) # get minute interval for find -mmin INTERVAL_MIN=$(echo "${INTERVAL}/60-1" | bc -l | sed -r 's/^(-?)\./\10./' | cut -d\. -f1) [ -z "${INTERVAL_MIN}" ] && INTERVAL_MIN=1 ### get general market data # Get coingecko data get_coingecko_data # Get current MarketData get_marketdata # Check the situation on the market if ! market_performance then f_market_performance=$(cat MARKET_PERFORMANCE_LATEST) fi ## watch some manual defined assets #watch_assets # transactions overview #[ ${FULL_LOOP} = 1 ] && transactions_overview # stock data #if [ "${STOCK_EXCHANGE}" = "BINANCE" ] #then # # command for current token infos (function for setting var QUANTITY_LOT_CUT # TOKEN_INFO_CMD="binance_get_token_info" # # command for buying/selling a token # TRADE_CMD='binance-api-call POST /api/v3/order "&symbol=TOKEN"eOrderQty=QUANTITY&side=ACTION&type=MARKET"' #elif [ "${STOCK_EXCHANGE}" = "ONETRADING" ] #then # TOKEN_INFO_CMD="onetrading_get_token_info" # TRADE_CMD='onetrading-api-call POST public/v1/account/orders "--header \"Content-Type: application/json\" --data \"{\\\"instrument_code\\\":\\\"TOKEN\\\",\\\"side\\\":\\\"ACTION\\\",\\\"type\\\":\\\"MARKET\\\",\\\"amount\\\":\\\"QUANTITY\\\"}\""' if [ "${STOCK_EXCHANGE}" = "NONE" ] then ## stop here if STOCK_EXCHANGE not present continue fi # Get current symbols [ ${FULL_LOOP} = 1 ] && get_symbols # Get current assets get_assets || continue # Sell something? #check_for_sell # Get current balance [ ${FULL_LOOP} = 1 ] && get_balance || continue # Get current positions [ ${FULL_LOOP} = 1 ] && get_positions || continue # Buy something? [ ${FULL_LOOP} = 1 ] && check_for_buy # Update webpage if jobs | egrep -q "Running.+webpage" && [ ${FULL_LOOP} = 1 ] then g_echo_note "webpage already running" else webpage & fi done