From 36029642f536831f4ffdd44ea9d3066bb1fe9bc5 Mon Sep 17 00:00:00 2001 From: olli Date: Thu, 1 Jun 2023 15:22:04 +0200 Subject: [PATCH] take profit and take loss sell checks; strategies match on buy and sell strategy name --- dabo/functions/check_sell_conditions.sh | 43 ++++++++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/dabo/functions/check_sell_conditions.sh b/dabo/functions/check_sell_conditions.sh index 6272e50..f33e8a6 100644 --- a/dabo/functions/check_sell_conditions.sh +++ b/dabo/functions/check_sell_conditions.sh @@ -134,7 +134,11 @@ function check_sell_conditions_strategy { # run strategy if [ -s "${f_strategy}" ] then - . "${f_strategy}" || return 0 + local f_strategy_name=$(echo ${f_strategy} | cut -d. -f2) + if grep -q "buy.${f_strategy_name}.conf" ${f_TRADE_HIST_FILE} + then + . "${f_strategy}" || return 0 + fi else g_echo_note "${f_echo_prefix}Strategy file not found" return 1 @@ -199,6 +203,43 @@ function check_sell_conditions_strategy { fi + # Take profit after positive results + if [ -n "${TAKE_PROFIT_CHECK_AFTER_POSTITIVE_RESULTS}" ] && [ -n "${TAKE_PROFIT_CHECK_AT_FEE_PLUS}" ] && [ -n "${TAKE_PROFIT_CHECK_AT_FACTOR}" ] + then + if [ $(grep -v "^-" ${f_TRADE_HIST_FILE_INTERIM} | wc -l) -ge ${TAKE_PROFIT_CHECK_AFTER_POSTITIVE_RESULTS} ] + then + # Only if result larger then fee + if [ $(echo "${f_BUY_PRICE_LAST_RATE_DIFF} > (${FEE}+${TAKE_PROFIT_CHECK_AT_FEE_PLUS})" | bc -l) -ne 0 ] + then + # Take profit if interim result falls over 20% (/1.25) from the highest result + local f_highest_profit=$(grep -v "^-" ${f_TRADE_HIST_FILE_INTERIM} | LANG=en_US.UTF-8 sort -n | tail -n1) + local f_take_profit=$(echo "${f_highest_profit} / ${TAKE_PROFIT_CHECK_AT_FACTOR}" | bc -l) + [ $(echo "${f_BUY_PRICE_LAST_RATE_DIFF} < ${f_take_profit}" | bc -l) -ne 0 ] && f_SELL="taking profit" + fi + fi + fi + + + # Take loss + if [ -n "${TAKE_LOSS_CHECK_AFTER_NEGATIVE_RESULTS}" ] && [ -n "${TAKE_LOSS_CHECK_AT_FEE_PLUS}" ] && [ -n "${TAKE_LOSS_CHECK_AT_FACTOR}" ] + then + if [ $(tail -n${TAKE_LOSS_CHECK_AFTER_NEGATIVE_RESULTS} ${f_TRADE_HIST_FILE_INTERIM} | grep "^-" | wc -l) -ge ${TAKE_LOSS_CHECK_AFTER_NEGATIVE_RESULTS} ] + then + # if result larger then fee + if [ $(echo "${f_BUY_PRICE_LAST_RATE_DIFF} > (${FEE}+${TAKE_LOSS_CHECK_AT_FEE_PLUS})" | bc -l) -ne 0 ] + then + f_SELL="taking profit by loss before" + else + # on loss + local f_highest_loss=$(grep "^-" ${f_TRADE_HIST_FILE_INTERIM} | LANG=en_US.UTF-8 sort -n | head -n1) + local f_take_loss=$(echo "${f_highest_loss} / ${TAKE_LOSS_CHECK_AT_FACTOR}" | bc -l) + [ $(echo "${f_BUY_PRICE_LAST_RATE_DIFF} > ${f_take_loss}" | bc -l) -ne 0 ] && f_SELL="taking loss" + fi + fi + fi + + + # hold on negative result if [ "${SELL_HOLD_IF_RESULT_NEGATIVE}" -gt 0 ] then