事前提要:
本 API 系为 永丰金 PYTHON API,尚未申请的朋友们,有两个方法可以申请
假如没有永丰证券帐号的朋友,首先要先去官网申请永丰证券帐号,审核通过之後在进行永丰API的申请喔
小声说,没有永丰金银行户头的可以先申请DAWHO数位帐户,比起大多数银行提供的证券户比起来,利息给的不错(1.1%),有DAWHO数位帐户之後在申请大户投即可
简易流程为
以上过程皆为线上操作,真的蛮方便的,这里提供官方的教学文件
正文开始:
根据官方网站提供的介绍
首先要先输入证券帐号密码
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则市价卖出 策略吧
参考:
现在似乎要把整个文章内容稍微调整一下惹
在部署基於容器的应用程序时,我们可以使用容器编排器来配置和管理容器。这意味着变更请求已获批准和实施,...
运算子优先性 (Precedence) 先来看一个范例 4 / 2 * 2 + 2 //6 这段程序...
978. Longest Turbulent Subarray https://leetcode.c...
本篇重点 api.list_positions api.list_profit_loss api.l...
好的,假设在你的农地旁, 有人或动物不时就发出类似卡车或是车子的声音, 让你的手机半夜一直发出警报,...