mirror of
https://github.com/freqtrade/freqtrade.git
synced 2024-11-10 10:21:59 +00:00
80 lines
2.6 KiB
Python
80 lines
2.6 KiB
Python
import logging
|
|
|
|
from packaging import version
|
|
from sqlalchemy import select
|
|
|
|
from freqtrade.constants import DOCS_LINK, Config
|
|
from freqtrade.enums import TradingMode
|
|
from freqtrade.exceptions import OperationalException
|
|
from freqtrade.persistence.pairlock import PairLock
|
|
from freqtrade.persistence.trade_model import Trade
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def migrate_binance_futures_names(config: Config):
|
|
if not (
|
|
config.get("trading_mode", TradingMode.SPOT) == TradingMode.FUTURES
|
|
and config["exchange"]["name"] == "binance"
|
|
):
|
|
# only act on new futures
|
|
return
|
|
import ccxt
|
|
|
|
if version.parse("2.6.26") > version.parse(ccxt.__version__):
|
|
raise OperationalException(
|
|
"Please follow the update instructions in the docs "
|
|
f"({DOCS_LINK}/updating/) to install a compatible ccxt version."
|
|
)
|
|
_migrate_binance_futures_db(config)
|
|
migrate_binance_futures_data(config)
|
|
|
|
|
|
def _migrate_binance_futures_db(config: Config):
|
|
logger.warning("Migrating binance futures pairs in database.")
|
|
trades = Trade.get_trades([Trade.exchange == "binance", Trade.trading_mode == "FUTURES"]).all()
|
|
for trade in trades:
|
|
if ":" in trade.pair:
|
|
# already migrated
|
|
continue
|
|
new_pair = f"{trade.pair}:{trade.stake_currency}"
|
|
trade.pair = new_pair
|
|
|
|
for order in trade.orders:
|
|
order.ft_pair = new_pair
|
|
# Should symbol be migrated too?
|
|
# order.symbol = new_pair
|
|
Trade.commit()
|
|
pls = PairLock.session.scalars(select(PairLock).filter(PairLock.pair.notlike("%:%"))).all()
|
|
for pl in pls:
|
|
pl.pair = f"{pl.pair}:{config['stake_currency']}"
|
|
# print(pls)
|
|
# pls.update({'pair': concat(PairLock.pair,':USDT')})
|
|
Trade.commit()
|
|
logger.warning("Done migrating binance futures pairs in database.")
|
|
|
|
|
|
def migrate_binance_futures_data(config: Config):
|
|
if not (
|
|
config.get("trading_mode", TradingMode.SPOT) == TradingMode.FUTURES
|
|
and config["exchange"]["name"] == "binance"
|
|
):
|
|
# only act on new futures
|
|
return
|
|
|
|
from freqtrade.data.history import get_datahandler
|
|
|
|
dhc = get_datahandler(config["datadir"], config["dataformat_ohlcv"])
|
|
|
|
paircombs = dhc.ohlcv_get_available_data(
|
|
config["datadir"], config.get("trading_mode", TradingMode.SPOT)
|
|
)
|
|
|
|
for pair, timeframe, candle_type in paircombs:
|
|
if ":" in pair:
|
|
# already migrated
|
|
continue
|
|
new_pair = f"{pair}:{config['stake_currency']}"
|
|
dhc.rename_futures_data(pair, new_pair, timeframe, candle_type)
|