def build_transfer_ratio_text(self, market_ctx): trade_ratios = [ TransferRatio.build_transfer_ratio(chain, market_ctx) for chain in self.chains ] trade_ratios = sorted( trade_ratios, key=lambda x: to_comparable_repr(x.exchange_pair + x.equity)) last_exchange_pair = trade_ratios[0].exchange_pair lines = [] for trade_ratio in trade_ratios: # exchange_pair가 바뀌었다면 한 줄 띄워준다. if last_exchange_pair != trade_ratio.exchange_pair: last_exchange_pair = trade_ratio.exchange_pair lines.append('') # TradeRatio에 대해 한줄씩 넣어준다. equity = trade_ratio.equity ratio = trade_ratio.ratio price_diff = trade_ratio.price_diff percentile = (ratio - 1) * 100 log_percentile = 100 * math.log1p(ratio - 1) diff = int(price_diff) lines.append('{0:12}: {1:+.3f} % ({2:+.3f} ln%) [{3:+,d}]'.format( equity, percentile, log_percentile, diff)) return '\n'.join(lines)
def _build_balance_status_text(self): asset_volumes = self._total_asset_volumes().items() asset_volumes = sorted(asset_volumes, key=lambda x: to_comparable_repr(x[0])) texts = [] for (equity, volume) in asset_volumes: texts.append(ContentLines.get_balance_line(equity, volume)) return '\n'.join(texts)
def _build_assets_text(self, assets): texts = [] sorted_keys = sorted(assets.keys(), key=lambda x: to_comparable_repr(x)) for key in sorted_keys: asset = assets[key] texts.append(' {}'.format( ContentLines.get_balance_line(key, asset.volume))) return '\n'.join(texts)
def balance_changes(self): equities = self.participating_equities equities = sorted(equities, key=lambda x: to_comparable_repr(x)) changes = [] for equity in equities: old_asset_volume = self.before_balance.assets[equity].volume new_asset_volume = self.after_balance.assets[equity].volume diff = new_asset_volume - old_asset_volume change = TradeTaskAssetChange() change.equity = equity change.volume = new_asset_volume change.diff = diff changes.append(change) return changes
def build_orderbook_spread_text(self, market_ctx): orderbook_spreads = OrderbookSpread.build_orderbook_spreads( self.chains, market_ctx) orderbook_spreads = sorted( orderbook_spreads, key=lambda x: to_comparable_repr(x.orderbook_key)) last_exchange = orderbook_spreads[0].exchange lines = [] for orderbook_spread in orderbook_spreads: # exchange가 바뀌었다면 한 줄 띄워준다. if last_exchange != orderbook_spread.exchange: last_exchange = orderbook_spread.exchange lines.append('') orderbook_key = orderbook_spread.orderbook_key spread_percentile = orderbook_spread.spread * 100 lines.append('{0:16}: {1:.5f} %'.format(orderbook_key, spread_percentile)) return '\n'.join(lines)
def total_balance_changes(self): equities = self.participating_equities total_changes_builder = {} for equity in equities: _, symbol = equity.split(':') old_asset_volume = self.before_balance.assets[equity].volume new_asset_volume = self.after_balance.assets[equity].volume diff = new_asset_volume - old_asset_volume if symbol not in total_changes_builder: change = TradeTaskAssetChange() change.equity = symbol change.volume = 0 change.diff = 0 total_changes_builder[symbol] = change change = total_changes_builder[symbol] change.volume += new_asset_volume change.diff += diff changes = total_changes_builder.values() return sorted(changes, key=lambda x: to_comparable_repr(x.equity))