freqtrade_origin/freqtrade/exchange/kucoin.py

69 lines
2.1 KiB
Python
Raw Normal View History

2021-11-09 10:31:54 +00:00
"""Kucoin exchange subclass."""
2024-05-12 14:58:33 +00:00
import logging
from freqtrade.constants import BuySell
from freqtrade.exchange import Exchange
2024-11-04 18:23:17 +00:00
from freqtrade.exchange.exchange_types import CcxtOrder, FtHas
logger = logging.getLogger(__name__)
class Kucoin(Exchange):
2021-11-09 10:31:54 +00:00
"""Kucoin exchange class.
Contains adjustments needed for Freqtrade to work with this exchange.
Please note that this exchange is not included in the list of exchanges
officially supported by the Freqtrade development team. So some features
may still not work as expected.
"""
2024-09-04 05:15:17 +00:00
_ft_has: FtHas = {
2022-02-03 06:57:58 +00:00
"stoploss_on_exchange": True,
"stop_price_param": "stopPrice",
"stop_price_prop": "stopPrice",
2022-02-03 06:57:58 +00:00
"stoploss_order_types": {"limit": "limit", "market": "market"},
"l2_limit_range": [20, 100],
"l2_limit_range_required": False,
2024-05-12 14:58:33 +00:00
"order_time_in_force": ["GTC", "FOK", "IOC"],
2022-03-29 14:23:45 +00:00
"ohlcv_candle_limit": 1500,
}
2022-02-03 06:57:58 +00:00
def _get_stop_params(self, side: BuySell, ordertype: str, stop_price: float) -> dict:
2022-02-03 06:57:58 +00:00
params = self._params.copy()
2024-05-12 14:58:33 +00:00
params.update({"stopPrice": stop_price, "stop": "loss"})
2022-02-03 06:57:58 +00:00
return params
def create_order(
2024-05-12 14:58:33 +00:00
self,
*,
pair: str,
ordertype: str,
side: BuySell,
amount: float,
rate: float,
leverage: float,
reduceOnly: bool = False,
time_in_force: str = "GTC",
2024-11-04 18:23:17 +00:00
) -> CcxtOrder:
res = super().create_order(
pair=pair,
ordertype=ordertype,
side=side,
amount=amount,
rate=rate,
leverage=leverage,
reduceOnly=reduceOnly,
time_in_force=time_in_force,
)
# Kucoin returns only the order-id.
# ccxt returns status = 'closed' at the moment - which is information ccxt invented.
# Since we rely on status heavily, we must set it to 'open' here.
# ref: https://github.com/ccxt/ccxt/pull/16674, (https://github.com/ccxt/ccxt/pull/16553)
2024-05-12 14:58:33 +00:00
if not self._config["dry_run"]:
res["type"] = ordertype
res["status"] = "open"
return res