iT邦幫忙

2022 iThome 鐵人賽

DAY 8
1
Software Development

從 Node.js 開發者到量化交易者:打造屬於自己的投資系統系列 第 8

Day 08 - 大戶指標:大額交易人未沖銷部位

  • 分享至 

  • xImage
  •  

除了三大法人期貨與選擇權交易資訊外,期交所也提供 大額交易人未沖銷部位 資訊,在每個交易日盤後都會更新這項數據。這項數據比較特別的地方是,除了揭露大額交易人期貨和選擇權的留倉部位外,還依照到期契約劃分出 一週契約近月契約所有契約 的未平倉量。透過這份資料,我們可以計算出大額交易人期貨與選擇權近月契約與遠月契約的部位,進而推敲出機構法人與市場大戶對於臺股未來行情的看法。

什麼是大額交易人未沖銷部位?

大額交易人就是由期交所統計出的交易口數最多的交易人,而未沖銷部位就是期貨或選擇權契約尚未沖銷的部分,也就是未平倉口數。

期交所公布的大額交易人未沖銷部位,分成「前五大交易人」與「前十大交易人」。由於市場上擁有大量資金的主要是法人,因此期交所又區分出前五大及前十大交易人當中屬於「特定法人」的部分。

什麼是特定法人?根據 期交所 給出的解答是:「所謂特定法人,包括證券商、外國機構投資人及陸資、證券投資信託基金、國家金融安定基金、公務人員退休撫卹基金、勞工退休基金、勞工保險基金、郵政儲金匯業局郵政資金、金融及保險機構等。」

我們可以進一步區分出「非特定法人」的未沖銷部位,做法是將「前五大交易人」或「前十大交易人」的未沖銷部位,減去「特定法人」的未沖銷部位,我們就可以得到非屬法人的「市場大戶」未沖銷部位:

前五大非特定人 = 前五大交易人 - 前五大特定法人
前十大非特定人 = 前十大交易人 - 前十大特定法人

關於大額交易人未沖銷部位,筆者主要是參考「前十大特定法人」的數字,由於大額交易人在市場上佔有相當大的成交量,而機構法人有專業經理人和投資研究部門負責分析並研判總經情勢,所以能比一般投資人掌握更多的市場資訊,因此「前十大特定法人」的看法,具有一定的代表性。

大額交易人遠月契約部位

期交所公布的期貨大額交易人未沖銷部位結構表,依照到期月份分為當月到期的「近月契約」與「所有契約」。我們將所有契約部位數與近月契約部位數的數字相減,就可以得出大額交易人「遠期契約」的部位數:

遠月契約買方部位數 = 所有契約買方部位數 - 近月契約買方部位數
遠月契約賣方部位數 = 所有契約賣方部位數 - 近月契約賣方部位數
遠月契約淨部位 = 遠月契約買方部位數 - 遠月契約賣方部位數

觀察大額交易人臺股期貨遠期契約的淨部位,可以推敲市場的機構法人與主力大戶對於未來台股行情的看法。當大額交易人的臺股期貨遠期契約淨部位為正數,代表大額交易人在遠期契約持 淨多單,看好台股未來行情發展;當大額交易人的臺股期貨遠期契約淨部位為負數,代表大額交易人在遠期契約持 淨空單,看壞台股未來行情發展。

因為期貨契約會到期,如果要繼續持倉就必須轉入下一月份契約,而大額交易人也會做 轉倉 的動作,所以我們會特別關注在結算日前後,大額交易人在近月契約與遠期契約部位的消長。

https://ithelp.ithome.com.tw/upload/images/20220908/20150150deBpnCsHOT.png

Source:臺灣證券交易所、臺灣期貨交易所

上圖是 2022 年初至 8 月 31 日的加權指數與十大特定法人臺股期貨期近月契約與遠期契約部位的關係圖。我們可以發現在 2022 年 4 月 20 日結算日過後,雖然在十大特定法人在近月契約仍持淨空單,但在遠期契約部位已經轉為淨多單,加權指數在 5 月中果然也迎來一波反彈。不過此時十大特定法人在遠期契約部位已經轉為淨空單,6 月份的加權指數在反彈過後也持續下跌。因此,觀察大額交易人在臺股期貨遠期契約的淨部位變化,具有領先指標的意義。

臺股期貨與臺指選擇權結算日

臺股期貨 的結算日是每個月第三個星期三;臺指選擇權小型臺指期貨 有一週到期契約,每週三就會進行結算,其他月份到期契約也是每個月第三個星期三進行結算,而在這週就沒有一週契約,因為這週的週結算和月結算會一起結算,所以月契約就等同於週契約。如果結算日期遇到假日,則會向後順延到下一個開市日。

通常在臺股期貨結算日當天,臺股現貨市場的波動都會比較大,因為期貨結算價必須參考現貨價格,臺股期貨 最後結算價 就是「以最後結算日臺灣證券交易所當日交易時間收盤前三十分鐘內所提供標的指數之簡單算術平均價訂之。」而 股票期貨 則是取「收盤前 60 分鐘內標的證券之算術平均價」。因為大額交易人主要是機構法人,外資在臺股持有大量的現貨部位,加上有龐大的資金,有能力控盤影響現貨市場的股價走勢。外資大戶為了使獲益最大化就可能有刻意拉高或壓低結算的現象,因此在結算日當天中午 12:30 之後,臺股現貨市場可能會產生比較大的波動。

查詢期貨大額交易人未沖銷部位結構表

在期交所網站的 交易資訊-大額交易人未沖銷部位結構-查詢-期貨大額交易人未沖銷部位結構表 頁面,可以按日查詢期貨大額交易人未沖銷部位。

期交所首頁 > 交易資訊 > 大額交易人未沖銷部位結構 > 查詢 > 期貨大額交易人未沖銷部位結構表

在「交易資訊-大額交易人未沖銷部位結構-查詢-期貨大額交易人未沖銷部位結構表」頁面,選取「日期」,契約選擇「臺股期貨」送出查詢後,就會列出該日大額交易人臺股期貨的未沖銷部位結構表。

https://ithelp.ithome.com.tw/upload/images/20220908/20150150N6Y5AJbvf2.png

找到臺股期貨未沖銷結構表後,我們可以將「所有契約」與「近月契約」數字相減,就可以得到「遠月契約」數字;將「前十大交易人合計」與「特定法人合計」的數字相減,就可以得到「前十大非特定法人」的數據。以 2022 年 7 月 1 日的資料為例:

十大特定法人遠月契約買方部位數 = 50,078 - 51,004 = -926
十大特定法人遠月契約賣方部位數 = 63,512 - 61,942 = 1570
十大特定法人遠月契約淨部位 = -926 - 1570 = -2496

下載期貨大額交易人未沖銷部位資料

在期交所網站的 交易資訊-大額交易人未沖銷部位結構-下載-期貨大額交易人未沖銷部位資料下載 頁面,可以選取日期範圍下載期貨大額交易人未沖銷部位資料,期交所以 CSV 檔案格式提供。

期交所首頁 > 交易資訊 > 大額交易人未沖銷部位結構 > 下載 > 期貨大額交易人未沖銷部位資料下載

https://ithelp.ithome.com.tw/upload/images/20220908/20150150vFwy0hSV1C.png

在「交易資訊-大額交易人未沖銷部位結構-下載-期貨大額交易人未沖銷部位資料下載」頁面,選取「日期(起)」、「日期(迄)」的日期範圍後,然後點擊下載,就可以取得查詢結果的 CSV 檔案。實際上,這個 HTML Form 表單是使用 POST 方法,向以下位址提交表單請求:

https://www.taifex.com.tw/cht/3/largeTraderFutDown

這個表單可設定的欄位如下:

  • queryStartDate:日期(起)。接受 yyyy/MM/dd 的日期格式,如 2022/07/01
  • queryEndDate:日期(迄)。接受 yyyy/MM/dd 的日期格式,如 2022/07/01

我們可以打開終端機使用 curl 指令模擬表單請求:

$ curl --request POST \
    --url https://www.taifex.com.tw/cht/3/largeTraderFutDown \
    --header 'Content-Type: multipart/form-data' \
    --form queryStartDate=2022/07/01 \
    --form queryEndDate=2022/07/01

瞭解下載 CSV 檔案的方式後,我們就可以實作程式取得資料。

實作:取得大額交易人臺股期貨淨部位

開啟 src/scraper/taifex-scraper.service.ts 檔案,在 TaifexScraperService 實作 fetchLargeTradersTxfPosition() 方法,取得大額交易人臺股期貨未沖銷部位:

import * as csvtojson from 'csvtojson';
import * as iconv from 'iconv-lite';
import * as numeral from 'numeral';
import { DateTime } from 'luxon';
import { Injectable } from '@nestjs/common';
import { HttpService } from '@nestjs/axios';
import { firstValueFrom } from 'rxjs';

@Injectable()
export class TaifexScraperService {
  constructor(private httpService: HttpService) { }

  ...

  async fetchLargeTradersTxfPosition(date: string) {
    // 將 `date` 轉換成 `yyyy/MM/dd` 格式
    const queryDate = DateTime.fromISO(date).toFormat('yyyy/MM/dd');

    // 建立 FormData
    const form = new URLSearchParams({
      queryStartDate: queryDate,  // 日期(起)
      queryEndDate: queryDate,    // 日期(迄)
    });
    const url = 'https://www.taifex.com.tw/cht/3/largeTraderFutDown';

    // 取得回應資料並將 CSV 轉換成 JSON 格式及正確編碼
    const responseData = await firstValueFrom(this.httpService.post(url, form, { responseType: 'arraybuffer' }))
      .then(response => csvtojson({ noheader: true, output: 'csv' }).fromString(iconv.decode(response.data, 'big5')));

    // 若該日期非交易日或尚無資料則回傳 null
    const [fields, ...rows] = responseData;
    if (fields[0] !== '日期') return null;

    const txRows = rows.filter(row => row[1] === 'TX'); // 只取臺股期貨數據
    const [
      weekRow,                 // 臺股期貨週契約-大額交易人
      weekSpecificRow,         // 臺股期貨週契約-特定法人
      frontMonthRow,           // 臺股期貨近月契約-大額交易人
      frontMonthSpecificRow,   // 臺股期貨近月契約-特定法人
      allMonthsRow,            // 臺股期貨所有契約-大額交易人
      allMonthsSpecificRow,    // 臺股期貨所有契約-特定法人
    ] = txRows;

    // 將 string 型別數字轉換成 number 並計算出非特定人及遠月契約
    const frontMonth = frontMonthRow.slice(5, -1).map(data => numeral(data).value());
    const frontMonthSpecific = frontMonthSpecificRow.slice(5, -1).map(data => numeral(data).value());
    const frontMonthNonSpecific = frontMonth.map((data, i) => data - frontMonthSpecific[i]);
    const allMonths = allMonthsRow.slice(5, -1).map(data => numeral(data).value());
    const allMonthsSpecific = allMonthsSpecificRow.slice(5, -1).map(data => numeral(data).value());
    const allMonthsNonSpecific = allMonths.map((data, i) => data - allMonthsSpecific[i]);
    const backMonths = allMonths.map((data, i) => data - frontMonth[i]);
    const backMonthsSpecific = allMonthsSpecific.map((data, i) => data - frontMonthSpecific[i]);
    const backMonthsNonSpecific = backMonths.map((data, i) => data - backMonthsSpecific[i]);
    const frontMonthMarketOi = numeral(frontMonthRow.slice(-1)).value();
    const allMonthsMarketOi = numeral(allMonthsRow.slice(-1)).value();
    const backMonthsMarketOi = allMonthsMarketOi - frontMonthMarketOi;

    // 合併所有數據
    const raw = [
      ...frontMonth,
      ...frontMonthSpecific,
      ...frontMonthNonSpecific,
      ...allMonths,
      ...allMonthsSpecific,
      ...allMonthsNonSpecific,
      ...backMonths,
      ...backMonthsSpecific,
      ...backMonthsNonSpecific,
    ];

    const [
      top5FrontMonthLongOi,               // 前五大交易人-近月契約買方
      top5FrontMonthShortOi,              // 前五大交易人-近月契約賣方
      top10FrontMonthLongOi,              // 前十大交易人-近月契約買方
      top10FrontMonthShortOi,             // 前十大交易人-近月契約賣方
      top5SpecificFrontMonthLongOi,       // 前五大特定法人-近月契約買方
      top5SpecificFrontMonthShortOi,      // 前五大特定法人-近月契約賣方
      top10SpecificFrontMonthLongOi,      // 前十大特定法人-近月契約買方
      top10SpecificFrontMonthShortOi,     // 前十大特定法人-近月契約賣方
      top5NonSpecificFrontMonthLongOi,    // 前五大非特定法人-近月契約買方
      top5NonSpecificFrontMonthShortOi,   // 前五大非特定法人-近月契約賣方
      top10NonSpecificFrontMonthLongOi,   // 前十大非特定法人-近月契約買方
      top10NonSpecificFrontMonthShortOi,  // 前十大非特定法人-近月契約賣方
      top5AllMonthsLongOi,                // 前五大交易人-全部契約買方
      top5AllMonthsShortOi,               // 前五大交易人-全部契約賣方
      top10AllMonthsLongOi,               // 前十大交易人-全部契約買方
      top10AllMonthsShortOi,              // 前十大交易人-全部契約賣方
      top5SpecificAllMonthsLongOi,        // 前五大特定法人-全部契約買方
      top5specificAllMonthsShortOi,       // 前五大特定法人-全部契約賣方
      top10SpecificAllMonthsLongOi,       // 前十大特定法人-全部契約買方
      top10SpecificAllMonthsShortOi,      // 前十大特定法人-全部契約賣方
      top5NonSpecificAllMonthsLongOi,     // 全部契約 前五大非特定法人買方
      top5NonSpecificAllMonthsShortOi,    // 全部契約 前五大非特定法人賣方
      top10NonSpecificAllMonthsLongOi,    // 全部契約 前十大非特定法人買方
      top10NonSpecificAllMonthsShortOi,   // 全部契約 前十大非特定法人賣方
      top5BackMonthsLongOi,               // 前五大交易人-遠月契約買方
      top5BackMonthsShortOi,              // 前五大交易人-遠月契約賣方
      top10BackMonthsLongOi,              // 前十大交易人-遠月契約買方
      top10BackMonthsShortOi,             // 前十大交易人-遠月契約賣方
      top5SpecificBackMonthsLongOi,       // 前五大特定法人-遠月契約買方
      top5SpecificBackMonthsShortOi,      // 前五大特定法人-遠月契約賣方
      top10SpecificBackMonthsLongOi,      // 前十大特定法人-遠月契約買方
      top10SpecificBackMonthsShortOi,     // 前十大特定法人-遠月契約賣方
      top5NonSpecificBackMonthsLongOi,    // 前五大特定法人-遠月契約買方
      top5NonSpecificBackMonthsShortOi,   // 前五大特定法人-遠月契約賣方
      top10NonSpecificBackMonthsLongOi,   // 前十大特定法人-遠月契約買方
      top10NonSpecificBackMonthsShortOi,  // 前十大特定法人-遠月契約賣方
    ] = raw;

    // 計算近月契約大額交易人淨部位
    const top5FrontMonthNetOi = top5FrontMonthLongOi - top5FrontMonthShortOi;
    const top10FrontMonthNetOi = top10FrontMonthLongOi - top10FrontMonthShortOi;
    const top5SpecificFrontMonthNetOi = top5SpecificFrontMonthLongOi - top5SpecificFrontMonthShortOi;
    const top10SpecificFrontMonthNetOi = top10SpecificFrontMonthLongOi - top10SpecificFrontMonthShortOi;
    const top5NonSpecificFrontMonthNetOi = top5NonSpecificFrontMonthLongOi - top5NonSpecificFrontMonthShortOi;
    const top10NonSpecificFrontMonthNetOi = top10NonSpecificFrontMonthLongOi - top10NonSpecificFrontMonthShortOi;

    // 計算全部契約大額交易人淨部位
    const top5AllMonthsNetOi = top5AllMonthsLongOi - top5AllMonthsShortOi;
    const top10AllMonthsNetOi = top10AllMonthsLongOi - top10AllMonthsShortOi;
    const top5SpecificAllMonthsNetOi = top5SpecificAllMonthsLongOi - top5specificAllMonthsShortOi;
    const top10SpecificAllMonthsNetOi = top10SpecificAllMonthsLongOi - top10SpecificAllMonthsShortOi;
    const top5NonSpecificAllMonthsNetOi = top5NonSpecificAllMonthsLongOi - top5NonSpecificAllMonthsShortOi;
    const top10NonSpecificAllMonthsNetOi = top10NonSpecificAllMonthsLongOi - top10NonSpecificAllMonthsShortOi;

    // 計算遠月契約大額交易人淨部位
    const top5BackMonthsNetOi = top5BackMonthsLongOi - top5BackMonthsShortOi;
    const top10BackMonthsNetOi = top10BackMonthsLongOi - top10BackMonthsShortOi;
    const top5SpecificBackMonthsNetOi = top5SpecificBackMonthsLongOi - top5SpecificBackMonthsShortOi;
    const top10SpecificBackMonthsNetOi = top10SpecificBackMonthsLongOi - top10SpecificBackMonthsShortOi;
    const top5NonSpecificBackMonthsNetOi = top5NonSpecificBackMonthsLongOi - top5NonSpecificBackMonthsShortOi;
    const top10NonSpecificBackMonthsNetOi = top10NonSpecificBackMonthsLongOi - top10NonSpecificBackMonthsShortOi;

    return {
      date,
      top5SpecificFrontMonthLongOi,
      top5SpecificFrontMonthShortOi,
      top5SpecificFrontMonthNetOi,
      top5SpecificBackMonthsLongOi,
      top5SpecificBackMonthsShortOi,
      top5SpecificBackMonthsNetOi,
      top5NonSpecificFrontMonthLongOi,
      top5NonSpecificFrontMonthShortOi,
      top5NonSpecificFrontMonthNetOi,
      top5NonSpecificBackMonthsLongOi,
      top5NonSpecificBackMonthsShortOi,
      top5NonSpecificBackMonthsNetOi,
      top10SpecificFrontMonthLongOi,
      top10SpecificFrontMonthShortOi,
      top10SpecificFrontMonthNetOi,
      top10SpecificBackMonthsLongOi,
      top10SpecificBackMonthsShortOi,
      top10SpecificBackMonthsNetOi,
      top10NonSpecificFrontMonthLongOi,
      top10NonSpecificFrontMonthShortOi,
      top10NonSpecificFrontMonthNetOi,
      top10NonSpecificBackMonthsLongOi,
      top10NonSpecificBackMonthsShortOi,
      top10NonSpecificBackMonthsNetOi,
      frontMonthMarketOi,
      backMonthsMarketOi,
    };
  }
}

fetchLargeTradersTxfPosition() 方法中,需要指定 date 參數,表示要取得大額交易人臺股期貨未沖銷部位的日期。我們定義回傳的物件欄位包含如下:

  • date:日期
  • top5SpecificFrontMonthLongOi:前五大特定法人-近月契約多方部位
  • top5SpecificFrontMonthShortOi:前五大特定法人-近月契約空方部位
  • top5SpecificFrontMonthNetOi:前五大特定法人-近月契約淨部位
  • top5SpecificBackMonthsLongOi:前五大特定法人-遠月契約多方部位
  • top5SpecificBackMonthsShortOi:前五大特定法人-遠月契約空方部位
  • top5SpecificBackMonthsNetOi:前五大特定法人-遠月契約淨部位
  • top5NonSpecificFrontMonthLongOi:前五大非特定法人-近月契約多方部位
  • top5NonSpecificFrontMonthShortOi:前五大非特定法人-近月契約空方部位
  • top5NonSpecificFrontMonthNetOi:前五大非特定法人-近月契約淨部位
  • top5NonSpecificBackMonthsLongOi:前五大非特定法人-遠月契約多方部位
  • top5NonSpecificBackMonthsShortOi:前五大非特定法人-遠月契約空方部位
  • top5NonSpecificBackMonthsNetOi:前五大非特定法人-遠月契約淨部位
  • top10SpecificFrontMonthLongOi:前十大特定法人-近月契約多方部位
  • top10SpecificFrontMonthShortOi:前十大特定法人-近月契約空方部位
  • top10SpecificFrontMonthNetOi:前十大特定法人-近月契約淨部位
  • top10SpecificBackMonthsLongOi:前十大特定法人-近月契約多方部位
  • top10SpecificBackMonthsShortOi:前十大特定法人-近月契約空方部位
  • top10SpecificBackMonthsNetOi:前十大特定法人-遠月契約淨部位
  • top10NonSpecificFrontMonthLongOi:前十大非特定法人-近月契約多方部位
  • top10NonSpecificFrontMonthShortOi:前十大非特定法人-近月契約空方部位
  • top10NonSpecificFrontMonthNetOi:前十大非特定法人-近月契約淨部位
  • top10NonSpecificBackMonthsLongOi:前十大非特定法人-遠月契約多方部位
  • top10NonSpecificBackMonthsShortOi:前十大非特定法人-遠月契約空方部位
  • top10NonSpecificBackMonthsNetOi:前十大非特定法人-遠月契約淨部位
  • frontMonthMarketOi:近月契約全市場未沖銷部位數
  • backMonthsMarketOi:遠月契約全市場未沖銷部位數

完成後,我們只要使用 TaifexScraperServicefetchLargeTradersTxfPosition() 方法,就可以按日期取得大額交易人臺股期貨未沖銷部位。以日期 2022-07-01 為例:

{
  date: '2022-07-01',
  top5SpecificFrontMonthLongOi: 39133,
  top5SpecificFrontMonthShortOi: 53351,
  top5SpecificFrontMonthNetOi: -14218,
  top5SpecificBackMonthsLongOi: 648,
  top5SpecificBackMonthsShortOi: 1205,
  top5SpecificBackMonthsNetOi: -557,
  top5NonSpecificFrontMonthLongOi: 0,
  top5NonSpecificFrontMonthShortOi: 0,
  top5NonSpecificFrontMonthNetOi: 0,
  top5NonSpecificBackMonthsLongOi: 0,
  top5NonSpecificBackMonthsShortOi: 0,
  top5NonSpecificBackMonthsNetOi: 0,
  top10SpecificFrontMonthLongOi: 51004,
  top10SpecificFrontMonthShortOi: 61942,
  top10SpecificFrontMonthNetOi: -10938,
  top10SpecificBackMonthsLongOi: -926,
  top10SpecificBackMonthsShortOi: 1570,
  top10SpecificBackMonthsNetOi: -2496,
  top10NonSpecificFrontMonthLongOi: 0,
  top10NonSpecificFrontMonthShortOi: 5378,
  top10NonSpecificFrontMonthNetOi: -5378,
  top10NonSpecificBackMonthsLongOi: 2264,
  top10NonSpecificBackMonthsShortOi: 2603,
  top10NonSpecificBackMonthsNetOi: -339,
  frontMonthMarketOi: 108364,
  backMonthsMarketOi: 11321
}

選擇權大額交易人未沖銷部位結構表

除了期貨部位外,期交所也揭露選擇權大額交易人未沖銷部位的資料,我們也一併說明如何查詢和實作取得選擇權大額交易人未沖銷部位的方法。

前一天我們介紹了觀察外資臺指選擇權籌碼的方法,因此我們可以將大額交易人的期貨與選擇權部位一起觀察,將有助於提升對於未來行情的研判。不過期交所提供的選擇權大額交易人未沖銷部位資料只有留倉部位數,沒有契約金額。我們在昨日介紹選擇權時曾提及,選擇權因為履約價格不同,每一口的權利金價值可能是不等的,因此算出來的選擇權淨部位的方向,可能與實際的選擇權淨金額有落差,這點需要特別注意。

查詢選擇權大額交易人未沖銷部位結構表

在期交所網站的 交易資訊-大額交易人未沖銷部位結構-查詢-選擇權大額交易人未沖銷部位結構表 頁面,可以按日查詢選擇權大額交易人未沖銷部位。

期交所首頁 > 交易資訊 > 大額交易人未沖銷部位結構 > 查詢 > 選擇權大額交易人未沖銷部位結構表

在「交易資訊-大額交易人未沖銷部位結構-查詢-選擇權大額交易人未沖銷部位結構表」頁面,選取「日期」,契約選擇「臺指」送出查詢後,就會列出該日大額交易人臺指買權與臺指賣權的未沖銷部位結構表。

https://ithelp.ithome.com.tw/upload/images/20220908/20150150l0hbhzJgPj.png

我們可以找到「臺指買權」與「臺指賣權」契約的大額交易人未沖銷結構表,將「所有契約」與「近月契約」數字相減,就可以得到「遠月契約」數字;將「前十大交易人合計」與「特定法人合計」的數字相減,就可以得到「前十大非特定法人」的數據。

十大特定法人遠月買權買方部位數 = 26,765 - 26,192 = 573
十大特定法人遠月買權賣方部位數 = 9,370 - 12,205 = -2,835
十大特定法人遠月買權淨部位 = 573 - (-2,835) = 3,408

十大特定法人遠月買權買方部位數 = 9,754 - 8,437 = 1,317
十大特定法人遠月買權賣方部位數 = 29,538 - 25,242 = 4,296
十大特定法人遠月買權淨部位 = 1,317 - 4,296 = -2,979

下載選擇權大額交易人未沖銷部位資料

在期交所網站的 交易資訊-大額交易人未沖銷部位結構-下載-選擇權大額交易人未沖銷部位資料下載 頁面,可以選取日期範圍下載選擇權大額交易人未沖銷部位資料,期交所以 CSV 檔案格式提供。

期交所首頁 > 交易資訊 > 大額交易人未沖銷部位結構 > 下載 > 選擇權大額交易人未沖銷部位資料下載

https://ithelp.ithome.com.tw/upload/images/20220908/2015015092mtd0EcVs.png

在「交易資訊-大額交易人未沖銷部位結構-下載-選擇權大額交易人未沖銷部位資料下載」頁面,選取「日期(起)」、「日期(迄)」的日期範圍後,然後點擊下載,就可以取得查詢結果的 CSV 檔案。實際上,這個 HTML Form 表單是使用 POST 方法,向以下位址提交表單請求:

https://www.taifex.com.tw/cht/3/largeTraderOptDown

這個表單可設定的欄位如下:

  • queryStartDate:日期(起)。接受 yyyy/MM/dd 的日期格式,如 2022/07/01
  • queryEndDate:日期(迄)。接受 yyyy/MM/dd 的日期格式,如 2022/07/01

我們可以打開終端機使用 curl 指令模擬表單請求:

$ curl --request POST \
    --url https://www.taifex.com.tw/cht/3/largeTraderOptDown \
    --header 'Content-Type: multipart/form-data' \
    --form queryStartDate=2022/07/01 \
    --form queryEndDate=2022/07/01

瞭解下載 CSV 檔案的方式後,我們就可以實作程式取得資料。

實作:取得大額交易人臺指選擇權淨部位

開啟 src/scraper/taifex-scraper.service.ts 檔案,在 TaifexScraperService 實作 fetchLargeTradersTxoPosition() 方法,取得大額交易人臺股選擇權未沖銷部位:

import * as csvtojson from 'csvtojson';
import * as iconv from 'iconv-lite';
import * as numeral from 'numeral';
import { DateTime } from 'luxon';
import { Injectable } from '@nestjs/common';
import { HttpService } from '@nestjs/axios';
import { firstValueFrom } from 'rxjs';

@Injectable()
export class TaifexScraperService {
  constructor(private httpService: HttpService) { }

  ...

  async fetchLargeTradersTxoPosition(date: string) {
    // 將 `date` 轉換成 `yyyy/MM/dd` 格式
    const queryDate = DateTime.fromISO(date).toFormat('yyyy/MM/dd');

    // 建立 FormData
    const form = new URLSearchParams({
      queryStartDate: queryDate,  // 日期(起)
      queryEndDate: queryDate,    // 日期(迄)
    });
    const url = 'https://www.taifex.com.tw/cht/3/largeTraderOptDown';

    // 取得回應資料並將 CSV 轉換成 JSON 格式及正確編碼
    const responseData = await firstValueFrom(this.httpService.post(url, form, { responseType: 'arraybuffer' }))
      .then(response => csvtojson({ noheader: true, output: 'csv' }).fromString(iconv.decode(response.data, 'big5')));

    // 若該日期非交易日或尚無資料則回傳 null
    const [fields, ...rows] = responseData;
    if (fields[0] !== '日期') return null;

    const txoRows = rows.filter(row => row[1] === 'TXO'); // 只取臺指選擇權數據
    const [
      txoCallWeekRow,                // 臺指選擇權買權週契約-大額交易人
      txoCallWeekSpecificRow,        // 臺指選擇權買權週契約-特定法人
      txoCallFrontMonthRow,          // 臺指選擇權買權近月契約-大額交易人
      txoCallFrontMonthSpecificRow,  // 臺指選擇權買權近月契約-特定法人
      txoCallAllMonthsRow,           // 臺指選擇權買權所有契約-大額交易人
      txoCallAllMonthsSpecificRow,   // 臺指選擇權買權所有契約-特定法人
      txoPutWeekRow,                 // 臺指選擇權賣權週契約-大額交易人
      txoPutWeekSpecificRow,         // 臺指選擇權賣權週契約-特定法人
      txoPutFrontMonthRow,           // 臺指選擇權賣權近月契約-大額交易人
      txoPutFrontMonthSpecificRow,   // 臺指選擇權賣權近月契約-特定法人
      txoPutAllMonthsRow,            // 臺指選擇權賣權所有契約-大額交易人
      txoPutAllMonthsSpecificRow,    // 臺指選擇權賣權所有契約-特定法人
    ] = txoRows;

    // 將 string 型別數字轉換成 number 並計算出非特定人及遠月契約
    const txoCallFrontMonth = txoCallFrontMonthRow.slice(6, -1).map(data => numeral(data).value());
    const txoCallFrontMonthSpecific = txoCallFrontMonthSpecificRow.slice(6, -1).map(data => numeral(data).value());
    const txoCallFrontMonthNonSpecific = txoCallFrontMonth.map((data, i) => data - txoCallFrontMonthSpecific[i]);
    const txoCallAllMonths = txoCallAllMonthsRow.slice(6, -1).map(data => numeral(data).value());
    const txoCallAllMonthsSpecific = txoCallAllMonthsSpecificRow.slice(6, -1).map(data => numeral(data).value());
    const txoCallAllMonthsNonSpecific = txoCallAllMonths.map((data, i) => data - txoCallAllMonthsSpecific[i]);
    const txoCallBackMonths = txoCallAllMonths.map((data, i) => data - txoCallFrontMonth[i]);
    const txoCallBackMonthsSpecific = txoCallAllMonthsSpecific.map((data, i) => data - txoCallFrontMonthSpecific[i]);
    const txoCallBackMonthsNonSpecific = txoCallBackMonths.map((data, i) => data - txoCallBackMonthsSpecific[i]);
    const txoCallFrontMonthMarketOi = numeral(txoCallFrontMonthRow.slice(-1)).value();
    const txoCallAllMonthsMarketOi = numeral(txoCallAllMonthsRow.slice(-1)).value();
    const txoCallBackMonthsMarketOi = txoCallAllMonthsMarketOi - txoCallFrontMonthMarketOi;
    const txoPutFrontMonth = txoPutFrontMonthRow.slice(6, -1).map(data => numeral(data).value());
    const txoPutFrontMonthSpecific = txoPutFrontMonthSpecificRow.slice(6, -1).map(data => numeral(data).value());
    const txoPutFrontMonthNonSpecific = txoPutFrontMonth.map((data, i) => data - txoPutFrontMonthSpecific[i]);
    const txoPutAllMonths = txoPutAllMonthsRow.slice(6, -1).map(data => numeral(data).value());
    const txoPutAllMonthsSpecific = txoPutAllMonthsSpecificRow.slice(6, -1).map(data => numeral(data).value());
    const txoPutAllMonthsNonSpecific = txoPutAllMonths.map((data, i) => data - txoPutAllMonthsSpecific[i]);
    const txoPutBackMonths = txoPutAllMonths.map((data, i) => data - txoPutFrontMonth[i]);
    const txoPutBackMonthsSpecific = txoPutAllMonthsSpecific.map((data, i) => data - txoPutFrontMonthSpecific[i]);
    const txoPutBackMonthsNonSpecific = txoPutBackMonths.map((data, i) => data - txoPutBackMonthsSpecific[i]);
    const txoPutFrontMonthMarketOi = numeral(txoPutFrontMonthRow.slice(-1)).value();
    const txoPutAllMonthsMarketOi = numeral(txoPutAllMonthsRow.slice(-1)).value();
    const txoPutBackMonthsMarketOi = txoPutAllMonthsMarketOi - txoPutFrontMonthMarketOi;

    // 合併所有數據
    const raw = [
      ...txoCallFrontMonth,
      ...txoCallFrontMonthSpecific,
      ...txoCallFrontMonthNonSpecific,
      ...txoCallAllMonths,
      ...txoCallAllMonthsSpecific,
      ...txoCallAllMonthsNonSpecific,
      ...txoCallBackMonths,
      ...txoCallBackMonthsSpecific,
      ...txoCallBackMonthsNonSpecific,
      ...txoPutFrontMonth,
      ...txoPutFrontMonthSpecific,
      ...txoPutFrontMonthNonSpecific,
      ...txoPutAllMonths,
      ...txoPutAllMonthsSpecific,
      ...txoPutAllMonthsNonSpecific,
      ...txoPutBackMonths,
      ...txoPutBackMonthsSpecific,
      ...txoPutBackMonthsNonSpecific,
    ];

    const [
      top5TxoCallFrontMonthLongOi,              // 前五大交易人-臺指買權近月契約買方
      top5TxoCallFrontMonthShortOi,             // 前五大交易人-臺指買權近月契約賣方
      top10TxoCallFrontMonthLongOi,             // 前十大交易人-臺指買權近月契約買方
      top10TxoCallFrontMonthShortOi,            // 前十大交易人-臺指買權近月契約賣方
      top5SpecificTxoCallFrontMonthLongOi,      // 前五大特定法人-臺指買權近月契約買方
      top5SpecificTxoCallFrontMonthShortOi,     // 前五大特定法人-臺指買權近月契約賣方
      top10SpecificTxoCallFrontMonthLongOi,     // 前十大特定法人-臺指買權近月契約買方
      top10SpecificTxoCallFrontMonthShortOi,    // 前十大特定法人-臺指買權近月契約賣方
      top5NonSpecificTxoCallFrontMonthLongOi,   // 前五大非特定法人-臺指買權近月契約買方
      top5NonSpecificTxoCallFrontMonthShortOi,  // 前五大非特定法人-臺指買權近月契約賣方
      top10NonSpecificTxoCallFrontMonthLongOi,  // 前十大非特定法人-臺指買權近月契約買方
      top10NonSpecificTxoCallFrontMonthShortOi, // 前十大非特定法人-臺指買權近月契約賣方
      top5TxoCallAllMonthsLongOi,               // 前五大交易人-臺指買權全部契約買方
      top5TxoCallAllMonthsShortOi,              // 前五大交易人-臺指買權全部契約賣方
      top10TxoCallAllMonthsLongOi,              // 前十大交易人-臺指買權全部契約買方
      top10TxoCallAllMonthsShortOi,             // 前十大交易人-臺指買權全部契約賣方
      top5SpecificTxoCallAllMonthsLongOi,       // 前五大特定法人-臺指買權全部契約買方
      top5SpecificTxoCallAllMonthsShortOi,      // 前五大特定法人-臺指買權全部契約賣方
      top10SpecificTxoCallAllMonthsLongOi,      // 前十大特定法人-臺指買權全部契約買方
      top10SpecificTxoCallAllMonthsShortOi,     // 前十大特定法人-臺指買權全部契約賣方
      top5NonSpecificTxoCallAllMonthsLongOi,    // 前五大非特定法人-臺指買權全部契約買方
      top5NonSpecificTxoCallAllMonthsShortOi,   // 前五大非特定法人-臺指買權全部契約賣方
      top10NonSpecificTxoCallAllMonthsLongOi,   // 前十大非特定法人-臺指買權全部契約買方
      top10NonSpecificTxoCallAllMonthsShortOi,  // 前十大非特定法人-臺指買權全部契約賣方
      top5TxoCallBackMonthsLongOi,              // 前五大交易人-臺指買權全部契約買方
      top5TxoCallBackMonthsShortOi,             // 前五大交易人-臺指買權全部契約賣方
      top10TxoCallBackMonthsLongOi,             // 前十大交易人-臺指買權全部契約買方
      top10TxoCallBackMonthsShortOi,            // 前十大交易人-臺指買權全部契約賣方
      top5SpecificTxoCallBackMonthsLongOi,      // 前五大特定法人-臺指買權全部契約買方
      top5SpecificTxoCallBackMonthsShortOi,     // 前五大特定法人-臺指買權全部契約賣方
      top10SpecificTxoCallBackMonthsLongOi,     // 前十大特定法人-臺指買權全部契約買方
      top10SpecificTxoCallBackMonthsShortOi,    // 前十大特定法人-臺指買權全部契約賣方
      top5NonSpecificTxoCallBackMonthsLongOi,   // 前五大非特定法人-臺指買權全部契約買方
      top5NonSpecificTxoCallBackMonthsShortOi,  // 前五大非特定法人-臺指買權全部契約賣方
      top10NonSpecificTxoCallBackMonthsLongOi,  // 前十大非特定法人-臺指買權全部契約買方
      top10NonSpecificTxoCallBackMonthsShortOi, // 前十大非特定法人-臺指買權全部契約賣方
      top5TxoPutFrontMonthLongOi,               // 前五大交易人-臺指賣權近月契約買方
      top5TxoPutFrontMonthShortOi,              // 前五大交易人-臺指賣權近月契約賣方
      top10TxoPutFrontMonthLongOi,              // 前十大交易人-臺指賣權近月契約買方
      top10TxoPutFrontMonthShortOi,             // 前十大交易人-臺指賣權近月契約賣方
      top5SpecificTxoPutFrontMonthLongOi,       // 前五大特定法人-臺指賣權近月契約買方
      top5SpecificTxoPutFrontMonthShortOi,      // 前五大特定法人-臺指賣權近月契約賣方
      top10SpecificTxoPutFrontMonthLongOi,      // 前十大特定法人-臺指賣權近月契約買方
      top10SpecificTxoPutFrontMonthShortOi,     // 前十大特定法人-臺指賣權近月契約賣方
      top5NonSpecificTxoPutFrontMonthLongOi,    // 前五大非特定法人-臺指賣權近月契約買方
      top5NonSpecificTxoPutFrontMonthShortOi,   // 前五大非特定法人-臺指賣權近月契約賣方
      top10NonSpecificTxoPutFrontMonthLongOi,   // 前十大非特定法人-臺指賣權近月契約買方
      top10NonSpecificTxoPutFrontMonthShortOi,  // 前十大非特定法人-臺指賣權近月契約賣方
      top5TxoPutAllMonthsLongOi,                // 前五大交易人-臺指賣權全部契約買方
      top5TxoPutAllMonthsShortOi,               // 前五大交易人-臺指賣權全部契約賣方
      top10TxoPutAllMonthsLongOi,               // 前十大交易人-臺指賣權全部契約買方
      top10TxoPutAllMonthsShortOi,              // 前十大交易人-臺指賣權全部契約賣方
      top5SpecificTxoPutAllMonthsLongOi,        // 前五大特定法人-臺指賣權全部契約買方
      top5SpecificTxoPutAllMonthsShortOi,       // 前五大特定法人-臺指賣權全部契約賣方
      top10SpecificTxoPutAllMonthsLongOi,       // 前十大特定法人-臺指賣權全部契約買方
      top10SpecificTxoPutAllMonthsShortOi,      // 前十大特定法人-臺指賣權全部契約賣方
      top5NonSpecificTxoPutAllMonthsLongOi,     // 前五大非特定法人-臺指賣權全部契約買方
      top5NonSpecificTxoPutAllMonthsShortOi,    // 前五大非特定法人-臺指賣權全部契約賣方
      top10NonSpecificTxoPutAllMonthsLongOi,    // 前十大非特定法人-臺指賣權全部契約買方
      top10NonSpecificTxoPutAllMonthsShortOi,   // 前十大非特定法人-臺指賣權全部契約賣方
      top5TxoPutBackMonthsLongOi,               // 前五大交易人-臺指買權遠月契約買方
      top5TxoPutBackMonthsShortOi,              // 前五大交易人-臺指買權遠月契約賣方
      top10TxoPutBackMonthsLongOi,              // 前十大交易人-臺指買權遠月契約買方
      top10TxoPutBackMonthsShortOi,             // 前十大交易人-臺指買權遠月契約賣方
      top5SpecificTxoPutBackMonthsLongOi,       // 前五大特定法人-臺指買權遠月契約買方
      top5SpecificTxoPutBackMonthsShortOi,      // 前五大特定法人-臺指買權遠月契約賣方
      top10SpecificTxoPutBackMonthsLongOi,      // 前十大特定法人-臺指買權遠月契約買方
      top10SpecificTxoPutBackMonthsShortOi,     // 前十大特定法人-臺指買權遠月契約賣方
      top5NonSpecificTxoPutBackMonthsLongOi,    // 前五大非特定法人-臺指買權遠月契約買方
      top5NonSpecificTxoPutBackMonthsShortOi,   // 前五大非特定法人-臺指買權遠月契約賣方
      top10NonSpecificTxoPutBackMonthsLongOi,   // 前十大非特定法人-臺指買權遠月契約買方
      top10NonSpecificTxoPutBackMonthsShortOi,  // 前十大非特定法人-臺指買權遠月契約賣方
    ] = raw;

    // 計算臺指買權近月契約大額交易人淨部位
    const top5TxoCallFrontMonthNetOi = top5TxoCallFrontMonthLongOi - top5TxoCallFrontMonthShortOi;
    const top10TxoCallFrontMonthNetOi = top10TxoCallFrontMonthLongOi - top10TxoCallFrontMonthShortOi;
    const top5SpecificTxoCallFrontMonthNetOi = top5SpecificTxoCallFrontMonthLongOi - top5SpecificTxoCallFrontMonthShortOi;
    const top10SpecificTxoCallFrontMonthNetOi = top10SpecificTxoCallFrontMonthLongOi - top10SpecificTxoCallFrontMonthShortOi;
    const top5NonSpecificTxoCallFrontMonthNetOi = top5NonSpecificTxoCallFrontMonthLongOi - top5NonSpecificTxoCallFrontMonthShortOi;
    const top10NonSpecificTxoCallFrontMonthNetOi = top10NonSpecificTxoCallFrontMonthLongOi - top10NonSpecificTxoCallFrontMonthShortOi;

    // 計算臺指買權全部契約大額交易人淨部位
    const top5TxoCallAllMonthsNetOi = top5TxoCallAllMonthsLongOi - top5TxoCallAllMonthsShortOi;
    const top10TxoCallAllMonthsNetOi = top10TxoCallAllMonthsLongOi - top10TxoCallAllMonthsShortOi;
    const top5SpecificTxoCallAllMonthsNetOi = top5SpecificTxoCallAllMonthsLongOi - top5SpecificTxoCallAllMonthsShortOi;
    const top10SpecificTxoCallAllMonthsNetOi = top10SpecificTxoCallAllMonthsLongOi - top10SpecificTxoCallAllMonthsShortOi;
    const top5NonSpecificTxoCallAllMonthsNetOi = top5NonSpecificTxoCallAllMonthsLongOi - top5NonSpecificTxoCallAllMonthsShortOi;
    const top10NonSpecificTxoCallAllMonthsNetOi = top10NonSpecificTxoCallAllMonthsLongOi - top10NonSpecificTxoCallAllMonthsShortOi;

    // 計算臺指買權遠月契約大額交易人淨部位
    const top5TxoCallBackMonthsNetOi = top5TxoCallBackMonthsLongOi - top5TxoCallBackMonthsShortOi;
    const top10TxoCallBackMonthsNetOi = top10TxoCallBackMonthsLongOi - top10TxoCallBackMonthsShortOi;
    const top5SpecificTxoCallBackMonthsNetOi = top5SpecificTxoCallBackMonthsLongOi - top5SpecificTxoCallBackMonthsShortOi;
    const top10SpecificTxoCallBackMonthsNetOi = top10SpecificTxoCallBackMonthsLongOi - top10SpecificTxoCallBackMonthsShortOi;
    const top5NonSpecificTxoCallBackMonthsNetOi = top5NonSpecificTxoCallBackMonthsLongOi - top5NonSpecificTxoCallBackMonthsShortOi;
    const top10NonSpecificTxoCallBackMonthsNetOi = top10NonSpecificTxoCallBackMonthsLongOi - top10NonSpecificTxoCallBackMonthsShortOi;

    // 計算臺指賣權近月契約大額交易人淨部位
    const top5TxoPutFrontMonthNetOi = top5TxoPutFrontMonthLongOi - top5TxoPutFrontMonthShortOi;
    const top10TxoPutFrontMonthNetOi = top10TxoPutFrontMonthLongOi - top10TxoPutFrontMonthShortOi;
    const top5SpecificTxoPutFrontMonthNetOi = top5SpecificTxoPutFrontMonthLongOi - top5SpecificTxoPutFrontMonthShortOi;
    const top10SpecificTxoPutFrontMonthNetOi = top10SpecificTxoPutFrontMonthLongOi - top10SpecificTxoPutFrontMonthShortOi;
    const top5NonSpecificTxoPutFrontMonthNetOi = top5NonSpecificTxoPutFrontMonthLongOi - top5NonSpecificTxoPutFrontMonthShortOi;
    const top10NonSpecificTxoPutFrontMonthNetOi = top10NonSpecificTxoPutFrontMonthLongOi - top10NonSpecificTxoPutFrontMonthShortOi;

    // 計算臺指賣權全部契約大額交易人淨部位
    const top5TxoPutAllMonthsNetOi = top5TxoPutAllMonthsLongOi - top5TxoPutAllMonthsShortOi;
    const top10TxoPutAllMonthsNetOi = top10TxoPutAllMonthsLongOi - top10TxoPutAllMonthsShortOi;
    const top5SpecificTxoPutAllMonthsNetOi = top5SpecificTxoPutAllMonthsLongOi - top5SpecificTxoPutAllMonthsShortOi;
    const top10SpecificTxoPutAllMonthsNetOi = top10SpecificTxoPutAllMonthsLongOi - top10SpecificTxoPutAllMonthsShortOi;
    const top5NonSpecificTxoPutAllMonthsNetOi = top5NonSpecificTxoPutAllMonthsLongOi - top5NonSpecificTxoPutAllMonthsShortOi;
    const top10NonSpecificTxoPutAllMonthsNetOi = top10NonSpecificTxoPutAllMonthsLongOi - top10NonSpecificTxoPutAllMonthsShortOi;

    // 計算臺指賣權遠月契約大額交易人淨部位
    const top5TxoPutBackMonthsNetOi = top5TxoPutBackMonthsLongOi - top5TxoPutBackMonthsShortOi;
    const top10TxoPutBackMonthsNetOi = top10TxoPutBackMonthsLongOi - top10TxoPutBackMonthsShortOi;
    const top5SpecificTxoPutBackMonthsNetOi = top5SpecificTxoPutBackMonthsLongOi - top5SpecificTxoPutBackMonthsShortOi;
    const top10SpecificTxoPutBackMonthsNetOi = top10SpecificTxoPutBackMonthsLongOi - top10SpecificTxoPutBackMonthsShortOi;
    const top5NonSpecificTxoPutBackMonthsNetOi = top5NonSpecificTxoPutBackMonthsLongOi - top5NonSpecificTxoPutBackMonthsShortOi;
    const top10NonSpecificTxoPutBackMonthsNetOi = top10NonSpecificTxoPutBackMonthsLongOi - top10NonSpecificTxoPutBackMonthsShortOi;

    return {
      date,
      top5SpecificTxoCallFrontMonthLongOi,
      top5SpecificTxoCallFrontMonthShortOi,
      top5SpecificTxoCallFrontMonthNetOi,
      top5SpecificTxoCallBackMonthsLongOi,
      top5SpecificTxoCallBackMonthsShortOi,
      top5SpecificTxoCallBackMonthsNetOi,
      top5NonSpecificTxoCallFrontMonthLongOi,
      top5NonSpecificTxoCallFrontMonthShortOi,
      top5NonSpecificTxoCallFrontMonthNetOi,
      top5NonSpecificTxoCallBackMonthsLongOi,
      top5NonSpecificTxoCallBackMonthsShortOi,
      top5NonSpecificTxoCallBackMonthsNetOi,
      top10SpecificTxoCallFrontMonthLongOi,
      top10SpecificTxoCallFrontMonthShortOi,
      top10SpecificTxoCallFrontMonthNetOi,
      top10SpecificTxoCallBackMonthsLongOi,
      top10SpecificTxoCallBackMonthsShortOi,
      top10SpecificTxoCallBackMonthsNetOi,
      top10NonSpecificTxoCallFrontMonthLongOi,
      top10NonSpecificTxoCallFrontMonthShortOi,
      top10NonSpecificTxoCallFrontMonthNetOi,
      top10NonSpecificTxoCallBackMonthsLongOi,
      top10NonSpecificTxoCallBackMonthsShortOi,
      top10NonSpecificTxoCallBackMonthsNetOi,
      top5SpecificTxoPutFrontMonthLongOi,
      top5SpecificTxoPutFrontMonthShortOi,
      top5SpecificTxoPutFrontMonthNetOi,
      top5SpecificTxoPutBackMonthsLongOi,
      top5SpecificTxoPutBackMonthsShortOi,
      top5SpecificTxoPutBackMonthsNetOi,
      top5NonSpecificTxoPutFrontMonthLongOi,
      top5NonSpecificTxoPutFrontMonthShortOi,
      top5NonSpecificTxoPutFrontMonthNetOi,
      top5NonSpecificTxoPutBackMonthsLongOi,
      top5NonSpecificTxoPutBackMonthsShortOi,
      top5NonSpecificTxoPutBackMonthsNetOi,
      top10SpecificTxoPutFrontMonthLongOi,
      top10SpecificTxoPutFrontMonthShortOi,
      top10SpecificTxoPutFrontMonthNetOi,
      top10SpecificTxoPutBackMonthsLongOi,
      top10SpecificTxoPutBackMonthsShortOi,
      top10SpecificTxoPutBackMonthsNetOi,
      top10NonSpecificTxoPutFrontMonthLongOi,
      top10NonSpecificTxoPutFrontMonthShortOi,
      top10NonSpecificTxoPutFrontMonthNetOi,
      top10NonSpecificTxoPutBackMonthsLongOi,
      top10NonSpecificTxoPutBackMonthsShortOi,
      top10NonSpecificTxoPutBackMonthsNetOi,
      txoCallFrontMonthMarketOi,
      txoCallBackMonthsMarketOi,
      txoPutFrontMonthMarketOi,
      txoPutBackMonthsMarketOi,
    };
  }
}

fetchLargeTradersTxoPosition() 方法中,需要指定 date 參數,表示要取得大額交易人臺指選擇權未沖銷部位的日期。我們定義回傳的物件欄位包含如下:

  • date:日期
  • top5SpecificTxoCallFrontMonthLongOi:前五大特定法人-買權近月契約買方部位
  • top5SpecificTxoCallFrontMonthShortOi:前五大特定法人-買權近月契約賣方部位
  • top5SpecificTxoCallFrontMonthNetOi:前五大特定法人-買權近月契約淨方部位
  • top5SpecificTxoCallBackMonthsLongOi:前五大特定法人-買權遠月契約買方部位
  • top5SpecificTxoCallBackMonthsShortOi:前五大特定法人-買權遠月契約賣方部位
  • top5SpecificTxoCallBackMonthsNetOi:前五大特定法人-買權遠月契約淨部位
  • top5NonSpecificTxoCallFrontMonthLongOi:前五大非特定法人-買權近月契約買方部位
  • top5NonSpecificTxoCallFrontMonthShortOi:前五大非特定法人-買權近月契約賣方部位
  • top5NonSpecificTxoCallFrontMonthNetOi:前五大非特定法人-買權近月契約淨部位
  • top5NonSpecificTxoCallBackMonthsLongOi:前五大非特定法人-買權遠月契約買方部位
  • top5NonSpecificTxoCallBackMonthsShortOi:前五大非特定法人-買權遠月契約賣方部位
  • top5NonSpecificTxoCallBackMonthsNetOi:前五大非特定法人-買權遠月契約淨部位
  • top10SpecificTxoCallFrontMonthLongOi:前十大特定法人-買權近月契約買方部位
  • top10SpecificTxoCallFrontMonthShortOi:前十大特定法人-買權近月契約賣方部位
  • top10SpecificTxoCallFrontMonthNetOi:前十大特定法人-買權近月契約淨部位
  • top10SpecificTxoCallBackMonthsLongOi:前十大特定法人-買權遠月契約買方部位
  • top10SpecificTxoCallBackMonthsShortOi:前十大特定法人-買權遠月契約賣方部位
  • top10SpecificTxoCallBackMonthsNetOi:前十大特定法人-買權遠月契約淨部位
  • top10NonSpecificTxoCallFrontMonthLongOi:前十大非特定法人-買權近月契約買方部位
  • top10NonSpecificTxoCallFrontMonthShortOi:前十大非特定法人-買權近月契約賣方部位
  • top10NonSpecificTxoCallFrontMonthNetOi:前十大非特定法人-買權近月契約淨部位
  • top10NonSpecificTxoCallBackMonthsLongOi:前十大非特定法人-買權遠月契約買方部位
  • top10NonSpecificTxoCallBackMonthsShortOi:前十大非特定法人-買權遠月契約賣方部位
  • top10NonSpecificTxoCallBackMonthsNetOi:前十大非特定法人-買權遠月契約淨部位
  • top5SpecificTxoPutFrontMonthLongOi:前五大特定法人-賣權近月契約買方部位
  • top5SpecificTxoPutFrontMonthShortOi:前五大特定法人-賣權近月契約賣方部位
  • top5SpecificTxoPutFrontMonthNetOi:前五大特定法人-賣權近月契約淨方部位
  • top5SpecificTxoPutBackMonthsLongOi:前五大特定法人-賣權遠月契約買方部位
  • top5SpecificTxoPutBackMonthsShortOi:前五大特定法人-賣權遠月契約賣方部位
  • top5SpecificTxoPutBackMonthsNetOi:前五大特定法人-賣權遠月契約淨部位
  • top5NonSpecificTxoPutFrontMonthLongOi:前五大非特定法人-賣權近月契約買方部位
  • top5NonSpecificTxoPutFrontMonthShortOi:前五大非特定法人-賣權近月契約賣方部位
  • top5NonSpecificTxoPutFrontMonthNetOi:前五大非特定法人-賣權近月契約淨部位
  • top5NonSpecificTxoPutBackMonthsLongOi:前五大非特定法人-賣權遠月契約買方部位
  • top5NonSpecificTxoPutBackMonthsShortOi:前五大非特定法人-賣權遠月契約賣方部位
  • top5NonSpecificTxoPutBackMonthsNetOi:前五大非特定法人-賣權遠月契約淨部位
  • top10SpecificTxoPutFrontMonthLongOi:前十大特定法人-賣權近月契約買方部位
  • top10SpecificTxoPutFrontMonthShortOi:前十大特定法人-賣權近月契約賣方部位
  • top10SpecificTxoPutFrontMonthNetOi:前十大特定法人-賣權近月契約淨部位
  • top10SpecificTxoPutBackMonthsLongOi:前十大特定法人-賣權遠月契約買方部位
  • top10SpecificTxoPutBackMonthsShortOi:前十大特定法人-賣權遠月契約賣方部位
  • top10SpecificTxoPutBackMonthsNetOi:前十大特定法人-賣權遠月契約淨部位
  • top10NonSpecificTxoPutFrontMonthLongOi:前十大非特定法人-賣權近月契約買方部位
  • top10NonSpecificTxoPutFrontMonthShortOi:前十大非特定法人-賣權近月契約賣方部位
  • top10NonSpecificTxoPutFrontMonthNetOi:前十大非特定法人-賣權近月契約淨部位
  • top10NonSpecificTxoPutBackMonthsLongOi:前十大非特定法人-賣權遠月契約買方部位
  • top10NonSpecificTxoPutBackMonthsShortOi:前十大非特定法人-賣權遠月契約賣方部位
  • top10NonSpecificTxoPutBackMonthsNetOi:前十大非特定法人-賣權遠月契約淨部位
  • txoCallFrontMonthMarketOi:買權近月契約全市場未沖銷部位數
  • txoCallBackMonthsMarketOi:買權遠月契約全市場未沖銷部位數
  • txoPutFrontMonthMarketOi:賣權近月契約全市場未沖銷部位數
  • txoPutBackMonthsMarketOi:賣權遠月契約全市場未沖銷部位數

完成後,我們只要使用 TaifexScraperServicefetchLargeTradersTxoPosition() 方法,就可以按日期取得大額交易人臺指選擇權未沖銷部位。以日期 2022-07-01 為例:

{
  date: '2022-07-01',
  top5SpecificTxoCallFrontMonthLongOi: 18188,
  top5SpecificTxoCallFrontMonthShortOi: 4221,
  top5SpecificTxoCallFrontMonthNetOi: 13967,
  top5SpecificTxoCallBackMonthsLongOi: -18188,
  top5SpecificTxoCallBackMonthsShortOi: -4221,
  top5SpecificTxoCallBackMonthsNetOi: -13967,
  top5NonSpecificTxoCallFrontMonthLongOi: 23476,
  top5NonSpecificTxoCallFrontMonthShortOi: 42280,
  top5NonSpecificTxoCallFrontMonthNetOi: -18804,
  top5NonSpecificTxoCallBackMonthsLongOi: 48767,
  top5NonSpecificTxoCallBackMonthsShortOi: 48943,
  top5NonSpecificTxoCallBackMonthsNetOi: -176,
  top10SpecificTxoCallFrontMonthLongOi: 26192,
  top10SpecificTxoCallFrontMonthShortOi: 12205,
  top10SpecificTxoCallFrontMonthNetOi: 13987,
  top10SpecificTxoCallBackMonthsLongOi: 573,
  top10SpecificTxoCallBackMonthsShortOi: -2835,
  top10SpecificTxoCallBackMonthsNetOi: 3408,
  top10NonSpecificTxoCallFrontMonthLongOi: 29556,
  top10NonSpecificTxoCallFrontMonthShortOi: 52442,
  top10NonSpecificTxoCallFrontMonthNetOi: -22886,
  top10NonSpecificTxoCallBackMonthsLongOi: 46260,
  top10NonSpecificTxoCallBackMonthsShortOi: 60442,
  top10NonSpecificTxoCallBackMonthsNetOi: -14182,
  top5SpecificTxoPutFrontMonthLongOi: 7024,
  top5SpecificTxoPutFrontMonthShortOi: 16919,
  top5SpecificTxoPutFrontMonthNetOi: -9895,
  top5SpecificTxoPutBackMonthsLongOi: 908,
  top5SpecificTxoPutBackMonthsShortOi: 5390,
  top5SpecificTxoPutBackMonthsNetOi: -4482,
  top5NonSpecificTxoPutFrontMonthLongOi: 10349,
  top5NonSpecificTxoPutFrontMonthShortOi: 24280,
  top5NonSpecificTxoPutFrontMonthNetOi: -13931,
  top5NonSpecificTxoPutBackMonthsLongOi: 14562,
  top5NonSpecificTxoPutBackMonthsShortOi: 15317,
  top5NonSpecificTxoPutBackMonthsNetOi: -755,
  top10SpecificTxoPutFrontMonthLongOi: 8437,
  top10SpecificTxoPutFrontMonthShortOi: 25242,
  top10SpecificTxoPutFrontMonthNetOi: -16805,
  top10SpecificTxoPutBackMonthsLongOi: 1317,
  top10SpecificTxoPutBackMonthsShortOi: 4296,
  top10SpecificTxoPutBackMonthsNetOi: -2979,
  top10NonSpecificTxoPutFrontMonthLongOi: 16836,
  top10NonSpecificTxoPutFrontMonthShortOi: 25412,
  top10NonSpecificTxoPutFrontMonthNetOi: -8576,
  top10NonSpecificTxoPutBackMonthsLongOi: 16548,
  top10NonSpecificTxoPutBackMonthsShortOi: 22835,
  top10NonSpecificTxoPutBackMonthsNetOi: -6287,
  txoCallFrontMonthMarketOi: 140946,
  txoCallBackMonthsMarketOi: 161221,
  txoPutFrontMonthMarketOi: 85676,
  txoPutBackMonthsMarketOi: 80450
}

本日小結

  • 期交所大額交易人未沖銷部位結構表,提供「前五大交易人」、「前十大交易人」與「特定法人」在期貨與選擇權契約的「一週契約」、「近月契約」與「所有契約」的未沖銷部位結構。
  • 將「前五大交易人」、「前十大交易人」與「特定法人」的未沖銷部位數字相減,可以取得非屬特定法人的「市場大戶」未沖銷部位。
  • 將大額交易人的「所有契約」未沖銷部位與「近月契約」未沖銷部位的數字相減,可以取得大額交易人「遠期契約」未沖銷部位。
  • 觀察大額交易人在遠期契約的未沖銷部位變化,具有領先指標的意義。
  • 瞭解如何在期交所網站上查詢並實作取得大額交易人臺股期貨未沖銷部位的方法。
  • 瞭解如何在期交所網站上查詢並實作取得大額交易人臺指選擇權未沖銷部位的方法。

Node.js 量化投資全攻略:從資料收集到自動化交易系統建構實戰
本系列文已正式出版為《Node.js 量化投資全攻略:從資料收集到自動化交易系統建構實戰》。本書新增了全新內容和實用範例,為你提供更深入的學習體驗!歡迎參考選購,開始你的量化投資之旅!
天瓏網路書店連結:https://www.tenlong.com.tw/products/9786263336070


上一篇
Day 07 - 法人動向再確認:三大法人臺指選擇權未平倉
下一篇
Day 09 - 散戶期貨指標:小台散戶多空比
系列文
從 Node.js 開發者到量化交易者:打造屬於自己的投資系統31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言