这个赌场在玩什麽把戏 - 金融商品内容

事前提要:

本 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相对强弱指标

现在似乎要把整个文章内容稍微调整一下惹


<<:  Day 02 - jS 微基础

>>:  D16: 工程师太师了: 第8.5话

配置管理(Configuration management)是编排器(orchestrator )管理容器化(containerized)应用程序的最关键推动力

在部署基於容器的应用程序时,我们可以使用容器编排器来配置和管理容器。这意味着变更请求已获批准和实施,...

(Day9) 运算子中的优先性及相依性

运算子优先性 (Precedence) 先来看一个范例 4 / 2 * 2 + 2 //6 这段程序...

LeetCode解题 Day15

978. Longest Turbulent Subarray https://leetcode.c...

Day 16 - 取得帐务相关资讯 (上)

本篇重点 api.list_positions api.list_profit_loss api.l...

AI ninja project [day 20] object detection

好的,假设在你的农地旁, 有人或动物不时就发出类似卡车或是车子的声音, 让你的手机半夜一直发出警报,...