aboutsummaryrefslogtreecommitdiff
path: root/helper.py
diff options
context:
space:
mode:
Diffstat (limited to 'helper.py')
-rw-r--r--helper.py96
1 files changed, 48 insertions, 48 deletions
diff --git a/helper.py b/helper.py
index 95b233a..8f726d5 100644
--- a/helper.py
+++ b/helper.py
@@ -202,7 +202,7 @@ class Processor:
202 "before": True, 202 "before": True,
203 "after": False, 203 "after": False,
204 "fetch_balances": ["begin", "end"], 204 "fetch_balances": ["begin", "end"],
205 "prepare_trades": { "repartition": { "BTC": (1, "long") } }, 205 "prepare_trades": { "repartition": { "base_currency": (1, "long") } },
206 "prepare_orders": { "compute_value": "average" }, 206 "prepare_orders": { "compute_value": "average" },
207 "run_orders": {}, 207 "run_orders": {},
208 "follow_orders": {}, 208 "follow_orders": {},
@@ -226,18 +226,15 @@ class Processor:
226 "move_balances": {}, 226 "move_balances": {},
227 "run_orders": {}, 227 "run_orders": {},
228 "follow_orders": {}, 228 "follow_orders": {},
229 "close_trades": {},
229 }, 230 },
230 ] 231 ]
231 } 232 }
232 233
233 allowed_arguments = { 234 ordered_actions = [
234 "wait_for_recent": ["delta"], 235 "wait_for_recent", "prepare_trades", "prepare_orders",
235 "prepare_trades": ["base_currency", "liquidity", "compute_value", "repartition", "only"], 236 "move_balances", "run_orders", "follow_orders",
236 "prepare_orders": ["only", "compute_value"], 237 "close_trades"]
237 "move_balances": [],
238 "run_orders": [],
239 "follow_orders": ["sleep"],
240 }
241 238
242 def __init__(self, market): 239 def __init__(self, market):
243 self.market = market 240 self.market = market
@@ -264,57 +261,60 @@ class Processor:
264 for step in steps: 261 for step in steps:
265 selected_steps += self.select_steps(scenario, step) 262 selected_steps += self.select_steps(scenario, step)
266 for step in selected_steps: 263 for step in selected_steps:
267 self.process_step(scenario_name, step, **kwargs) 264 self.process_step(scenario_name, step, kwargs)
268 265
269 def process_step(self, scenario_name, step, **kwargs): 266 def process_step(self, scenario_name, step, kwargs):
270 process_name = "process_{}__{}_{}".format(scenario_name, step["number"], step["name"]) 267 process_name = "process_{}__{}_{}".format(scenario_name, step["number"], step["name"])
271 self.market.report.log_stage("{}_begin".format(process_name)) 268 self.market.report.log_stage("{}_begin".format(process_name))
272 if "begin" in step.get("fetch_balances", []): 269 if "begin" in step.get("fetch_balances", []):
273 self.market.balances.fetch_balances(tag="{}_begin".format(process_name)) 270 self.market.balances.fetch_balances(tag="{}_begin".format(process_name))
274 271
275 for action in ["wait_for_recent", "prepare_trades", 272 for action in self.ordered_actions:
276 "prepare_orders", "move_balances", "run_orders",
277 "follow_orders"]:
278 if action in step: 273 if action in step:
279 self.run_action(action, step[action], **kwargs) 274 self.run_action(action, step[action], kwargs)
280 275
281 if "end" in step.get("fetch_balances", []): 276 if "end" in step.get("fetch_balances", []):
282 self.market.balances.fetch_balances(tag="{}_end".format(process_name)) 277 self.market.balances.fetch_balances(tag="{}_end".format(process_name))
283 self.market.report.log_stage("{}_end".format(process_name)) 278 self.market.report.log_stage("{}_end".format(process_name))
284 279
285 def run_action(self, action, default_args, **kwargs): 280 def method_arguments(self, action):
286 args = {k: v for k, v in {**default_args, **kwargs}.items() if k in self.allowed_arguments[action] } 281 import inspect
287 282
288 if action == "wait_for_recent": 283 if action == "wait_for_recent":
289 portfolio.Portfolio.wait_for_recent(self.market, **args) 284 method = portfolio.Portfolio.wait_for_recent
290 if action == "prepare_trades": 285 elif action == "prepare_trades":
291 self.market.prepare_trades(**args) 286 method = self.market.prepare_trades
292 if action == "prepare_orders": 287 elif action == "prepare_orders":
293 self.market.trades.prepare_orders(**args) 288 method = self.market.trades.prepare_orders
294 if action == "move_balances": 289 elif action == "move_balances":
295 self.market.move_balances(**args) 290 method = self.market.move_balances
296 if action == "run_orders": 291 elif action == "run_orders":
297 self.market.trades.run_orders(**args) 292 method = self.market.trades.run_orders
298 if action == "follow_orders": 293 elif action == "follow_orders":
299 self.market.follow_orders(**args) 294 method = self.market.follow_orders
300 295 elif action == "close_trades":
301def process_sell_needed__1_sell(market, liquidity="medium", base_currency="BTC"): 296 method = self.market.trades.close_trades
302 Processor(market).process("sell_needed", steps="sell", 297
303 liquidity=liquidity, base_currency=base_currency) 298 signature = inspect.getfullargspec(method)
304 299 defaults = signature.defaults or []
305def process_sell_needed__2_buy(market, liquidity="medium", base_currency="BTC"): 300 kwargs = signature.args[-len(defaults):]
306 Processor(market).process("sell_needed", steps="buy", 301
307 liquidity=liquidity, base_currency=base_currency) 302 return [method, kwargs]
308 303
309def process_sell_all__1_all_sell(market, base_currency="BTC", liquidity="medium"): 304 def parse_args(self, action, default_args, kwargs):
310 Processor(market).process("sell_all", steps="all_sell", 305 method, allowed_arguments = self.method_arguments(action)
311 liquidity=liquidity, base_currency=base_currency) 306 args = {k: v for k, v in {**default_args, **kwargs}.items() if k in allowed_arguments }
312 307
313def process_sell_all__2_wait(market, liquidity="medium", base_currency="BTC"): 308 if "repartition" in args and "base_currency" in args["repartition"]:
314 Processor(market).process("sell_all", steps="wait", 309 r = args["repartition"]
315 liquidity=liquidity, base_currency=base_currency) 310 r[args.get("base_currency", "BTC")] = r.pop("base_currency")
316 311
317def process_sell_all__3_all_buy(market, base_currency="BTC", liquidity="medium"): 312 return method, args
318 Processor(market).process("sell_all", steps="all_buy", 313
319 liquidity=liquidity, base_currency=base_currency) 314 def run_action(self, action, default_args, kwargs):
315 method, args = self.parse_args(action, default_args, kwargs)
320 316
317 if action == "wait_for_recent":
318 method(self.market, **args)
319 else:
320 method(**args)