159 lines
3.9 KiB
Markdown
159 lines
3.9 KiB
Markdown
# 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
|
|
```
|
|
|
|
### Using sqlite3 via docker-compose
|
|
|
|
The freqtrade docker image does contain sqlite3, so you can edit the database without having to install anything on the host system.
|
|
|
|
``` bash
|
|
docker-compose exec freqtrade /bin/bash
|
|
sqlite3 <databasefile>.sqlite
|
|
```
|
|
|
|
## 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='2020-06-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;
|
|
```
|
|
|
|
## Manually insert a new trade
|
|
|
|
```sql
|
|
INSERT INTO trades (exchange, pair, is_open, fee_open, fee_close, open_rate, stake_amount, amount, open_date)
|
|
VALUES ('binance', 'ETH/BTC', 1, 0.0025, 0.0025, <open_rate>, <stake_amount>, <amount>, '<datetime>')
|
|
```
|
|
|
|
### Insert trade example
|
|
|
|
```sql
|
|
INSERT INTO trades (exchange, pair, is_open, fee_open, fee_close, open_rate, stake_amount, amount, open_date)
|
|
VALUES ('binance', 'ETH/BTC', 1, 0.0025, 0.0025, 0.00258580, 0.002, 0.7715262081, '2020-06-28 12:44:24.000000')
|
|
```
|
|
|
|
## Remove trade from the database
|
|
|
|
Maybe you'd like to remove a trade from the database, because something went wrong.
|
|
|
|
```sql
|
|
DELETE FROM trades WHERE id = <tradeid>;
|
|
```
|
|
|
|
```sql
|
|
DELETE FROM trades WHERE id = 31;
|
|
```
|
|
|
|
!!! Warning
|
|
This will remove this trade from the database. Please make sure you got the correct id and **NEVER** run this query without the `where` clause.
|