feat libs,sdk,trend
This commit is contained in:
@@ -174,7 +174,7 @@ class PortfolioHandler(BaseHandler):
|
||||
result = {
|
||||
"assets": format_assets(account_data),
|
||||
"positions": format_holding(positions),
|
||||
"orders": [fixed_fields(order) for order in orders],
|
||||
"orders": format_orders(orders),
|
||||
}
|
||||
self.write_json(result)
|
||||
|
||||
@@ -183,8 +183,7 @@ class PortfolioHandler(BaseHandler):
|
||||
class HoldingHandler(BaseHandler):
|
||||
def get(self):
|
||||
positions = safe_call(get_trade_detail_data, self.acc(), 'stock', 'position') or []
|
||||
holding = format_holding(positions)
|
||||
self.write_json({"data": holding})
|
||||
self.write_json(format_holding(positions))
|
||||
|
||||
class OrgHandler(BaseHandler):
|
||||
def get(self, handler_type):
|
||||
@@ -207,22 +206,18 @@ class OrgHandler(BaseHandler):
|
||||
# get_trade_detail_data('account') - Query account assets
|
||||
class AssetsHandler(BaseHandler):
|
||||
def get(self):
|
||||
_data = safe_call(get_trade_detail_data, self.acc(), 'stock', 'account')
|
||||
_data = safe_call(get_trade_detail_data, self.acc(), 'stock', 'account') or []
|
||||
self.write_json(format_assets(_data))
|
||||
|
||||
class OrderHandler(BaseHandler):
|
||||
def get(self):
|
||||
ret = safe_call(get_trade_detail_data, self.acc(), 'stock', 'order')
|
||||
if ret is None:
|
||||
ret = []
|
||||
result = [fixed_fields(obj) for obj in ret]
|
||||
self.write_json(result)
|
||||
ret = safe_call(get_trade_detail_data, self.acc(), 'stock', 'order') or []
|
||||
self.write_json(format_orders(ret))
|
||||
|
||||
class DealHandler(BaseHandler):
|
||||
def get(self):
|
||||
deals = safe_call(get_trade_detail_data, self.acc(), 'stock', 'deal') or []
|
||||
rets = [fixed_fields(deal) for deal in deals]
|
||||
self.write_json({"deals": rets})
|
||||
self.write_json(format_deals(deals))
|
||||
|
||||
# ContextInfo.get_full_tick() - Get full tick data
|
||||
class FullTickHandler(BaseHandler):
|
||||
@@ -330,56 +325,70 @@ def format_holding(positions):
|
||||
for position in positions:
|
||||
stock = position.m_strInstrumentID + '.' + position.m_strExchangeID
|
||||
holding[stock] = {
|
||||
'StockCode': stock,
|
||||
'TradeID':position.m_strTradeID,
|
||||
'StockName': position.m_strInstrumentName,
|
||||
'Direction': position.m_nDirection,
|
||||
'Volume': position.m_nVolume,
|
||||
'OpenPrice': position.m_dOpenPrice,
|
||||
'OpenCost':position.m_dOpenCost,
|
||||
'FloatProfit': position.m_dFloatProfit,
|
||||
'MarketValue': position.m_dMarketValue,
|
||||
'StockHolder': position.m_strStockHolder,
|
||||
'FrozenVolume': position.m_nFrozenVolume,
|
||||
'CanUseVolume': position.m_nCanUseVolume,
|
||||
'OnRoadVolume': position.m_nOnRoadVolume,
|
||||
'YesterdayVolume': position.m_nYesterdayVolume,
|
||||
'LastPrice': position.m_dLastPrice,
|
||||
'ProfitRate': position.m_dProfitRate,
|
||||
'FutureTradeType': position.m_eFutureTradeType,
|
||||
'ExpireDate': position.m_strExpireDate
|
||||
'stock_code': stock,
|
||||
'stock_name': position.m_strInstrumentName,
|
||||
'direction': position.m_nDirection,
|
||||
'volume': position.m_nVolume,
|
||||
'open_price': position.m_dOpenPrice,
|
||||
'open_cost':position.m_dOpenCost,
|
||||
'float_profit': position.m_dFloatProfit,
|
||||
'market_value': position.m_dMarketValue,
|
||||
'stock_holder': position.m_strStockHolder,
|
||||
'frozen_volume': position.m_nFrozenVolume,
|
||||
'can_use_volume': position.m_nCanUseVolume,
|
||||
'on_road_volume': position.m_nOnRoadVolume,
|
||||
'yesterday_volume': position.m_nYesterdayVolume,
|
||||
'last_price': position.m_dLastPrice,
|
||||
'profit_rate': position.m_dProfitRate,
|
||||
'future_trade_type': position.m_eFutureTradeType,
|
||||
'expire_date': position.m_strExpireDate
|
||||
}
|
||||
return holding
|
||||
|
||||
TRADE_DETAIL_FIELDS = (
|
||||
'm_strOrderSysID', 'm_strInstrumentID', 'm_strExchangeID',
|
||||
'm_strInstrumentName', 'm_nOffsetFlag', 'm_nOrderStatus',
|
||||
'm_nVolumeTotal', 'm_nVolumeTraded', 'm_nOrderTime',
|
||||
'm_strInsertDate', 'm_strInsertTime', 'm_strRemark',
|
||||
'm_dPrice', 'm_dTradePrice', 'm_dTradeAmount',
|
||||
)
|
||||
MISSING = object()
|
||||
|
||||
|
||||
def fixed_fields(obj, fields=TRADE_DETAIL_FIELDS):
|
||||
result = {}
|
||||
for field in fields:
|
||||
try:
|
||||
value = getattr(obj, field, MISSING)
|
||||
except TypeError:
|
||||
continue
|
||||
if value is MISSING:
|
||||
continue
|
||||
if not callable(value):
|
||||
result[field] = str(value)
|
||||
if not result:
|
||||
attrs = getattr(obj, '__dict__', {})
|
||||
result = {
|
||||
key: str(value) for key, value in attrs.items()
|
||||
if not key.startswith('_') and not callable(value)
|
||||
}
|
||||
def format_orders(orders):
|
||||
"""显式转换委托/成交字段,保留原始数值类型。"""
|
||||
result = []
|
||||
for order in orders:
|
||||
result.append({
|
||||
'stock_code': order.m_strInstrumentID + '.' + order.m_strExchangeID,
|
||||
'order_sys_id': order.m_strOrderSysID,
|
||||
'ref': order.m_nRef,
|
||||
'order_ref': order.m_strOrderRef,
|
||||
'direction': order.m_nDirection,
|
||||
'offset_flag': order.m_nOffsetFlag,
|
||||
'limit_price': order.m_dLimitPrice,
|
||||
'volume_total_original': order.m_nVolumeTotalOriginal,
|
||||
'volume_traded': order.m_nVolumeTraded,
|
||||
'volume_total': order.m_nVolumeTotal,
|
||||
'traded_price': order.m_dTradedPrice,
|
||||
'trade_amount': order.m_dTradeAmount,
|
||||
'insert_date': order.m_strInsertDate,
|
||||
'insert_time': order.m_strInsertTime,
|
||||
'remark': order.m_strRemark,
|
||||
'order_status': order.m_nOrderStatus,
|
||||
})
|
||||
return result
|
||||
|
||||
def format_deals(deals):
|
||||
"""显式转换委托/成交字段,保留原始数值类型。"""
|
||||
result = []
|
||||
for d in deals:
|
||||
result.append({
|
||||
'stock_code': d.m_strInstrumentID + '.' + d.m_strExchangeID,
|
||||
'order_sys_id': d.m_strOrderSysID,
|
||||
'ref': d.m_nRef,
|
||||
'order_ref': d.m_strOrderRef,
|
||||
'direction': d.m_nDirection,
|
||||
'offset_flag': d.m_nOffsetFlag,
|
||||
'price': d.m_dPrice,
|
||||
'volume': d.m_nVolume,
|
||||
'trade_amount': d.m_dTradeAmount,
|
||||
'trade_date': d.m_strTradeDate,
|
||||
'trade_time': d.m_strTradeTime,
|
||||
'remark': d.m_strRemark,
|
||||
'close_profit': d.m_dCloseProfit,
|
||||
})
|
||||
return result
|
||||
|
||||
# ============= Route registration =============
|
||||
def make_app():
|
||||
|
||||
Reference in New Issue
Block a user