# SQL Helper This page contains some help if you want to edit your sqlite db. ## Install sqlite3 Sqlite3 is a terminal based sqlite application. Feel free to use a visual Database editor like SqliteBrowser if you feel more comfortable with that. ### Ubuntu/Debian installation ```bash sudo apt-get install sqlite3 ``` ## Open the DB ```bash sqlite3 .open <filepath> ``` ## Table structure ### List tables ```bash .tables ``` ### Display table structure ```bash .schema <table_name> ``` ### Trade table structure ```sql CREATE TABLE trades id INTEGER NOT NULL, exchange VARCHAR NOT NULL, pair VARCHAR NOT NULL, is_open BOOLEAN NOT NULL, fee_open FLOAT NOT NULL, fee_open_cost FLOAT, fee_open_currency VARCHAR, fee_close FLOAT NOT NULL, fee_close_cost FLOAT, fee_close_currency VARCHAR, open_rate FLOAT, open_rate_requested FLOAT, open_trade_price FLOAT, close_rate FLOAT, close_rate_requested FLOAT, close_profit FLOAT, close_profit_abs FLOAT, stake_amount FLOAT NOT NULL, amount FLOAT, open_date DATETIME NOT NULL, close_date DATETIME, open_order_id VARCHAR, stop_loss FLOAT, stop_loss_pct FLOAT, initial_stop_loss FLOAT, initial_stop_loss_pct FLOAT, stoploss_order_id VARCHAR, stoploss_last_update DATETIME, max_rate FLOAT, min_rate FLOAT, sell_reason VARCHAR, strategy VARCHAR, timeframe INTEGER, PRIMARY KEY (id), CHECK (is_open IN (0, 1)) ); CREATE INDEX ix_trades_stoploss_order_id ON trades (stoploss_order_id); CREATE INDEX ix_trades_pair ON trades (pair); CREATE INDEX ix_trades_is_open ON trades (is_open); ``` ## Get all trades in the table ```sql SELECT * FROM trades; ``` ## Fix trade still open after a manual sell on the exchange !!! Warning Manually selling a pair on the exchange will not be detected by the bot and it will try to sell anyway. Whenever possible, forcesell <tradeid> should be used to accomplish the same thing. It is strongly advised to backup your database file before making any manual changes. !!! Note This should not be necessary after /forcesell, as forcesell orders are closed automatically by the bot on the next iteration. ```sql UPDATE trades SET is_open=0, close_date=<close_date>, close_rate=<close_rate>, close_profit=close_rate/open_rate-1, close_profit_abs = (amount * <close_rate> * (1 - fee_close) - (amount * open_rate * 1 - fee_open)), sell_reason=<sell_reason> WHERE id=<trade_ID_to_update>; ``` ### Example ```sql UPDATE trades SET is_open=0, close_date='2017-12-20 03:08:45.103418', close_rate=0.19638016, close_profit=0.0496, close_profit_abs = (amount * 0.19638016 * (1 - fee_close) - (amount * open_rate * 1 - fee_open)) sell_reason='force_sell' WHERE id=31; ``` ## Insert manually a new trade ```sql INSERT INTO trades (exchange, pair, is_open, fee_open, fee_close, open_rate, stake_amount, amount, open_date) VALUES ('bittrex', 'ETH/BTC', 1, 0.0025, 0.0025, <open_rate>, <stake_amount>, <amount>, '<datetime>') ``` ##### Example: ```sql INSERT INTO trades (exchange, pair, is_open, fee_open, fee_close, open_rate, stake_amount, amount, open_date) VALUES ('bittrex', 'ETH/BTC', 1, 0.0025, 0.0025, 0.00258580, 0.002, 0.7715262081, '2017-11-28 12:44:24.000000') ```