]>
git.immae.eu Git - perso/Immae/Projets/Cryptomonnaies/Cryptoportfolio/Trader.git/blob - helper.py
1 from datetime
import datetime
10 def main_parse_args(argv
):
11 parser
= argparse
.ArgumentParser(
12 description
="Run the trade bot")
14 parser
.add_argument("-c", "--config",
17 help="Config file to load (default: config.ini)")
18 parser
.add_argument("--before",
19 default
=False, action
='store_const', const
=True,
20 help="Run the steps before the cryptoportfolio update")
21 parser
.add_argument("--after",
22 default
=False, action
='store_const', const
=True,
23 help="Run the steps after the cryptoportfolio update")
24 parser
.add_argument("--debug",
25 default
=False, action
='store_const', const
=True,
26 help="Run in debug mode")
27 parser
.add_argument("--user",
28 default
=None, required
=False, help="Only run for that user")
29 parser
.add_argument("--action",
30 default
=None, required
=False,
31 help="Do a different action than trading")
33 args
= parser
.parse_args(argv
)
35 if not os
.path
.exists(args
.config
):
36 print("no config file found, exiting")
41 def main_parse_config(config_file
):
42 config
= configparser
.ConfigParser()
43 config
.read(config_file
)
45 if "postgresql" not in config
:
46 print("no configuration for postgresql in config file")
49 if "app" in config
and "report_path" in config
["app"]:
50 report_path
= config
["app"]["report_path"]
52 if not os
.path
.exists(report_path
):
53 os
.makedirs(report_path
)
57 return [config
["postgresql"], report_path
]
59 def main_fetch_markets(pg_config
, user
):
60 connection
= psycopg2
.connect(**pg_config
)
61 cursor
= connection
.cursor()
64 cursor
.execute("SELECT config,user_id FROM market_configs")
66 cursor
.execute("SELECT config,user_id FROM market_configs WHERE user_id = %s", user
)
71 def main_process_market(user_market
, action
, before
=False, after
=False):
74 process_sell_all__1_all_sell(user_market
)
76 portfolio
.Portfolio
.wait_for_recent(user_market
)
77 process_sell_all__2_all_buy(user_market
)
78 elif action
== "print_balances":
79 print_balances(user_market
)
80 elif action
== "print_orders":
81 print_orders(user_market
)
83 raise NotImplementedError("Unknown action {}".format(action
))
85 def main_store_report(report_path
, user_id
, user_market
):
87 if report_path
is not None:
88 report_file
= "{}/{}_{}.json".format(report_path
, datetime
.now().isoformat(), user_id
)
89 with open(report_file
, "w") as f
:
90 f
.write(user_market
.report
.to_json())
91 except Exception as e
:
92 print("impossible to store report file: {}; {}".format(e
.__class
__.__name
__, e
))
94 def print_orders(market
, base_currency
="BTC"):
95 market
.report
.log_stage("print_orders")
96 market
.balances
.fetch_balances(tag
="print_orders")
97 market
.prepare_trades(base_currency
=base_currency
, compute_value
="average")
98 market
.trades
.prepare_orders(compute_value
="average")
100 def print_balances(market
, base_currency
="BTC"):
101 market
.report
.log_stage("print_balances")
102 market
.balances
.fetch_balances()
103 if base_currency
is not None:
104 market
.report
.print_log("total:")
105 market
.report
.print_log(sum(market
.balances
.in_currency(base_currency
).values()))
107 def process_sell_needed__1_sell(market
, liquidity
="medium", base_currency
="BTC"):
108 market
.report
.log_stage("process_sell_needed__1_sell_begin")
109 market
.balances
.fetch_balances(tag
="process_sell_needed__1_sell_begin")
110 market
.prepare_trades(liquidity
=liquidity
, base_currency
=base_currency
)
111 market
.trades
.prepare_orders(compute_value
="average", only
="dispose")
112 market
.trades
.run_orders()
113 market
.follow_orders()
114 market
.balances
.fetch_balances(tag
="process_sell_needed__1_sell_end")
115 market
.report
.log_stage("process_sell_needed__1_sell_end")
117 def process_sell_needed__2_buy(market
, liquidity
="medium", base_currency
="BTC"):
118 market
.report
.log_stage("process_sell_needed__2_buy_begin")
119 market
.balances
.fetch_balances(tag
="process_sell_needed__2_buy_begin")
120 market
.update_trades(base_currency
=base_currency
, liquidity
=liquidity
, only
="acquire")
121 market
.trades
.prepare_orders(compute_value
="average", only
="acquire")
122 market
.move_balances()
123 market
.trades
.run_orders()
124 market
.follow_orders()
125 market
.balances
.fetch_balances(tag
="process_sell_needed__2_buy_end")
126 market
.report
.log_stage("process_sell_needed__2_buy_end")
128 def process_sell_all__1_all_sell(market
, base_currency
="BTC", liquidity
="medium"):
129 market
.report
.log_stage("process_sell_all__1_all_sell_begin")
130 market
.balances
.fetch_balances(tag
="process_sell_all__1_all_sell_begin")
131 market
.prepare_trades_to_sell_all(base_currency
=base_currency
)
132 market
.trades
.prepare_orders(compute_value
="average")
133 market
.trades
.run_orders()
134 market
.follow_orders()
135 market
.balances
.fetch_balances(tag
="process_sell_all__1_all_sell_end")
136 market
.report
.log_stage("process_sell_all__1_all_sell_end")
138 def process_sell_all__2_all_buy(market
, base_currency
="BTC", liquidity
="medium"):
139 market
.report
.log_stage("process_sell_all__2_all_buy_begin")
140 market
.balances
.fetch_balances(tag
="process_sell_all__2_all_buy_begin")
141 market
.prepare_trades(liquidity
=liquidity
, base_currency
=base_currency
)
142 market
.trades
.prepare_orders(compute_value
="average")
143 market
.move_balances()
144 market
.trades
.run_orders()
145 market
.follow_orders()
146 market
.balances
.fetch_balances(tag
="process_sell_all__2_all_buy_end")
147 market
.report
.log_stage("process_sell_all__2_all_buy_end")