feat dev6

This commit is contained in:
2026-09-01 14:28:49 +08:00
parent dedbf63a92
commit 556e21d624
27 changed files with 334 additions and 144 deletions

View File

@@ -934,7 +934,8 @@ class TradeDetailDataHandler(BaseHandler):
ret = safe_call(get_trade_detail_data, self.acc(), account, datatype)
if ret is None:
ret = []
self.write(json.dumps({"data": ret}, separators=(',', ':'), ensure_ascii=False))
result = [fixed_fields(obj) for obj in ret]
self.write(json.dumps({"data": result}, separators=(',', ':'), ensure_ascii=False))
# get_value_by_order_id() - Get order or trade details by order ID
class ValueByOrderIdHandler(BaseHandler):
@@ -1080,7 +1081,28 @@ class HoldingHandler(BaseHandler):
data = json.loads(self.request.body)
account = data.get('account', 'stock')
positions = safe_call(get_trade_detail_data, self.acc(), account, 'position') or []
self.write(json.dumps({"data": positions}, separators=(',', ':'), ensure_ascii=False))
holding = {}
for position in positions:
stock = position.m_strInstrumentID + '.' + position.m_strExchangeID
holding[stock] = {
'StockCode': stock,
'StockName': position.m_strInstrumentName,
'Direction': position.m_nDirection,
'Volume': position.m_nVolume,
'OpenPrice': position.m_dOpenPrice,
'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
}
self.write(json.dumps({"data": holding}, separators=(',', ':'), ensure_ascii=False))
# get_trade_detail_data('account') - Query account assets
class AssetsHandler(BaseHandler):
@@ -1094,28 +1116,6 @@ class AssetsHandler(BaseHandler):
self.write(json.dumps({"total": round(info.m_dBalance, 2),"available": round(info.m_dAvailable, 2)}, separators=(',', ':'), ensure_ascii=False))
# get_trade_detail_data('account') - Query total assets
class TotalMoneyHandler(BaseHandler):
def post(self):
data = json.loads(self.request.body)
account = data.get('account', 'stock')
_data = safe_call(get_trade_detail_data, self.acc(), account, 'account')
info = _data[0] if _data else None
if not info:
raise HTTPError(500, "Failed to get account data")
self.write(json.dumps({"total_money": round(info.m_dBalance, 2)}, separators=(',', ':'), ensure_ascii=False))
# get_trade_detail_data('account') - Query available cash
class AvailableMoneyHandler(BaseHandler):
def post(self):
data = json.loads(self.request.body)
account = data.get('account', 'stock')
_data = safe_call(get_trade_detail_data, self.acc(), account, 'account')
info = _data[0] if _data else None
if not info:
raise HTTPError(500, "Failed to get account data")
self.write(json.dumps({"available_money": round(info.m_dAvailable, 2)}, separators=(',', ':'), ensure_ascii=False))
# passorder(23) - Simplified buy order wrapper
class BuyHandler(BaseHandler):
def post(self):
@@ -1275,8 +1275,6 @@ def make_app():
# Legacy compatibility routes
(r"/api/holding", HoldingHandler),
(r"/api/money/total", TotalMoneyHandler),
(r"/api/money/available", AvailableMoneyHandler),
(r"/api/order/buy", BuyHandler),
(r"/api/order/sell", SellHandler),
(r"/api/order/status", OrderStatusHandler),