stable/docs/sql_cheatsheet.md

109 lines
2.5 KiB
Markdown
Raw Normal View History

2018-01-02 02:17:10 +00:00
# SQL Helper
This page constains some help if you want to edit your sqlite db.
## Install sqlite3
**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,
2018-05-12 08:19:52 +00:00
fee_open FLOAT NOT NULL,
fee_close FLOAT NOT NULL,
2018-01-02 02:17:10 +00:00
open_rate FLOAT,
2018-05-12 08:19:52 +00:00
open_rate_requested FLOAT,
2018-01-02 02:17:10 +00:00
close_rate FLOAT,
2018-05-12 08:19:52 +00:00
close_rate_requested FLOAT,
2018-01-02 02:17:10 +00:00
close_profit FLOAT,
stake_amount FLOAT NOT NULL,
amount FLOAT,
open_date DATETIME NOT NULL,
close_date DATETIME,
open_order_id VARCHAR,
2019-03-06 20:37:52 +00:00
stop_loss FLOAT,
initial_stop_loss FLOAT,
stoploss_order_id VARCHAR,
stoploss_last_update DATETIME,
max_rate FLOAT,
sell_reason VARCHAR,
strategy VARCHAR,
ticker_interval INTEGER,
2018-01-02 02:17:10 +00:00
PRIMARY KEY (id),
CHECK (is_open IN (0, 1))
);
```
## Get all trades in the table
```sql
SELECT * FROM trades;
```
2019-03-08 21:15:03 +00:00
## Fix trade still open after a manual sell on the exchange
2018-01-02 02:17:10 +00:00
2019-03-08 21:15:03 +00:00
!!! Warning:
Manually selling on the exchange should not be done by default, since the bot does not detect this and will try to sell anyway.
/foresell <tradeid> should accomplish the same thing.
!!! Note:
This should not be necessary after /forcesell, as forcesell orders are closed automatically by the bot on the next iteration.
2019-03-06 20:37:52 +00:00
2018-01-02 02:17:10 +00:00
```sql
UPDATE trades
2019-03-06 20:37:52 +00:00
SET is_open=0, close_date=<close_date>, close_rate=<close_rate>, close_profit=close_rate/open_rate-1, sell_reason=<sell_reason>
2018-01-02 02:17:10 +00:00
WHERE id=<trade_ID_to_update>;
```
2019-03-06 20:37:52 +00:00
##### Example
2018-01-02 02:17:10 +00:00
```sql
UPDATE trades
2019-03-06 20:37:52 +00:00
SET is_open=0, close_date='2017-12-20 03:08:45.103418', close_rate=0.19638016, close_profit=0.0496, sell_reason='force_sell'
2018-01-02 02:17:10 +00:00
WHERE id=31;
```
## Insert manually a new trade
```sql
2019-03-06 20:37:52 +00:00
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>')
```
2019-03-06 20:37:52 +00:00
##### Example:
```sql
2019-03-06 20:37:52 +00:00
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')
```
2018-01-02 02:17:10 +00:00
## Fix wrong fees in the table
2019-03-06 20:37:52 +00:00
If your DB was created before [PR#200](https://github.com/freqtrade/freqtrade/pull/200) was merged (before 12/23/17).
2018-01-02 02:17:10 +00:00
```sql
UPDATE trades SET fee=0.0025 WHERE fee=0.005;
2018-05-12 08:19:52 +00:00
```