예제 #1
0
    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()
예제 #2
0
    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
예제 #3
0
    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()
예제 #4
0
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
예제 #5
0
 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
예제 #6
0
 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']