操作功能前請先登入
詳細功能請參考API Reference/fquote
查詢成交和最佳買賣價
透過 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}')