class PortfolioManager(object): def __init__(self, context): # list of strategies self.list_strategies = [] self.order_management = OrderManager(context) self.portf_allocation = 0 self.instruments = dict() def add_strategy(self, value, allocation): if (self.portf_allocation + allocation > 1): print('Error: Strategy **'+str(value.name) +' ** cannot be added to portfolio. Total allocation exceeds 100%') return value.set_allocation(allocation) self.portf_allocation += allocation self.list_strategies.append(value) value.set_send_percent_orders(self.order_management.add_percent_orders) value.set_send_order_through(self.order_management.send_order_through) self.set_instruments(value.get_instruments()) self.order_management.add_instruments(value.get_instruments()) return def get_portf_allocation(self): return self.portf_allocation def set_instruments(self, value): self.instruments = merge_dicts(self.instruments, value) return def get_instruments(self): return self.instruments
def TryToBuy(price): """ 这里尝试买入,因为想要尽量快点成交,所以这里比第一卖出价出更高的价格买入 先判断一定时间内,是否有比当前价格更低的买入还没有卖出去 再判断是否有和当前价格相差在150usdt之内的买入 再检查资金是否足够 """ price += 1 dtNow = datetime.now() rangeSeconds = 4 * 3600 count = 0 for hold in HoldManager.holds: dtHold = hold.buyTime timeDiff = (dtNow - dtHold).seconds if timeDiff < rangeSeconds: if hold.buyPrice < price: count += 1 priceDiff = abs(hold.buyPrice - price) if priceDiff < 150: return False if count >= 2: return False costQuote, buyAmount = BalanceManager.Buy(price) if costQuote < 0 or buyAmount < 0: return False operationId = str(time.time()) OrderManager.SendBuy(operationId, price, buyAmount, costQuote) return True
def StartSystem(): """ 启动各子系统 """ HoldManager.Start() DataDownloader.Start() BalanceManager.Start() OrderManager.Start()
def TryToSell(price): """ 这里尝试买入,因为想要尽量快点成交,所以这里要卖的便宜一点,比最低的买入者价格再低一1usdt """ price -= 1 index = 0 canSellList = HoldManager.GetCanSellHolds(price) if canSellList != None and len(canSellList) > 0: for hold in canSellList: index += 1 operationId = hold.operationId OrderManager.SendSell(operationId, price, hold.holdAmount, hold.buyCost)
class PortfolioManager(object): def __init__(self, context): # list of strategies self.list_strategies = [] self.order_management = OrderManager(context) self.portf_allocation = 0 self.instruments = dict() def add_strategy(self, value, allocation): if (self.portf_allocation + allocation > 1): print( 'Error: Strategy **' + str(value.name) + ' ** cannot be added to portfolio. Total allocation exceeds 100%' ) return value.set_allocation(allocation) self.portf_allocation += allocation self.list_strategies.append(value) value.set_send_percent_orders(self.order_management.add_percent_orders) value.set_send_order_through(self.order_management.send_order_through) self.set_instruments(value.get_instruments()) self.order_management.add_instruments(value.get_instruments()) return def get_portf_allocation(self): return self.portf_allocation def set_instruments(self, value): self.instruments = merge_dicts(self.instruments, value) return def get_instruments(self): return self.instruments
def __init__(self, context, name): self.context = context # currently only required for get_portf_allocation self.portf_name = name # by default, the Portfolio logger is set to output to the console # at a level sufficient to report problems. AnalyticsManager.__init__(self, analytics_name=name) self.set_log_option(logconsole=True, logfile=False, level=3) # list of strategies self.list_strategies = [] self.portf_allocation = 0 self.instruments = dict() self.strategies = list() self.order_manager = OrderManager(context, name = "OrderManager") return
def __init__(self, context, name): self.context = context # currently only required for get_portf_allocation self.portf_name = name # by default, the Portfolio logger is set to output to the console # at a level sufficient to report problems. AnalyticsManager.__init__(self, analytics_name=name) self.set_log_option(logconsole=True, logfile=False, level=3) # list of strategies self.list_strategies = [] self.portf_allocation = 0 self.instruments = dict() self.strategies = list() # make the order_manager object persistent self.context.order_manager = OrderManager(context, name="OrderManager") return
def __init__(self, context): # list of strategies self.list_strategies = [] self.order_management = OrderManager(context) self.portf_allocation = 0 self.instruments = dict()
def StopSystem(): """ 停止各子系统 """ OrderManager.Stop() DataDownloader.Stop()
class PortfolioManager(object, AnalyticsManager): def __init__(self, context, name): self.context = context # currently only required for get_portf_allocation self.portf_name = name # by default, the Portfolio logger is set to output to the console # at a level sufficient to report problems. AnalyticsManager.__init__(self, analytics_name=name) self.set_log_option(logconsole=True, logfile=False, level=3) # list of strategies self.list_strategies = [] self.portf_allocation = 0 self.instruments = dict() self.strategies = list() self.order_manager = OrderManager(context, name = "OrderManager") return def add_strategy(self, value, allocation): if (self.portf_allocation + allocation > 1): msg = '\n\t Strategy named**'+str(value.name) +' ** cannot be added to portfolio. Total allocation exceeds 100%' self.add_log('error',msg) return if value.name in self.list_strategies: msg = '\n\t Strategy named ' +str(value.name) +' already exists and cannot be added to portfolio' self.add_log('error',msg) return value.portfolio.set_allocation(allocation) self.portf_allocation += allocation self.list_strategies.append(value.name) self.strategies.append(value) # Registrating with third-party methods # # value.set_send_percent_orders(self.order_manager.add_percent_orders) # value.set_send_order_through(self.order_manager.send_order_through) # value.set_add_orders(self.order_manager.add_orders) # value.portfolio.set_portf_allocation(self.get_portf_allocation) # # End of registration self.set_instruments(value.get_instruments()) self.order_manager.add_instruments(value.get_instruments()) return def get_portf_allocation(self): return self.portf_allocation def get_total_portfolio_value (self): return self.context.portfolio.portfolio_value def set_instruments(self, value): self.instruments = merge_dicts(self.instruments, value) return def get_instruments(self): return self.instruments def analytics_save (self, outdir): savepath = outdir+self.portf_name+'/' for strat in self.strategies: if strat.get_dumpanalytics(): strat.write_analytics_tocsv(output_directory=savepath) if self.order_manager.get_dumpanalytics(): self.order_manager.write_analytics_tocsv(output_directory=savepath) def sendorder_to_ordermanager (self, target_dollar_value): # # target_dollar_value: dictionary of positions target in dollar value # dict{inst; dollarvalue} # self.order_manager.add_orders (target_dollar_value) return def handle_data (self, data): self.order_manager.update(data) return