Path: blob/master/ invest-robot-contest_sirius-master/services/trading_info.py
5933 views
import logging12from services.instruments_info_cache import get_instrument_info_by_key3from utils.util import read_dict_from_file, write_dict_to_file, pretty_dict456# trading_info - результаты торговли по каждому инструменту. сохраняется в файл при завершении работы робота7# Пример элемента8# "MOEX_MTLR": {9# "buy_count": 0,10# "sell_count": 0,11# "balance": 0,12# "last_buy_price": 0,13# "has_share": false14# }15# Когда робот покупает он увеличивает счётчик buy_count, запоминает последнюю цену покупки, устанавливает has_share=True.16# Баланс при этом уменьшается на стоимость покупки17# Когда робот продаёт, он увеличивает счётчик sell_count, устанавливает has_share=False.18# Баланс при этом уменьшается увеличивается на стоимость продажи19# Когда мы считаем примерный финансовый результат, если у робота на руках есть акция, то учитывается последняя цена покупки20###2122def load_trading_info():23res = read_dict_from_file('data/trading_info')24if res is None:25return {'results': {}, 'last_processed_date': None}26else:27return res282930def save_trading_info(trading_info):31write_dict_to_file('data/trading_info', trading_info)323334def print_trading_info(trading_info):35money = {'USD': 0, "RUB": 0}3637results = trading_info['results'].copy()3839for result_key in results:40result = results[result_key]41instrument_info = get_instrument_info_by_key(result_key)42currency = instrument_info['currency']4344if result['has_share']:45price = 1 * instrument_info['min_lot'] * result['last_buy_price'] # TODO 1 - replace with lots to buy46result['balance'] = result['balance'] + price4748money[currency] = money[currency] + result['balance']4950logging.info('Finance results per instrument:\n{}'.format(pretty_dict(results)))51logging.info('Finance result:\n{}'.format(pretty_dict(money)))525354def get_trading_info_for_key(key, trading_info):55results = trading_info['results']5657results.setdefault(key, {'buy_count': 0, 'sell_count': 0, 'balance': 0, 'last_buy_price': 0, 'has_share': False})58return results[key]596061