freqtrade_origin/freqtrade/util/migrations/binance_mig.py

80 lines
2.6 KiB
Python
Raw Permalink Normal View History

2023-01-12 19:36:06 +00:00
import logging
from packaging import version
2023-03-15 20:19:36 +00:00
from sqlalchemy import select
2023-06-17 07:10:54 +00:00
from freqtrade.constants import DOCS_LINK, Config
2023-09-10 16:10:38 +00:00
from freqtrade.enums import TradingMode
from freqtrade.exceptions import OperationalException
2023-01-12 19:36:06 +00:00
from freqtrade.persistence.pairlock import PairLock
from freqtrade.persistence.trade_model import Trade
logger = logging.getLogger(__name__)
def migrate_binance_futures_names(config: Config):
2024-05-12 14:56:05 +00:00
if not (
config.get("trading_mode", TradingMode.SPOT) == TradingMode.FUTURES
and config["exchange"]["name"] == "binance"
2023-01-12 19:36:06 +00:00
):
# only act on new futures
return
import ccxt
2024-05-12 14:56:05 +00:00
2023-01-17 05:46:49 +00:00
if version.parse("2.6.26") > version.parse(ccxt.__version__):
raise OperationalException(
"Please follow the update instructions in the docs "
2024-05-12 14:56:05 +00:00
f"({DOCS_LINK}/updating/) to install a compatible ccxt version."
)
2023-01-12 19:36:06 +00:00
_migrate_binance_futures_db(config)
migrate_binance_futures_data(config)
2023-01-12 19:36:06 +00:00
def _migrate_binance_futures_db(config: Config):
2024-05-12 14:56:05 +00:00
logger.warning("Migrating binance futures pairs in database.")
trades = Trade.get_trades([Trade.exchange == "binance", Trade.trading_mode == "FUTURES"]).all()
2023-01-12 19:36:06 +00:00
for trade in trades:
2024-05-12 14:56:05 +00:00
if ":" in trade.pair:
2023-01-12 19:36:06 +00:00
# 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()
2024-05-12 14:56:05 +00:00
pls = PairLock.session.scalars(select(PairLock).filter(PairLock.pair.notlike("%:%"))).all()
2023-01-12 19:36:06 +00:00
for pl in pls:
pl.pair = f"{pl.pair}:{config['stake_currency']}"
# print(pls)
# pls.update({'pair': concat(PairLock.pair,':USDT')})
Trade.commit()
2024-05-12 14:56:05 +00:00
logger.warning("Done migrating binance futures pairs in database.")
2023-01-12 19:59:43 +00:00
def migrate_binance_futures_data(config: Config):
2024-05-12 14:56:05 +00:00
if not (
config.get("trading_mode", TradingMode.SPOT) == TradingMode.FUTURES
and config["exchange"]["name"] == "binance"
):
# only act on new futures
return
2023-01-12 19:59:43 +00:00
from freqtrade.data.history import get_datahandler
2024-05-12 14:56:05 +00:00
dhc = get_datahandler(config["datadir"], config["dataformat_ohlcv"])
2023-01-12 19:59:43 +00:00
paircombs = dhc.ohlcv_get_available_data(
2024-05-12 14:56:05 +00:00
config["datadir"], config.get("trading_mode", TradingMode.SPOT)
)
2023-01-12 19:59:43 +00:00
for pair, timeframe, candle_type in paircombs:
2024-05-12 14:56:05 +00:00
if ":" in pair:
2023-01-12 19:59:43 +00:00
# already migrated
continue
new_pair = f"{pair}:{config['stake_currency']}"
dhc.rename_futures_data(pair, new_pair, timeframe, candle_type)