Skip to content

最新智慧單回報

與一般委託相同,在送出智慧單之後,可透過委託物件查詢回報

也可以透過註冊事件捕捉最新回報,根據不同的智慧單類別,進行相應的查詢

這邊僅以 MIT 為例,其餘智慧單回報相關操作皆相同

透過 MIT 委託物件,查詢最新回報

藉由 MIT 委託物件 MITOrder 查詢,其中 order.reply 可以查詢到最新回報

python
from eskmo import api
from eskmo import User, Stock, MITOrder, StockOrders
api.logger.show = True
cst = api.const

@api.start
def main():
    user: User = api.login(userId="A123456789", password="*************", tag="me")

    stock: Stock = api.stocks["2897"]
    order: MITOrder = stock.smartOrder.mit(cst.ORDER.ACTION.BUY, 8, 1, 8).send(user.id)
    reply = order.reply
    print(reply)

除了從送出的委託中取得回報,也可以透過商品檔 mit_orders() 取出該檔今日所有 MIT 委託

再從 MIT 委託中檢索,取出最新回報 order.reply

python
from eskmo import api
from eskmo import User, Stock, MITOrder, MITOrders
api.logger.show = True
cst = api.const

@api.start
def main():
    user: User = api.login(userId="A123456789", password="*************", tag="me")
    stock: Stock = api.stocks["2897"]

    orders: MITOrders = stock.mit_orders(user.id)
    for order in orders:
        print(order.reply)    
        # {'bstrUserID': 'A123456789', 'TradeKind': '8', 'MarketType': 'TS',
        #  'Type': '2', 'ExchangeCode': '0', 'SmartKeyNo': '16111290', 
        #  'PubSeqNo': '2', 'Broker': '****', 'Account': '*******', 
        #  'SubAccount': '0000000', 'ExchangeID': 'TSE', 'SeqNo': '1685200177616', 
        #  'OSeqNo': '1685000301839', 'OrderNo': '', 'StockNo': '2897', 
        #  'BuySell': 'B', 'OrderType': '0', 'OrderPriceMark': '7',
        #  'OrderPrice': '9', 'PriceType': '2', 'OrderCond': '0', 
        #  'Qty': '1', 'TriggerPrice': '9', 'TriggerTime': '', 'TriggerDir': '2',
        #  'DayTrade': '', 'CreateTime': 1735260936.0, 'SaleNo': '8890',
        #  'UserIP': '***.**.*.***', 'TradeSource': 'y', 'Staus': '40',
        #  'ErrorMsg': 'N', 'Message': '刪單', 'UpdateTime': 1735260931.0,
        #  'UniversalMsg': '', 'BasePrice': '0', 'MarketDealTrigger': '',
        #  'PreRiskFlag': '0', 'SplitFlag': '0', 'serialNumber': 6, 
        #  'buyOrSell': '買'}

註冊事件取得最新回報

另一個獲取最新回報的方式是透過註冊事件 @api.event.mit_order.notify 來獲得回報

python
from eskmo import api
from eskmo import MITOrderNotifyResult
api.logger.show = True

@api.event.mit_order.notify
def onMITOrderNotify(result: MITOrderNotifyResult):
    print(f"最新 MIT 回報: {result}")
    # MITOrderNotifyResult(count=8, 
    #     order=SmartOrderStatus(reply=SmartReply(user_id='A123456789', 
    #     trade_kind='8', market='TS', type='1', exchange_code='0', 
    #     smart_key_no='16114354', pub_seq_no='2', broker='****', 
    #     account='*******', sub_account='0000000', exchange_id='TSE', 
    #     seq_no='1685200179612', o_seq_no='1685200179612', order_no='', 
    #     symbol='2897', buysell_str='B', order_type='0', order_price_mark='7', 
    #     order_price='9', price_type='2', order_cond='0', qty='1', 
    #     trigger_price='9', trigger_time='', trigger_dir='2', day_trade='',
    #     created=datetime.datetime(1970, 1, 21, 10, 1, 2, 444000), 
    #     sale_no='8890', user_ip='***.**.*.***', trade_source='y', status='34',
    #     error_msg='N', message='已加入洗價', 
    #     updated=datetime.datetime(1970, 1, 21, 10, 1, 2, 438000), 
    #     universal_msg='', base_price='0', market_deal_trigger='',
    #     num=8, buysell='買'), is_closed=False, price='9', volume=1000,
    #     volume_remain=1000, volume_cancel=0, volume_deal=0))

@api.start
def main():
    api.login(userId="A123456789", password="*************")