Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
wiseplat
GitHub Repository: wiseplat/python-code
Path: blob/master/ invest-robot-contest_sirius-master/services/trading_info.py
5933 views
1
import logging
2
3
from services.instruments_info_cache import get_instrument_info_by_key
4
from utils.util import read_dict_from_file, write_dict_to_file, pretty_dict
5
6
7
# trading_info - результаты торговли по каждому инструменту. сохраняется в файл при завершении работы робота
8
# Пример элемента
9
# "MOEX_MTLR": {
10
# "buy_count": 0,
11
# "sell_count": 0,
12
# "balance": 0,
13
# "last_buy_price": 0,
14
# "has_share": false
15
# }
16
# Когда робот покупает он увеличивает счётчик buy_count, запоминает последнюю цену покупки, устанавливает has_share=True.
17
# Баланс при этом уменьшается на стоимость покупки
18
# Когда робот продаёт, он увеличивает счётчик sell_count, устанавливает has_share=False.
19
# Баланс при этом уменьшается увеличивается на стоимость продажи
20
# Когда мы считаем примерный финансовый результат, если у робота на руках есть акция, то учитывается последняя цена покупки
21
###
22
23
def load_trading_info():
24
res = read_dict_from_file('data/trading_info')
25
if res is None:
26
return {'results': {}, 'last_processed_date': None}
27
else:
28
return res
29
30
31
def save_trading_info(trading_info):
32
write_dict_to_file('data/trading_info', trading_info)
33
34
35
def print_trading_info(trading_info):
36
money = {'USD': 0, "RUB": 0}
37
38
results = trading_info['results'].copy()
39
40
for result_key in results:
41
result = results[result_key]
42
instrument_info = get_instrument_info_by_key(result_key)
43
currency = instrument_info['currency']
44
45
if result['has_share']:
46
price = 1 * instrument_info['min_lot'] * result['last_buy_price'] # TODO 1 - replace with lots to buy
47
result['balance'] = result['balance'] + price
48
49
money[currency] = money[currency] + result['balance']
50
51
logging.info('Finance results per instrument:\n{}'.format(pretty_dict(results)))
52
logging.info('Finance result:\n{}'.format(pretty_dict(money)))
53
54
55
def get_trading_info_for_key(key, trading_info):
56
results = trading_info['results']
57
58
results.setdefault(key, {'buy_count': 0, 'sell_count': 0, 'balance': 0, 'last_buy_price': 0, 'has_share': False})
59
return results[key]
60
61