Skip to content

Instantly share code, notes, and snippets.

@ni79ls
Last active February 10, 2023 07:24
Show Gist options
  • Save ni79ls/0d6cb77365b053a0b028cddadc664a72 to your computer and use it in GitHub Desktop.
Save ni79ls/0d6cb77365b053a0b028cddadc664a72 to your computer and use it in GitHub Desktop.
def make_investment_decision():
import pandas as pd
import os
import json
IDLE_HOURS_BEFORE_NEXT_PURCHASE = float(os.environ.get('BOT_ONE_IDLE_HOURS_BEFORE_NEXT_PURCHASE'))
BOLLINGER_LOW_INVEST_EUR = float(os.environ.get('BOT_ONE_INVEST_EUR') or 0)
MY_CRYPTO_CURRENCIES = json.loads(os.environ['BOT_ONE_CRYPTO_CURRENCIES'])
MY_QUOTE_CURRENCY = os.environ.get('QUOTE_CURRENCY')
TRADING_VIEW_SYMBOLS = json.loads(os.environ['TRADING_VIEW_SYMBOLS'])
df_historic_data = cb_get_enhanced_history(MY_QUOTE_CURRENCY, MY_CRYPTO_CURRENCIES)
df_historic_data = df_historic_data.sort_values(['date'], ascending=True)
df_trading_view_signals = get_trading_view_signals(TRADING_VIEW_SYMBOLS)
df_24hstats = cb_get_24h_data(MY_QUOTE_CURRENCY, MY_CRYPTO_CURRENCIES)
server_time_now = cb_get_server_time()
order_results = []
for currency in MY_CRYPTO_CURRENCIES:
product_id = currency+'-'+MY_QUOTE_CURRENCY
current_value = df_24hstats.loc[currency]['last']
trading_view_recommendation = df_trading_view_signals.loc[currency]['1min_recommendation']
bb_low = df_historic_data.query('granularity == \'DAILY\' and base_currency == @currency').tail(1)['bb_low'].iloc[0]
last_buy_fill_date = cb_get_last_buy_fill_date(product_id)
idle_hours_reached = True
if last_buy_fill_date is not None:
last_fill_delta = ((server_time_now - last_buy_fill_date).days*86400 + (server_time_now - last_buy_fill_date).seconds)/3600
if (last_fill_delta < IDLE_HOURS_BEFORE_NEXT_PURCHASE):
idle_hours_reached = False
if (current_value < bb_low and idle_hours_reached and (trading_view_recommendation == 'BUY' or trading_view_recommendation == 'STRONG_BUY')):
order_id = cb_create_market_order(product_id=product_id, quote_size=BOLLINGER_LOW_INVEST_EUR)
fire_doc_id = fire_create_order_record(doc_id=order_id,doc_data={'buy_order_id': order_id, 'bb_low': bb_low, 'trading_view_recommendation': trading_view_recommendation, 'sell_order_id': ''})
order_results.append(f'Order now: {product_id}, price: {current_value}{MY_QUOTE_CURRENCY}, amount: {BOLLINGER_LOW_INVEST_EUR}{MY_QUOTE_CURRENCY} and order id {order_id} and Firestore doc id {fire_doc_id}')
else:
order_results.append(f'No order placed for {currency}; current value: {current_value}{MY_QUOTE_CURRENCY}; bb low: {bb_low}{MY_QUOTE_CURRENCY}; signal: {trading_view_recommendation}; last trade was on {last_buy_fill_date} ({idle_hours_reached})')
return pd.DataFrame(order_results)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment