iT邦幫忙

2021 iThome 鐵人賽

DAY 2
0
永豐金融APIs

在賭場尋求財富是否搞錯了什麼系列 第 2

這個賭場在玩什麼把戲 - 金融商品內容

事前提要:

本 API 係為 永豐金 PYTHON API,尚未申請的朋友們,有兩個方法可以申請

  1. 洽詢營業員協助開通
  2. 線上申請
    透過永豐金證券新理財網,點選「 申請及服務-> 簽署中心

假如沒有永豐證券帳號的朋友,首先要先去官網申請永豐證券帳號,審核通過之後在進行永豐API的申請喔

小聲說,沒有永豐金銀行戶頭的可以先申請DAWHO數位帳戶,比起大多數銀行提供的證券戶比起來,利息給的不錯(1.1%),有DAWHO數位帳戶之後在申請大戶投即可

簡易流程為

  1. 申請DAWHO數位帳戶
  2. 大戶投數位證券帳戶
  3. 線上申請永豐金 PYTHON API

以上過程皆為線上操作,真的蠻方便的,這裡提供官方的教學文件

正文開始:

根據官方網站提供的介紹

首先要先輸入證券帳號密碼

import shioaji as sj

api = sj.Shioaji()
accounts = api.login("YOUR_PERSON_ID", "YOUR_PASSWORD")
api.activate_ca(
    ca_path="/c/your/ca/path/Sinopac.pfx",
    ca_passwd="YOUR_CA_PASSWORD",
    person_id="Person of this Ca",
)

此API有提供股票、期貨與選擇權的合約可供查察

股票合約

金融市場最基礎的金融商品,簡單來說就是有上市上櫃的股份有限公司的股票,買了股票你就成為了公司股東,所以說買了自己公司的股票,你就成為了你老闆的老闆,是不是好棒棒呢?!

contract_2890 = api.Contracts.Stocks["2890"]
contract_2890

Stock(exchange=<Exchange.TSE: 'TSE'>, code='2890', symbol='TSE2890', name='永豐金', category='17', limit_up=11.3, limit_down=9.27, update_date='2020/03/18', day_trade=<DayTrade.Yes: 'Yes'>)

期貨合約

期貨合約,簡稱期貨,是一種跨越時間的交易方式。買賣雙方透過簽訂合約,同意按指定的時間、價格與其他交易條件,交收指定數量的現貨。通常期貨集中在期貨交易所,以標準化合約進行買賣,但亦有部分期貨合約可透過櫃台交易進行買賣,稱為場外交易合約。交易的資產通常是財貨或金融工具。雙方同意購買和出售資產的預定價格被稱為遠期價格。

contract_txf = api.Contracts.Futures['TXFC0']

contract_txf = api.Contracts.Futures.TXF.TXF202003
contract_txf

Future(code='TXFC0', symbol='TXF202003', name='臺股期貨', category='TXF', delivery_month='202003', underlying_kind='I', limit_up=10308.0, limit_down=8434.0, update_date='2020/03/18')

選擇權合約

選擇權是一種契約,其買方有權利但沒有義務,在未來的特定日期或之前,以特定的價格購買或出售一定數量的標的物。選擇權所表彰的是一種權利,選擇權買方支付權利金,取得買權CALL 或賣權PUT,於特定期間內,依特定價格及數量等交易條件買賣現貨之契約;選擇權之賣方,於買方要求履約時,有依選擇權約定履行契約之義務。

api.Contracts.Options["TXO10000C0"]

Option(code='TXO10000C0', symbol='TXO202003010000C', name='臺指選擇權', category='TXO', delivery_month='202003', strike_price=10000.0, option_right=<OptionRight.Call: 'C'>, underlying_kind='I', limit_up=945.0, limit_down=0.1, update_date='2020/03/18')

台灣加權指數合約

api.Contracts.Indexs.TSE.TSE001
Index(exchange=<Exchange.TSE: 'TSE'>, code='001', symbol='TSE001', name='加權')

接下來就可以接取股票或期貨合約的明細

永豐 API 提供了 Streaming 與 Historical 的資料,Streaming為即時資料

比如說想看護國神山台積電的逐筆 tick

api.quote.subscribe(api.Contracts.Stocks["2330"], 
        quote_type = sj.constant.QuoteType.Tick, # or 'tick'
        version = sj.constant.QuoteVersion.v1 # or 'v1'
    )
    
# v0 舊版本回傳的資料為

Response Code: 200 | Event Code: 16 | Info: MKT/*/TSE/2330 | Event: Subscribe or Unsubscribe ok

MKT/idcdmzpcr01/TSE/2330 
{
    'AmountSum': [1688787000.0],  # 成交值
    'Close': [593.0],  # 收盤價
    'Date': '2021/07/01',  # 日期
    'TickType': [2],  # tick 種類,1 外盤成交,2 內盤成交,0 不能判斷
    'Time': '09:10:20.628620',  # 時間
    'VolSum': [2837],  # 成交總量
    'Volume': [1]  # 成交量
}

# v1 新版本加了很多東西

Response Code: 200 | Event Code: 16 | Info: TIC/v1/STK/*/TSE/2330 | Event: Subscribe or Unsubscribe ok

Exchange.TSE 
Tick(
    code = '2330', 
    datetime = datetime.datetime(2021, 7, 2, 13, 16, 35, 92970), 
    open = Decimal('590'), 
    avg_price = Decimal('589.05'), 
    close = Decimal('590'), 
    high = Decimal('593'), 
    low = Decimal('587'), 
    amount = Decimal('590000'), 
    total_amount = Decimal('8540101000'), 
    volume = 1, 
    total_volume = 14498, 
    tick_type = 1,  #內外盤別 {1: buy deal, 2: sell deal, 0: can't judge}
    chg_type = 4,  # 漲跌註記 {1: limit up, 2: up, 3: unchanged, 4: down, 5: limit down}
    price_chg = Decimal('-3'),  # price change, 漲跌價差
    pct_chg = Decimal('-0.505902'),  # percentage change (%), 漲跌程度 %
    bid_side_total_vol= 6638,  # total buy deal volume (K shares, 買盤成交總量)
    ask_side_total_vol = 7860,  # total sell deal volume (K shares, 賣盤成交總量)
    bid_side_total_cnt = 2694,  # total number of buy deal (買盤成交筆數)
    ask_side_total_cnt = 2705,  # total number of sell deal (賣盤成交筆數)
    closing_oddlot_shares = 0,  # 盤後零股成交股數
    fixed_trade_vol = 0,  # 定盤成交量
    suspend = 0,  # 暫停交易
    simtrade = 0,  # 試撮
    intraday_odd = 0 # 盤中零股
)

五檔報價

api.quote.subscribe(api.Contracts.Stocks["2330"],
        quote_type = sj.constant.QuoteType.BidAsk, # or 'bidask'
        version = sj.constant.QuoteVersion.v1 # or 'v1'
)

# v0  
Response Code: 200 | Event Code: 16 | Info: QUT/*/TSE/2330 | Event: Subscribe or Unsubscribe ok

QUT/idcdmzpcr01/TSE/2330 
{
    'AskPrice': [594.0, 595.0, 596.0, 597.0, 598.0], 
    'AskVolume': [1465, 532, 507, 92, 258], 
    'BidPrice': [593.0, 592.0, 591.0, 590.0, 589.0], 
    'BidVolume': [254, 178, 255, 268, 163], 
    'Date': '2021/07/01', 
    'Time': '09:09:48.447219'
}

# v1  
Response Code: 200 | Event Code: 16 | Info: QUO/v1/STK/*/TSE/2330 | Event: Subscribe or Unsubscribe ok

Exchange.TSE 
BidAsk(
    code = '2330', 
    datetime = datetime.datetime(2021, 7, 1, 9, 9, 54, 36828), 
    bid_price = [Decimal('593'), Decimal('592'), Decimal('591'), Decimal('590'), Decimal('589')], 
    bid_volume = [248, 180, 258, 267, 163], 
    diff_bid_vol = [3, 0, 0, 0, 0],  # 買價增減量
    ask_price = [Decimal('594'), Decimal('595'), Decimal('596'), Decimal('597'), Decimal('598')], 
    ask_volume = [1457, 531, 506, 90, 259], 
    diff_ask_vol = [0, 0, 0, 0, 0],  # 賣價增減量
    suspend = 0, 
    simtrade = 0,
    intraday_odd = 0
)

知道怎麼抓取股票明細與五檔之後,接下來增加一些技術指標協助分析吧。

技術指標常聽到的有均線 MA 或 相對強弱指數 RSI 指標

其中 RSI 是以某段時間,股價”平均漲幅”與”平均跌幅”所計算出來的數值,可看出股價觀測時間內股票價格強勢或弱勢的指標。

RSI = (上升平均數/(上升平均數+下跌平均數))×100

根據公式我們可以得到下面結論:
RSI的範圍一定在0-100之間。
RSI越大,代表過去『漲的機率』越大。

RSI指標的另個判斷買進訊號或賣出訊號的方式,是利用短週期的RSI波動會較常週期的波動來的劇烈,

『短週期的RSI』向上突破『長週期的RSI』,稱為黃金交叉,是買進訊號。
『短週期的RSI』向下跌破『長週期的RSI』,稱為死亡交叉,為賣出訊號。

明天來實作看看 RSI順勢策略,抓最近14根K棒去做運算,突破70則市價買進,跌破30則市價賣出 策略吧

參考:

期貨
選擇權
相對強弱指數
RSI相對強弱指標

現在似乎要把整個文章內容稍微調整一下惹


上一篇
第一次進入賭場是否要搞懂一下規則 - 永豐金 Shioaji API 初探
下一篇
賭桌上的技術分析 - RSI
系列文
在賭場尋求財富是否搞錯了什麼22

尚未有邦友留言

立即登入留言