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
示例#2
0
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
示例#3
0
def StartSystem():
    """
    启动各子系统
    """
    HoldManager.Start()
    DataDownloader.Start()
    BalanceManager.Start()
    OrderManager.Start()
示例#4
0
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
示例#7
0
    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()
示例#9
0
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
 def __init__(self, context):
     # list of strategies
     self.list_strategies = []
     self.order_management = OrderManager(context)
     self.portf_allocation = 0
     self.instruments = dict()