Add average column to orders table
This commit is contained in:
parent
4c08f0020a
commit
6acb2eb2b6
@ -123,6 +123,27 @@ def migrate_open_orders_to_trades(engine):
|
|||||||
""")
|
""")
|
||||||
|
|
||||||
|
|
||||||
|
def migrate_orders_table(decl_base, inspector, engine, table_back_name: str, cols: List):
|
||||||
|
# Schema migration necessary
|
||||||
|
engine.execute(f"alter table orders rename to {table_back_name}")
|
||||||
|
# drop indexes on backup table
|
||||||
|
for index in inspector.get_indexes(table_back_name):
|
||||||
|
engine.execute(f"drop index {index['name']}")
|
||||||
|
|
||||||
|
# let SQLAlchemy create the schema as required
|
||||||
|
decl_base.metadata.create_all(engine)
|
||||||
|
|
||||||
|
engine.execute(f"""
|
||||||
|
insert into orders ( id, ft_trade_id, ft_order_side, ft_pair, ft_is_open, order_id, status,
|
||||||
|
symbol, order_type, side, price, amount, filled, average, remaining, cost, order_date,
|
||||||
|
order_filled_date, order_update_date)
|
||||||
|
select id, ft_trade_id, ft_order_side, ft_pair, ft_is_open, order_id, status,
|
||||||
|
symbol, order_type, side, price, amount, filled, null average, remaining, cost, order_date,
|
||||||
|
order_filled_date, order_update_date
|
||||||
|
from {table_back_name}
|
||||||
|
""")
|
||||||
|
|
||||||
|
|
||||||
def check_migrate(engine, decl_base, previous_tables) -> None:
|
def check_migrate(engine, decl_base, previous_tables) -> None:
|
||||||
"""
|
"""
|
||||||
Checks if migration is necessary and migrates if necessary
|
Checks if migration is necessary and migrates if necessary
|
||||||
@ -145,6 +166,11 @@ def check_migrate(engine, decl_base, previous_tables) -> None:
|
|||||||
logger.info('Moving open orders to Orders table.')
|
logger.info('Moving open orders to Orders table.')
|
||||||
migrate_open_orders_to_trades(engine)
|
migrate_open_orders_to_trades(engine)
|
||||||
else:
|
else:
|
||||||
pass
|
cols_order = inspector.get_columns('orders')
|
||||||
# Empty for now - as there is only one iteration of the orders table so far.
|
|
||||||
# table_back_name = get_backup_name(tabs, 'orders_bak')
|
if not has_column(cols_order, 'average'):
|
||||||
|
tabs = get_table_names_for_table(inspector, 'orders')
|
||||||
|
# Empty for now - as there is only one iteration of the orders table so far.
|
||||||
|
table_back_name = get_backup_name(tabs, 'orders_bak')
|
||||||
|
|
||||||
|
migrate_orders_table(decl_base, inspector, engine, table_back_name, cols)
|
||||||
|
@ -122,6 +122,7 @@ class Order(_DECL_BASE):
|
|||||||
order_type = Column(String, nullable=True)
|
order_type = Column(String, nullable=True)
|
||||||
side = Column(String, nullable=True)
|
side = Column(String, nullable=True)
|
||||||
price = Column(Float, nullable=True)
|
price = Column(Float, nullable=True)
|
||||||
|
average = Column(Float, nullable=True)
|
||||||
amount = Column(Float, nullable=True)
|
amount = Column(Float, nullable=True)
|
||||||
filled = Column(Float, nullable=True)
|
filled = Column(Float, nullable=True)
|
||||||
remaining = Column(Float, nullable=True)
|
remaining = Column(Float, nullable=True)
|
||||||
@ -150,6 +151,7 @@ class Order(_DECL_BASE):
|
|||||||
self.price = order.get('price', self.price)
|
self.price = order.get('price', self.price)
|
||||||
self.amount = order.get('amount', self.amount)
|
self.amount = order.get('amount', self.amount)
|
||||||
self.filled = order.get('filled', self.filled)
|
self.filled = order.get('filled', self.filled)
|
||||||
|
self.average = order.get('average', self.average)
|
||||||
self.remaining = order.get('remaining', self.remaining)
|
self.remaining = order.get('remaining', self.remaining)
|
||||||
self.cost = order.get('cost', self.cost)
|
self.cost = order.get('cost', self.cost)
|
||||||
if 'timestamp' in order and order['timestamp'] is not None:
|
if 'timestamp' in order and order['timestamp'] is not None:
|
||||||
|
@ -627,6 +627,22 @@ def test_migrate_new(mocker, default_conf, fee, caplog):
|
|||||||
assert orders[1].order_id == 'stop_order_id222'
|
assert orders[1].order_id == 'stop_order_id222'
|
||||||
assert orders[1].ft_order_side == 'stoploss'
|
assert orders[1].ft_order_side == 'stoploss'
|
||||||
|
|
||||||
|
caplog.clear()
|
||||||
|
# Drop latest column
|
||||||
|
engine.execute("alter table orders drop average")
|
||||||
|
# Run init to test migration
|
||||||
|
init_db(default_conf['db_url'], default_conf['dry_run'])
|
||||||
|
|
||||||
|
assert log_has("trying orders_bak0", caplog)
|
||||||
|
|
||||||
|
orders = Order.query.all()
|
||||||
|
assert len(orders) == 2
|
||||||
|
assert orders[0].order_id == 'buy_order'
|
||||||
|
assert orders[0].ft_order_side == 'buy'
|
||||||
|
|
||||||
|
assert orders[1].order_id == 'stop_order_id222'
|
||||||
|
assert orders[1].ft_order_side == 'stoploss'
|
||||||
|
|
||||||
|
|
||||||
def test_migrate_mid_state(mocker, default_conf, fee, caplog):
|
def test_migrate_mid_state(mocker, default_conf, fee, caplog):
|
||||||
"""
|
"""
|
||||||
|
Loading…
Reference in New Issue
Block a user