replace get_open_oders() with get_order() and add property for fee
This commit is contained in:
parent
4a35676794
commit
9b9d0250f7
@ -1,6 +1,6 @@
|
|||||||
import enum
|
import enum
|
||||||
import logging
|
import logging
|
||||||
from typing import List
|
from typing import List, Dict
|
||||||
|
|
||||||
import arrow
|
import arrow
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
import logging
|
import logging
|
||||||
from typing import List, Optional
|
from typing import List, Optional, Dict
|
||||||
|
|
||||||
import arrow
|
import arrow
|
||||||
import requests
|
import requests
|
||||||
@ -36,6 +36,11 @@ class Bittrex(Exchange):
|
|||||||
_EXCHANGE_CONF.update(config)
|
_EXCHANGE_CONF.update(config)
|
||||||
_API = _Bittrex(api_key=_EXCHANGE_CONF['key'], api_secret=_EXCHANGE_CONF['secret'])
|
_API = _Bittrex(api_key=_EXCHANGE_CONF['key'], api_secret=_EXCHANGE_CONF['secret'])
|
||||||
|
|
||||||
|
@property
|
||||||
|
def fee(self) -> float:
|
||||||
|
# See https://bittrex.com/fees
|
||||||
|
return 0.0025
|
||||||
|
|
||||||
def buy(self, pair: str, rate: float, amount: float) -> str:
|
def buy(self, pair: str, rate: float, amount: float) -> str:
|
||||||
data = _API.buy_limit(pair.replace('_', '-'), amount, rate)
|
data = _API.buy_limit(pair.replace('_', '-'), amount, rate)
|
||||||
if not data['success']:
|
if not data['success']:
|
||||||
@ -87,24 +92,27 @@ class Bittrex(Exchange):
|
|||||||
raise RuntimeError('{}: {}'.format(self.name.upper(), data['message']))
|
raise RuntimeError('{}: {}'.format(self.name.upper(), data['message']))
|
||||||
return data
|
return data
|
||||||
|
|
||||||
|
def get_order(self, order_id: str) -> Dict:
|
||||||
|
data = _API.get_order(order_id)
|
||||||
|
if not data['success']:
|
||||||
|
raise RuntimeError('{}: {}'.format(self.name.upper(), data['message']))
|
||||||
|
data = data['result']
|
||||||
|
return {
|
||||||
|
'id': data['OrderUuid'],
|
||||||
|
'type': data['Type'],
|
||||||
|
'pair': data['Exchange'].replace('-', '_'),
|
||||||
|
'opened': data['Opened'],
|
||||||
|
'rate': data['PricePerUnit'],
|
||||||
|
'amount': data['Quantity'],
|
||||||
|
'remaining': data['QuantityRemaining'],
|
||||||
|
'closed': data['Closed'],
|
||||||
|
}
|
||||||
|
|
||||||
def cancel_order(self, order_id: str) -> None:
|
def cancel_order(self, order_id: str) -> None:
|
||||||
data = _API.cancel(order_id)
|
data = _API.cancel(order_id)
|
||||||
if not data['success']:
|
if not data['success']:
|
||||||
raise RuntimeError('{}: {}'.format(self.name.upper(), data['message']))
|
raise RuntimeError('{}: {}'.format(self.name.upper(), data['message']))
|
||||||
|
|
||||||
def get_open_orders(self, pair: str) -> List[dict]:
|
|
||||||
data = _API.get_open_orders(pair.replace('_', '-'))
|
|
||||||
if not data['success']:
|
|
||||||
raise RuntimeError('{}: {}'.format(self.name.upper(), data['message']))
|
|
||||||
return [{
|
|
||||||
'id': entry['OrderUuid'],
|
|
||||||
'type': entry['OrderType'],
|
|
||||||
'opened': entry['Opened'],
|
|
||||||
'rate': entry['PricePerUnit'],
|
|
||||||
'amount': entry['Quantity'],
|
|
||||||
'remaining': entry['QuantityRemaining'],
|
|
||||||
} for entry in data['result']]
|
|
||||||
|
|
||||||
def get_pair_detail_url(self, pair: str) -> str:
|
def get_pair_detail_url(self, pair: str) -> str:
|
||||||
return self.PAIR_DETAIL_METHOD + '?MarketName={}'.format(pair.replace('_', '-'))
|
return self.PAIR_DETAIL_METHOD + '?MarketName={}'.format(pair.replace('_', '-'))
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
from abc import ABC, abstractmethod
|
from abc import ABC, abstractmethod
|
||||||
from typing import List, Optional
|
from typing import List, Optional, Dict
|
||||||
|
|
||||||
import arrow
|
import arrow
|
||||||
|
|
||||||
@ -13,6 +13,14 @@ class Exchange(ABC):
|
|||||||
"""
|
"""
|
||||||
return self.__class__.__name__
|
return self.__class__.__name__
|
||||||
|
|
||||||
|
@property
|
||||||
|
def fee(self) -> float:
|
||||||
|
"""
|
||||||
|
Fee for placing an order
|
||||||
|
:return: percentage in float
|
||||||
|
"""
|
||||||
|
return 0.0
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def sleep_time(self) -> float:
|
def sleep_time(self) -> float:
|
||||||
@ -100,6 +108,22 @@ class Exchange(ABC):
|
|||||||
}
|
}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
def get_order(self, order_id: str) -> Dict:
|
||||||
|
"""
|
||||||
|
Get order details for the given order_id.
|
||||||
|
:param order_id: ID as str
|
||||||
|
:return: dict, format: {
|
||||||
|
'id': str,
|
||||||
|
'type': str,
|
||||||
|
'pair': str,
|
||||||
|
'opened': str ISO 8601 datetime,
|
||||||
|
'closed': str ISO 8601 datetime,
|
||||||
|
'rate': float,
|
||||||
|
'amount': float,
|
||||||
|
'remaining': int
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def cancel_order(self, order_id: str) -> None:
|
def cancel_order(self, order_id: str) -> None:
|
||||||
"""
|
"""
|
||||||
@ -108,24 +132,6 @@ class Exchange(ABC):
|
|||||||
:return: None
|
:return: None
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@abstractmethod
|
|
||||||
def get_open_orders(self, pair: str) -> List[dict]:
|
|
||||||
"""
|
|
||||||
Gets all open orders for given pair.
|
|
||||||
:param pair: Pair as str, format: BTC_ETC
|
|
||||||
:return: List of dicts, format: [
|
|
||||||
{
|
|
||||||
'id': str,
|
|
||||||
'type': str,
|
|
||||||
'opened': datetime,
|
|
||||||
'rate': float,
|
|
||||||
'amount': float,
|
|
||||||
'remaining': int,
|
|
||||||
},
|
|
||||||
...
|
|
||||||
]
|
|
||||||
"""
|
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def get_pair_detail_url(self, pair: str) -> str:
|
def get_pair_detail_url(self, pair: str) -> str:
|
||||||
"""
|
"""
|
||||||
|
Loading…
Reference in New Issue
Block a user