def _get_accounts_ETNA(self, ticket): exception_text = 'wrong ETNA account info' # we should only even call this model once, to find out ETNA Account ID, # and store it in local_settings as ETNA_ACCOUNT_ID url = ETNA_ENDPOINT_URL + '/get-accounts' body = '''{ "ticket": "%s", }''' % ticket r = requests.post(url=url, data=body, headers=self._get_header()) response = r.json() valid = self._validate_json_response(response, ETNAApiException(exception_text)) if not valid: raise ETNAApiException(exception_text) logger.log(exception_text) return serializer = AccountIdSerializer(data=response) if not serializer.is_valid(): raise ETNAApiException(exception_text) logger.log(exception_text) return serializer.save() return self._get_current_account_id()
def send_order(self, order): exception_text = 'wrong ETNA trade info received' login_info = self._get_current_login() order.__class__ = ETNAOrder serializer = OrderETNASerializer(order) json_order = JSONRenderer().render(serializer.data).decode("utf-8") url = ETNA_ENDPOINT_URL + '/place-trade-order' body = '''{ "ticket": "%s", "accountId": "%d", "order": %s }''' % (login_info.Ticket, self._get_current_account_id(), json_order) r = requests.post(url=url, data=body, headers=self._get_header()) response = r.json() valid = self._validate_json_response(response, ETNAApiException(exception_text)) if not valid: raise ETNAApiException(exception_text) logger.log(exception_text) return order.Order_Id = response['Result'] order.Status = Order.StatusChoice.Sent.value order.save() return order
def _get_security_ETNA(self, symbol, ticket): exception_text = 'wrong ETNA security returned' url = ETNA_ENDPOINT_URL + '/securities/' + symbol header = self._get_header() header['ticket'] = ticket header['Accept'] = '/' r = requests.get(url=url, headers=header) response = r.json() valid = self._validate_json_response(response, ETNAApiException(exception_text)) if not valid: raise ETNAApiException(exception_text) logger.log(exception_text) return response = response['Result'] response['symbol_id'] = response['Id'] # ugly hack serializer = SecurityETNASerializer(data=response) if not serializer.is_valid(): raise ETNAApiException(exception_text) logger.log(exception_text) return serializer.save()
def update_ETNA_order_status(order_id, ticket): exception_text = 'Invalid ETNA order status response' url = ETNA_ENDPOINT_URL + '/get-order' body = '''{ "ticket": "%s", "orderId": "%d" }''' % (ticket, order_id) r = requests.post(url=url, data=body, headers=_get_header()) response = r.json() valid = _validate_json_response(response, ETNAApiException(exception_text)) if not valid: raise ETNAApiException(exception_text) logger.log(exception_text) return response = response['Result'] order = Order.objects.get(Order_Id=order_id) order.FillPrice = response['AveragePrice'] order.FillQuantity = response['ExecutedQuantity'] order.Status = response['ExecutionStatus'] order.Description = response['Description'] order.save() return order
def update_orders(self, orders): exception_text = 'Invalid ETNA order status response' login_info = self._get_current_login() url = ETNA_ENDPOINT_URL + '/get-order' for order in orders: body = '''{ "ticket": "%s", "orderId": "%d" }''' % (login_info.Ticket, order.Order_Id) r = requests.post(url=url, data=body, headers=self._get_header()) response = r.json() valid = self._validate_json_response( response, ETNAApiException(exception_text)) if not valid: raise ETNAApiException(exception_text) logger.log(exception_text) return response = response['Result'] order.FillPrice = response['AveragePrice'] order.FillQuantity = response['ExecutedQuantity'] order.Status = response['ExecutionStatus'] order.Description = response['Description'] order.save() return order
def _login(self): exception_text = 'error deserializing ETNA login response' body = '''{ "device":"%s", "version": "%s", "login": "******", "password": "******" }''' % (DEVICE, VERSION, ETNA_LOGIN, ETNA_PASSWORD) url = ETNA_ENDPOINT_URL + '/login' r = requests.post(url=url, data=body, headers=self._get_header()) response = r.json() serializer = LoginSerializer(data=response) if not serializer.is_valid(): raise ETNAApiException(exception_text) logger.log(exception_text) return serializer.save() return serializer.validated_data['Ticket']