Add param for Dry run to use a DB file instead of memory (#182)

This commit is contained in:
Gérald LONLAS 2017-12-14 06:10:11 -08:00 committed by Michael Egger
parent 4b38100ae2
commit 2ac8b685d6
4 changed files with 40 additions and 15 deletions

View File

@ -140,24 +140,29 @@ changes, it will suffice to edit `config.json` and restart the container.
### Usage ### Usage
``` ```
usage: freqtrade [-h] [-c PATH] [-v] [--version] [--dynamic-whitelist] usage: main.py [-h] [-c PATH] [-v] [--version] [--dynamic-whitelist [INT]]
{backtesting} ... [--dry-run-db]
{backtesting,hyperopt} ...
Simple High Frequency Trading Bot for crypto currencies Simple High Frequency Trading Bot for crypto currencies
positional arguments: positional arguments:
{backtesting} {backtesting,hyperopt}
backtesting backtesting module backtesting backtesting module
hyperopt hyperopt module
optional arguments: optional arguments:
-h, --help show this help message and exit -h, --help show this help message and exit
-c PATH, --config PATH -c PATH, --config PATH
specify configuration file (default: config.json) specify configuration file (default: config.json)
-v, --verbose be verbose -v, --verbose be verbose
--version show program's version number and exit --version show program's version number and exit
--dynamic-whitelist INT dynamically generate and update whitelist based on 24h --dynamic-whitelist [INT]
BaseVolume (Default 20 currencies) dynamically generate and update whitelist based on 24h
BaseVolume (Default 20 currencies)
--dry-run-db Force dry run to use a local DB
"tradesv3.dry_run.sqlite" instead of memory DB. Work
only if dry_run is enabled.
``` ```
#### Dynamic whitelist example #### Dynamic whitelist example

View File

@ -325,6 +325,14 @@ def main() -> None:
if args.dynamic_whitelist: if args.dynamic_whitelist:
logger.info('Using dynamically generated whitelist. (--dynamic-whitelist detected)') logger.info('Using dynamically generated whitelist. (--dynamic-whitelist detected)')
# If the user ask for Dry run with a local DB instead of memory
if args.dry_run_db:
if _CONF.get('dry_run', False):
_CONF.update({'dry_run_db': True})
logger.info('Dry_run will use the DB file: "tradesv3.dry_run.sqlite". (--dry_run_db detected)')
else:
logger.info('Dry run is disabled. (--dry_run_db ignored)')
try: try:
init(_CONF) init(_CONF)
old_state = None old_state = None

View File

@ -119,6 +119,13 @@ def parse_args(args: List[str]):
metavar='INT', metavar='INT',
nargs='?', nargs='?',
) )
parser.add_argument(
'--dry-run-db',
help='Force dry run to use a local DB "tradesv3.dry_run.sqlite" instead of memory DB. Work only if dry_run is \
enabled.',
action='store_true',
dest='dry_run_db',
)
build_subcommands(parser) build_subcommands(parser)
parsed_args = parser.parse_args(args) parsed_args = parser.parse_args(args)

View File

@ -29,10 +29,15 @@ def init(config: dict, engine: Optional[Engine] = None) -> None:
_CONF.update(config) _CONF.update(config)
if not engine: if not engine:
if _CONF.get('dry_run', False): if _CONF.get('dry_run', False):
engine = create_engine('sqlite://', # the user wants dry run to use a DB
connect_args={'check_same_thread': False}, if _CONF.get('dry_run_db', False):
poolclass=StaticPool, engine = create_engine('sqlite:///tradesv3.dry_run.sqlite')
echo=False) # Otherwise dry run will store in memory
else:
engine = create_engine('sqlite://',
connect_args={'check_same_thread': False},
poolclass=StaticPool,
echo=False)
else: else:
engine = create_engine('sqlite:///tradesv3.sqlite') engine = create_engine('sqlite:///tradesv3.sqlite')