操作功能前請先登入

詳細功能請參考API Reference/fquote

Open In Colab

查詢成交和最佳買賣價

透過 fquote 物件中的 query_tick_data_trade 方法查詢最後成交價。

透過 fquote 物件中的 query_tick_data_bid 方法查詢最後最佳買價。

透過 fquote 物件中的 query_tick_data_offer 方法查詢最後最佳賣價。

#查詢成交和最佳買賣價範例
productid='CME|NQ|202409|F|' #商品代碼
if loginresponse.ok == True:  
    display(fig)           
    display(fig2)
    display(fig3)
    #查詢成交價量
    tickDataTradeResponse=api.fquote.query_tick_data_trade(exchange= productid.split('|')[0], symbol= productid.split('|')[1], ym=productid.split('|')[2], cp= productid.split('|')[3], strike=productid.split('|')[4] )
    if tickDataTradeResponse.ok == True: 
        tickdatatrade=tickDataTradeResponse.data
        cur = list(fig.data[0].cells.values)  
        cur[col_idx['成交時間']] =tickdatatrade.time   
        cur[col_idx['成交價']] = tickdatatrade.lastprice 
        cur[col_idx['成交量'] ]= tickdatatrade.lastvolume
        with fig.batch_update():
            fig.data[0].cells.values = cur            
    else:
        print('tickDataTradeResponse '+tickDataTradeResponse.error)
    #查詢最佳買價
    tickDataBidResponse=api.fquote.query_tick_data_bid(exchange= productid.split('|')[0], symbol= productid.split('|')[1], ym=productid.split('|')[2], cp= productid.split('|')[3], strike=productid.split('|')[4] )
    if tickDataBidResponse.ok == True:
        tickdatabid=tickDataBidResponse.data
        cur = list(fig2.data[0].cells.values)  
        cur[col2_idx['買價1']] =tickdatabid.BidDOM1Price 
        cur[col2_idx['買量1']] =tickdatabid.BidDOM1Volume    
        cur[col2_idx['買價2']] =tickdatabid.BidDOM2Price 
        cur[col2_idx['買量2']] =tickdatabid.BidDOM2Volume    
        cur[col2_idx['買價3']] =tickdatabid.BidDOM3Price 
        cur[col2_idx['買量3']] =tickdatabid.BidDOM3Volume    
        cur[col2_idx['買價4']] =tickdatabid.BidDOM4Price 
        cur[col2_idx['買量4']] =tickdatabid.BidDOM4Volume    
        cur[col2_idx['買價5']] =tickdatabid.BidDOM5Price 
        cur[col2_idx['買量5']] =tickdatabid.BidDOM5Volume                 
        cur[col2_idx['買價6']] =tickdatabid.BidDOM6Price 
        cur[col2_idx['買量6']] =tickdatabid.BidDOM6Volume   
        cur[col2_idx['買價7']] =tickdatabid.BidDOM7Price 
        cur[col2_idx['買量7']] =tickdatabid.BidDOM7Volume   
        cur[col2_idx['買價8']] =tickdatabid.BidDOM8Price 
        cur[col2_idx['買量8']] =tickdatabid.BidDOM8Volume   
        cur[col2_idx['買價9']] =tickdatabid.BidDOM9Price 
        cur[col2_idx['買量9']] =tickdatabid.BidDOM9Volume   
        cur[col2_idx['買價10']] =tickdatabid.BidDOM10Price 
        cur[col2_idx['買量10']] =tickdatabid.BidDOM10Volume                                                              
        with fig2.batch_update():
            fig2.data[0].cells.values = cur    
    else:
        print('tickDataBidResponse '+tickDataBidResponse.error)
    #查詢最佳賣價
    tickDataOfferResponse=api.fquote.query_tick_data_offer(exchange= productid.split('|')[0], symbol= productid.split('|')[1], ym=productid.split('|')[2], cp= productid.split('|')[3], strike=productid.split('|')[4] )
    if tickDataOfferResponse.ok == True:
        tickdataOffer=tickDataOfferResponse.data
        cur = list(fig3.data[0].cells.values)  
        cur[col3_idx['賣價1']] =tickdataOffer.OfferDOM1Price 
        cur[col3_idx['賣量1']] =tickdataOffer.OfferDOM1Volume    
        cur[col3_idx['賣價2']] =tickdataOffer.OfferDOM2Price 
        cur[col3_idx['賣量2']] =tickdataOffer.OfferDOM2Volume    
        cur[col3_idx['賣價3']] =tickdataOffer.OfferDOM3Price 
        cur[col3_idx['賣量3']] =tickdataOffer.OfferDOM3Volume    
        cur[col3_idx['賣價4']] =tickdataOffer.OfferDOM4Price 
        cur[col3_idx['賣量4']] =tickdataOffer.OfferDOM4Volume    
        cur[col3_idx['賣價5']] =tickdataOffer.OfferDOM5Price 
        cur[col3_idx['賣量5']] =tickdataOffer.OfferDOM5Volume                 
        cur[col3_idx['賣價6']] =tickdataOffer.OfferDOM6Price 
        cur[col3_idx['賣量6']] =tickdataOffer.OfferDOM6Volume   
        cur[col3_idx['賣價7']] =tickdataOffer.OfferDOM7Price 
        cur[col3_idx['賣量7']] =tickdataOffer.OfferDOM7Volume   
        cur[col3_idx['賣價8']] =tickdataOffer.OfferDOM8Price 
        cur[col3_idx['賣量8']] =tickdataOffer.OfferDOM8Volume   
        cur[col3_idx['賣價9']] =tickdataOffer.OfferDOM9Price 
        cur[col3_idx['賣量9']] =tickdataOffer.OfferDOM9Volume   
        cur[col3_idx['賣價10']] =tickdataOffer.OfferDOM10Price 
        cur[col3_idx['賣量10']] =tickdataOffer.OfferDOM10Volume                                                              
        with fig3.batch_update():
            fig3.data[0].cells.values = cur             
    else:
        print('tickDataOfferResponse '+tickDataOfferResponse.error)  

訂閱成交和最佳買賣價接收

productid='CME|NQ|202409|F|' #商品代碼
#成交價量處理
def on_tick_data_trade(tickdatatrade: FTickDataTrade):
    cur = list(fig.data[0].cells.values)
    cur[col_idx['成交時間']] = tickdatatrade.time
    cur[col_idx['成交價']] = tickdatatrade.lastprice
    cur[col_idx['成交量']] = tickdatatrade.lastvolume
    with fig.batch_update():
        fig.data[0].cells.values = cur
#最佳買價處理
def on_tick_data_bid(tickdatabid: FTickDataBid):
    cur = list(fig2.data[0].cells.values)
    cur[col2_idx['買價1']] = tickdatabid.BidDOM1Price
    cur[col2_idx['買量1']] = tickdatabid.BidDOM1Volume
    cur[col2_idx['買價2']] = tickdatabid.BidDOM2Price
    cur[col2_idx['買量2']] = tickdatabid.BidDOM2Volume
    cur[col2_idx['買價3']] = tickdatabid.BidDOM3Price
    cur[col2_idx['買量3']] = tickdatabid.BidDOM3Volume
    cur[col2_idx['買價4']] = tickdatabid.BidDOM4Price
    cur[col2_idx['買量4']] = tickdatabid.BidDOM4Volume
    cur[col2_idx['買價5']] = tickdatabid.BidDOM5Price
    cur[col2_idx['買量5']] = tickdatabid.BidDOM5Volume
    cur[col2_idx['買價6']] = tickdatabid.BidDOM6Price
    cur[col2_idx['買量6']] = tickdatabid.BidDOM6Volume
    cur[col2_idx['買價7']] = tickdatabid.BidDOM7Price
    cur[col2_idx['買量7']] = tickdatabid.BidDOM7Volume
    cur[col2_idx['買價8']] = tickdatabid.BidDOM8Price
    cur[col2_idx['買量8']] = tickdatabid.BidDOM8Volume
    cur[col2_idx['買價9']] = tickdatabid.BidDOM9Price
    cur[col2_idx['買量9']] = tickdatabid.BidDOM9Volume
    cur[col2_idx['買價10']] = tickdatabid.BidDOM10Price
    cur[col2_idx['買量10']] = tickdatabid.BidDOM10Volume
    with fig2.batch_update():
        fig2.data[0].cells.values = cur
#最佳賣價處理
def on_tick_data_offer(tickdataOffer: FTickDataOffer):
    cur = list(fig3.data[0].cells.values)
    cur[col3_idx['賣價1']] = tickdataOffer.OfferDOM1Price
    cur[col3_idx['賣量1']] = tickdataOffer.OfferDOM1Volume
    cur[col3_idx['賣價2']] = tickdataOffer.OfferDOM2Price
    cur[col3_idx['賣量2']] = tickdataOffer.OfferDOM2Volume
    cur[col3_idx['賣價3']] = tickdataOffer.OfferDOM3Price
    cur[col3_idx['賣量3']] = tickdataOffer.OfferDOM3Volume
    cur[col3_idx['賣價4']] = tickdataOffer.OfferDOM4Price
    cur[col3_idx['賣量4']] = tickdataOffer.OfferDOM4Volume
    cur[col3_idx['賣價5']] = tickdataOffer.OfferDOM5Price
    cur[col3_idx['賣量5']] = tickdataOffer.OfferDOM5Volume
    cur[col3_idx['賣價6']] = tickdataOffer.OfferDOM6Price
    cur[col3_idx['賣量6']] = tickdataOffer.OfferDOM6Volume
    cur[col3_idx['賣價7']] = tickdataOffer.OfferDOM7Price
    cur[col3_idx['賣量7']] = tickdataOffer.OfferDOM7Volume
    cur[col3_idx['賣價8']] = tickdataOffer.OfferDOM8Price
    cur[col3_idx['賣量8']] = tickdataOffer.OfferDOM8Volume
    cur[col3_idx['賣價9']] = tickdataOffer.OfferDOM9Price
    cur[col3_idx['賣量9']] = tickdataOffer.OfferDOM9Volume
    cur[col3_idx['賣價10']] = tickdataOffer.OfferDOM10Price
    cur[col3_idx['賣量10']] = tickdataOffer.OfferDOM10Volume
    with fig3.batch_update():
        fig3.data[0].cells.values = cur


#訂閱接收事件
api.fquote.on_tick_data_trade = on_tick_data_trade
api.fquote.on_tick_data_bid = on_tick_data_bid
api.fquote.on_tick_data_offer = on_tick_data_offer 
if loginresponse.ok == True:
    # 註冊報價
    subok, msg = api.fquote.subscribe(exchange=productid.split('|')[0], symbol=productid.split(
        '|')[1], ym=productid.split('|')[2], cp=productid.split('|')[3], strike=productid.split('|')[4])
    print(f'註冊報價 {productid} {subok} {msg}')
    display(fig)           
    display(fig2)
    display(fig3)


查詢隱含 最高最低 開收盤 結算價

productid='CME|NQ|202409|F|' #商品代碼
if loginresponse.ok == True: 
    display(fig4)
    #查詢隱含買賣價       
    tickDataImpliedResponse=api.fquote.query_tick_data_implied(exchange= productid.split('|')[0], symbol= productid.split('|')[1], ym=productid.split('|')[2], cp= productid.split('|')[3], strike=productid.split('|')[4] )
    if tickDataImpliedResponse.ok == True: 
        tickdataimplied=tickDataImpliedResponse.data
        cur = list(fig4.data[0].cells.values)
        cur[col4_idx['隱含買價']] = tickdataimplied.ImpliedBidPrice 
        cur[col4_idx['隱含買量']] = tickdataimplied.ImpliedBidVolume 
        cur[col4_idx['隱含賣價']] = tickdataimplied.ImpliedOfferPrice 
        cur[col4_idx['隱含賣量']] = tickdataimplied.ImpliedOfferVolume 
        with fig4.batch_update():
            fig4.data[0].cells.values = cur        
    else:
        print('tickDataImpliedResponse '+tickDataImpliedResponse.error)
    #查詢開收盤價
    tickDataOpencloseResponse=api.fquote.query_tick_data_open_close(exchange= productid.split('|')[0], symbol= productid.split('|')[1], ym=productid.split('|')[2], cp= productid.split('|')[3], strike=productid.split('|')[4] )
    if tickDataOpencloseResponse.ok == True: 
        tickdataopenclose=tickDataOpencloseResponse.data
        cur = list(fig4.data[0].cells.values)
        cur[col4_idx['開盤價']] = tickdataopenclose.Opening 
        cur[col4_idx['收盤價']] = tickdataopenclose.Closing  
        with fig4.batch_update():
            fig4.data[0].cells.values = cur                
    else:
        print('tickDataOpencloseResponse '+tickDataOpencloseResponse.error)
    #查詢最高最低價                   
    tickDataHighLowResponse=api.fquote.query_tick_data_high_low(exchange= productid.split('|')[0], symbol= productid.split('|')[1], ym=productid.split('|')[2], cp= productid.split('|')[3], strike=productid.split('|')[4] )
    if tickDataHighLowResponse.ok==True: 
        tickdatahighlow=tickDataHighLowResponse.data
        cur = list(fig4.data[0].cells.values)
        cur[col4_idx['最高價']] = tickdatahighlow.High 
        cur[col4_idx['最低價']] = tickdatahighlow.Low  
        with fig4.batch_update():
            fig4.data[0].cells.values = cur                 
    else:
        print('tickDataHighLowResponse '+tickDataHighLowResponse.error)
    #查詢結算價            
    tickDataSettleResponse=api.fquote.query_tick_data_settle(exchange= productid.split('|')[0], symbol= productid.split('|')[1], ym=productid.split('|')[2], cp= productid.split('|')[3], strike=productid.split('|')[4] )
    if tickDataSettleResponse.ok==True: 
        tickdatasettle=tickDataSettleResponse.data
        cur = list(fig4.data[0].cells.values)
        cur[col4_idx['目前結算價']] = tickdatasettle.CurrStl 
        cur[col4_idx['最新結算價']] = tickdatasettle.NewStl  
        with fig4.batch_update():
            fig4.data[0].cells.values = cur           
    else:
        print('tickDataSettleResponse '+tickDataSettleResponse.error)                

註冊隱含 最高最低 開收盤 結算價

productid='CME|NQ|202409|F|' #商品代碼
#隱含買賣價接收處理
def on_tick_data_implied(ticksataimplied: FTickDataImplied):
    cur = list(fig4.data[0].cells.values)
    cur[col4_idx['隱含買價']] = tickdataimplied.ImpliedBidPrice
    cur[col4_idx['隱含買量']] = tickdataimplied.ImpliedBidVolume
    cur[col4_idx['隱含賣價']] = tickdataimplied.ImpliedOfferPrice
    cur[col4_idx['隱含賣量']] = tickdataimplied.ImpliedOfferVolume
    with fig4.batch_update():
        fig4.data[0].cells.values = cur

#最高最低價接收處理
def on_tick_data_high_low(tickdatahighlow: FTickDataHighLow):
    cur = list(fig4.data[0].cells.values)
    cur[col4_idx['最高價']] = tickdatahighlow.High
    cur[col4_idx['最低價']] = tickdatahighlow.Low
    with fig4.batch_update():
        fig4.data[0].cells.values = cur

#開收盤價接收處理
def on_tick_data_open_close(tickdataopenclose: FTickDataOpenclose):
    cur = list(fig4.data[0].cells.values)
    cur[col4_idx['開盤價']] = tickdataopenclose.Opening
    cur[col4_idx['收盤價']] = tickdataopenclose.Closing
    with fig4.batch_update():
        fig4.data[0].cells.values = cur

#結算價接收處理
def on_tick_data_settle(tickdatasettle: FTickDataSettle):
    cur = list(fig4.data[0].cells.values)
    cur[col4_idx['目前結算價']] = tickdatasettle.CurrStl
    cur[col4_idx['最新結算價']] = tickdatasettle.NewStl
    with fig4.batch_update():
        fig4.data[0].cells.values = cur

#訂閱接收事件
api.fquote.on_tick_data_implied = on_tick_data_implied
api.fquote.on_tick_data_high_low = on_tick_data_high_low
api.fquote.on_tick_data_open_close = on_tick_data_open_close
api.fquote.on_tick_data_settle = on_tick_data_settle
time.sleep(1)
if loginresponse.ok == True:
    # 註冊報價
    subok, msg = api.fquote.subscribe(exchange=productid.split('|')[0], symbol=productid.split(
        '|')[1], ym=productid.split('|')[2], cp=productid.split('|')[3], strike=productid.split('|')[4])
    print(f'註冊報價 {productid} {subok} {msg}')
    display(fig4) 

反註冊報價

#反註冊報價 
unsub_ok,msg=api.fquote.unsubscribe(exchange= productid.split('|')[0], symbol= productid.split('|')[1], ym=productid.split('|')[2], cp= productid.split('|')[3], strike=productid.split('|')[4] ) 
print(f'反註冊報價 {productid} {unsub_ok} {msg}')