{"id":12113,"date":"2022-11-28T10:01:58","date_gmt":"2022-11-28T02:01:58","guid":{"rendered":"https:\/\/www.tejwin.com\/?post_type=insight&#038;p=12113"},"modified":"2023-06-27T11:15:41","modified_gmt":"2023-06-27T03:15:41","slug":"analysis-of-the-chip-concentration","status":"publish","type":"insight","link":"https:\/\/tejwin20260323.j.webweb.today\/en\/insight\/analysis-of-the-chip-concentration\/","title":{"rendered":"Analysis of the chip concentration"},"content":{"rendered":"\n<figure class=\"wp-block-image\" id=\"898e\"><img decoding=\"async\" src=\"https:\/\/tejwin20260323.j.webweb.today\/wp-content\/uploads\/1OHDGtWWsZicw4JwsIxBErw-2.png\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Photo by <a class=\"markup--anchor markup--figure-anchor\" href=\"https:\/\/unsplash.com\/@nampoh?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/unsplash.com\/@nampoh?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText\" data->Maxim Hopman<\/a> on&nbsp;<a class=\"markup--anchor markup--figure-anchor\" href=\"https:\/\/unsplash.com\/s\/photos\/stock?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText\" target=\"_blank\" rel=\"noopener\" data-href=\"https:\/\/unsplash.com\/s\/photos\/stock?utm_source=unsplash&amp;utm_medium=referral&amp;utm_content=creditCopyText\" data->Unsplash<\/a><\/figcaption><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"e39e\">&nbsp;<\/h4>\n\n\n\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_81 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-6a10d69cd22b8\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"ez-toc-cssicon\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-6a10d69cd22b8\"  aria-label=\"Toggle\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/tejwin20260323.j.webweb.today\/en\/insight\/analysis-of-the-chip-concentration\/#Highlights%EF%BC%9A\" >Highlights\uff1a<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/tejwin20260323.j.webweb.today\/en\/insight\/analysis-of-the-chip-concentration\/#Advice%EF%BC%9A\" >Advice\uff1a<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/tejwin20260323.j.webweb.today\/en\/insight\/analysis-of-the-chip-concentration\/#Preface%EF%BC%9A\" >Preface\uff1a<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/tejwin20260323.j.webweb.today\/en\/insight\/analysis-of-the-chip-concentration\/#The_Editing_Environment_and_Module_Required\" >The Editing Environment and Module Required<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/tejwin20260323.j.webweb.today\/en\/insight\/analysis-of-the-chip-concentration\/#Database\" >Database<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/tejwin20260323.j.webweb.today\/en\/insight\/analysis-of-the-chip-concentration\/#Data_Import\" >Data Import<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/tejwin20260323.j.webweb.today\/en\/insight\/analysis-of-the-chip-concentration\/#Data_Import-2\" >Data Import<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/tejwin20260323.j.webweb.today\/en\/insight\/analysis-of-the-chip-concentration\/#Conclusion\" >Conclusion<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/tejwin20260323.j.webweb.today\/en\/insight\/analysis-of-the-chip-concentration\/#Source_Code\" >Source Code<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/tejwin20260323.j.webweb.today\/en\/insight\/analysis-of-the-chip-concentration\/#Extended_Reading\" >Extended Reading<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-11\" href=\"https:\/\/tejwin20260323.j.webweb.today\/en\/insight\/analysis-of-the-chip-concentration\/#Related_Link\" >Related Link<\/a><\/li><\/ul><\/nav><\/div>\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Highlights%EF%BC%9A\"><\/span><strong class=\"markup--strong markup--h4-strong\"><strong>Highlights<\/strong>\uff1a<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p id=\"e76b\">Difficulty\uff1a\u2605\u2606\u2606\u2606\u2606<\/p>\n\n\n\n<p id=\"4ac9\">Use the top 15 trading net buy\/sell, total trading volume, number of participating brokers, and brokers ranking to construct a chip concentration indicator.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"93db\"><span class=\"ez-toc-section\" id=\"Advice%EF%BC%9A\"><\/span>Advice\uff1a<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p id=\"dd9f\">This article constructs chip concentration indicators through chip data and presents them in a data visualization way, requiring readers to know about data visualization and chip data.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"34a2\"><span class=\"ez-toc-section\" id=\"Preface%EF%BC%9A\"><\/span>Preface\uff1a<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p id=\"1b73\">Taiwan\u2019s stock market is a shallow dish market. A shallow dish means it has no depth and is susceptible to external shocks. In contrast, the stock market is easily disturbed by external forces. It has significant ups and downs, such as being influenced by news or large purchases of a single stock by large investors, which can significantly affect stock price performance. This article uses several chip data to explore the impact on stock prices when chips are concentrated in stock and presents them in an interactive chart.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"5b57\"><span class=\"ez-toc-section\" id=\"The_Editing_Environment_and_Module_Required\"><\/span><strong class=\"markup--strong markup--h4-strong\"><strong>The Editing Environment and Module Required<\/strong><\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p id=\"d695\">This article uses Mac OS as a system and jupyter as an editor.<\/p>\n\n\n\n<pre id=\"1a8f\" class=\"wp-block-preformatted\"><span class=\"pre--content\"><span class=\"hljs-keyword\">import<\/span> pandas <span class=\"hljs-keyword\">as<\/span> pd\n<span class=\"hljs-keyword\">import<\/span> numpy <span class=\"hljs-keyword\">as<\/span> np\n<span class=\"hljs-keyword\">import<\/span> tejapi\n<span class=\"hljs-keyword\">import<\/span> matplotlib.pyplot <span class=\"hljs-keyword\">as<\/span> plt\n<span class=\"hljs-keyword\">import<\/span> matplotlib.transforms <span class=\"hljs-keyword\">as<\/span> transforms\n<span class=\"hljs-keyword\">from<\/span> matplotlib.font_manager <span class=\"hljs-keyword\">import<\/span> FontProperties\n\nplt.rcParams[<span class=\"hljs-string\">'font.sans-serif'<\/span>] = [<span class=\"hljs-string\">'Arial Unicode MS'<\/span>] <span class=\"hljs-comment\"># \u89e3\u6c7aMAC\u96fb\u8166 plot\u4e2d\u6587\u554f\u984c<\/span>\nplt.rcParams[<span class=\"hljs-string\">'axes.unicode_minus'<\/span>] = <span class=\"hljs-literal\">False<\/span>\n\ntejapi.ApiConfig.api_key =<span class=\"hljs-string\">\"Your Key\"<\/span>\ntejapi.ApiConfig.ignoretz = <span class=\"hljs-literal\">True<\/span>\n\n<span class=\"hljs-keyword\">import<\/span> plotly.express <span class=\"hljs-keyword\">as<\/span> px\n<span class=\"hljs-keyword\">import<\/span> plotly.graph_objects <span class=\"hljs-keyword\">as<\/span> go\n<span class=\"hljs-keyword\">from<\/span> plotly.subplots <span class=\"hljs-keyword\">import<\/span> make_subplots<\/span><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"0b2e\"><span class=\"ez-toc-section\" id=\"Database\"><\/span><strong>Database<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/api.tej.com.tw\/columndoc.html?subId=46\" target=\"_blank\" rel=\"noreferrer noopener\" class=\"ek-link\">Listed company adjusted stock price(daily)-ex-right and dividends adjustment (TWN\/APRCD1)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/api.tej.com.tw\/columndoc.html?subId=46\" target=\"_blank\" rel=\"noreferrer noopener\" class=\"ek-link\">Major brokers\u2019 entry and exit details-Brokers (TWN\/AMTOP)<\/a><\/li>\n<\/ul>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"8a75\"><span class=\"ez-toc-section\" id=\"Data_Import\"><\/span><strong>Data Import<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p id=\"a1c3\">The data period was taken from 2017 to 2022, and TSMC was used as an example to obtain information on the number of shares bought, shares sold, volume, and closing price.<\/p>\n\n\n\n<pre id=\"3f15\" class=\"wp-block-preformatted\"><span class=\"pre--content\"><span class=\"hljs-attr\">df<\/span> = tejapi.get(<span class=\"hljs-string\">'TWN\/AMTOP1'<\/span>,  <span class=\"hljs-comment\">#\u5f9eTEJ api\u6488\u53d6\u6240\u9700\u8981\u7684\u8cc7\u6599<\/span>\n                <span class=\"hljs-attr\">chinese_column_name<\/span> = <span class=\"hljs-literal\">True<\/span>,\n                <span class=\"hljs-attr\">paginate<\/span> = <span class=\"hljs-literal\">True<\/span>,\n                <span class=\"hljs-attr\">coid<\/span>=<span class=\"hljs-string\">'2330'<\/span>,\n                <span class=\"hljs-attr\">mdate<\/span> = {<span class=\"hljs-string\">'gt'<\/span>:<span class=\"hljs-string\">'2017-01-01'<\/span>},\n                <span class=\"hljs-attr\">opts<\/span>={<span class=\"hljs-string\">'columns'<\/span>:[<span class=\"hljs-string\">'coid'<\/span>,<span class=\"hljs-string\">'mdate'<\/span>, <span class=\"hljs-string\">'key3'<\/span>,<span class=\"hljs-string\">'buy'<\/span>, <span class=\"hljs-string\">'sell'<\/span>, <span class=\"hljs-string\">'total'<\/span>]})\n<span class=\"hljs-attr\">df1<\/span> = tejapi.get(<span class=\"hljs-string\">'TWN\/APRCD1'<\/span>,  <span class=\"hljs-comment\">#\u5f9eTEJ api\u6488\u53d6\u6240\u9700\u8981\u7684\u8cc7\u6599<\/span>\n                <span class=\"hljs-attr\">chinese_column_name<\/span> = <span class=\"hljs-literal\">True<\/span>,\n                <span class=\"hljs-attr\">paginate<\/span> = <span class=\"hljs-literal\">True<\/span>,\n                <span class=\"hljs-attr\">coid<\/span>=<span class=\"hljs-string\">'2330'<\/span>,\n                <span class=\"hljs-attr\">mdate<\/span> = {<span class=\"hljs-string\">'gt'<\/span>:<span class=\"hljs-string\">'2017-01-01'<\/span>},\n                <span class=\"hljs-attr\">opts<\/span>={<span class=\"hljs-string\">'columns'<\/span>:[<span class=\"hljs-string\">'coid'<\/span>,<span class=\"hljs-string\">'mdate'<\/span>, <span class=\"hljs-string\">'volume'<\/span>, <span class=\"hljs-string\">'close_adj'<\/span>]})<\/span><\/pre>\n\n\n\n<p id=\"3570\">Delete the NA value of the data, sort the number of shares bought from the largest to the smallest, and take out the top 15 largest daily purchases.<\/p>\n\n\n\n<pre id=\"e5a6\" class=\"wp-block-preformatted\"><span class=\"pre--content\">df.dropna(inplace=<span class=\"hljs-literal\">True<\/span>)\ndf.sort_values([<span class=\"hljs-string\">'\u65e5\u671f'<\/span>,<span class=\"hljs-string\">'\u8cb7\u9032\u80a1\u6578'<\/span>], ascending=[<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">0<\/span>], inplace=<span class=\"hljs-literal\">True<\/span>)<span class=\"hljs-comment\">#\u6839\u64da\u8cb7\u9032\u80a1\u6578\u7531\u5927\u5230\u5c0f\u6392\u5e8f<\/span>\ndf_buy = df.groupby([<span class=\"hljs-string\">'\u65e5\u671f'<\/span>]).head(<span class=\"hljs-number\">15<\/span>)<span class=\"hljs-comment\">#\u53d6\u51fa\u6bcf\u500b\u65e5\u671f\u7684\u524d15\u7b46<\/span><\/span><\/pre>\n\n\n\n<p id=\"c66a\">Create a new Dataframe and use the date as the index to sum up, the daily buy shares and put them into a new table.<\/p>\n\n\n\n<pre id=\"9f39\" class=\"wp-block-preformatted\"><span class=\"pre--content\"><span class=\"hljs-keyword\">result<\/span> <span class=\"hljs-operator\">=<\/span> pd.DataFrame(index<span class=\"hljs-operator\">=<\/span>df_buy[<span class=\"hljs-string\">'\u65e5\u671f'<\/span>].<span class=\"hljs-keyword\">unique<\/span>())#\u5275\u4e00\u500b\u65b0\u7684\u8868\uff0c\u65e5\u671f\u7576index\n<span class=\"hljs-keyword\">result<\/span>[<span class=\"hljs-string\">'\u8cb7\u9032\u80a1\u6578'<\/span>] <span class=\"hljs-operator\">=<\/span> df_buy.groupby([<span class=\"hljs-string\">'\u65e5\u671f'<\/span>])[<span class=\"hljs-string\">'\u8cb7\u9032\u80a1\u6578'<\/span>].<span class=\"hljs-built_in\">sum<\/span>()# \u628a\u6bcf\u500b\u65e5\u671f\u7684\u524d<span class=\"hljs-number\">15<\/span>\u7b46\u8cb7\u9032\u80a1\u6578\u52a0\u7e3d<\/span><\/pre>\n\n\n\n<p id=\"63a5\">The part of the shares sold is processed similarly to the number of shares bought.<\/p>\n\n\n\n<pre id=\"64ad\" class=\"wp-block-preformatted\"><span class=\"pre--content\">df.sort_values([<span class=\"hljs-string\">'\u65e5\u671f'<\/span>,<span class=\"hljs-string\">'\u8ce3\u51fa\u80a1\u6578'<\/span>], ascending=[1,0], inplace=True)<span class=\"hljs-comment\">#\u6839\u64da\u8ce3\u51fa\u80a1\u6578\u7531\u5927\u5230\u5c0f\u6392\u5e8f<\/span>\ndf_sell  = df.groupby([<span class=\"hljs-string\">'\u65e5\u671f'<\/span>]).<span class=\"hljs-built_in\">head<\/span>(15)<span class=\"hljs-comment\">#\u53d6\u51fa\u6bcf\u500b\u65e5\u671f\u7684\u524d15\u7b46<\/span>\nresult[<span class=\"hljs-string\">'\u8ce3\u51fa\u80a1\u6578'<\/span>] = df_sell.groupby([<span class=\"hljs-string\">'\u65e5\u671f'<\/span>])[<span class=\"hljs-string\">'\u8ce3\u51fa\u80a1\u6578'<\/span>].<span class=\"hljs-built_in\">sum<\/span>()<\/span><\/pre>\n\n\n\n<p id=\"8677\">The number of shares bought and sold is summed according to the 60-day and 120-day rolling window.<\/p>\n\n\n\n<pre id=\"ad34\" class=\"wp-block-preformatted\"><span class=\"pre--content\">result_60 = result.rolling(<span class=\"hljs-number\">60<\/span>).<span class=\"hljs-built_in\">sum<\/span>() <span class=\"hljs-comment\">#\u6839\u64dan\u65e5\u505a\u8cb7\u9032\/\u8ce3\u51farolling \u7e3d\u548c<\/span>\nresult_60.rename(columns = {<span class=\"hljs-string\">'\u8cb7\u9032\u80a1\u6578'<\/span>:<span class=\"hljs-string\">'\u8cb7\u9032\u80a1\u6578_60'<\/span>, <span class=\"hljs-string\">'\u8ce3\u51fa\u80a1\u6578'<\/span>:<span class=\"hljs-string\">\"\u8ce3\u51fa\u80a1\u6578_60\"<\/span>}, inplace=<span class=\"hljs-literal\">True<\/span>)\nresult_120 = result.rolling(<span class=\"hljs-number\">120<\/span>).<span class=\"hljs-built_in\">sum<\/span>() <span class=\"hljs-comment\">#\u6839\u64dan\u65e5\u505a\u8cb7\u9032\/\u8ce3\u51farolling \u7e3d\u548c<\/span>\nresult_120.rename(columns = {<span class=\"hljs-string\">'\u8cb7\u9032\u80a1\u6578'<\/span>:<span class=\"hljs-string\">'\u8cb7\u9032\u80a1\u6578_120'<\/span>, <span class=\"hljs-string\">'\u8ce3\u51fa\u80a1\u6578'<\/span>:<span class=\"hljs-string\">\"\u8ce3\u51fa\u80a1\u6578_120\"<\/span>}, inplace=<span class=\"hljs-literal\">True<\/span>)<\/span><\/pre>\n\n\n\n<p id=\"8373\">The volume of the 60-day and 120-day rolling window is also summed and combined with the table of the number of shares.<\/p>\n\n\n\n<pre id=\"d8c0\" class=\"wp-block-preformatted\"><span class=\"pre--content\">df1[<span class=\"hljs-string\">'\u6210\u4ea4\u91cf(\u5343\u80a1)_60'<\/span>] = df1[<span class=\"hljs-string\">'\u6210\u4ea4\u91cf(\u5343\u80a1)'<\/span>].rolling(<span class=\"hljs-number\">60<\/span>).<span class=\"hljs-built_in\">sum<\/span>()\ndf1[<span class=\"hljs-string\">'\u6210\u4ea4\u91cf(\u5343\u80a1)_120'<\/span>] = df1[<span class=\"hljs-string\">'\u6210\u4ea4\u91cf(\u5343\u80a1)'<\/span>].rolling(<span class=\"hljs-number\">120<\/span>).<span class=\"hljs-built_in\">sum<\/span>()\nresult2 = pd.merge(result_60, df1[[<span class=\"hljs-string\">'\u6210\u4ea4\u91cf(\u5343\u80a1)_60'<\/span>, <span class=\"hljs-string\">'\u6210\u4ea4\u91cf(\u5343\u80a1)_120'<\/span>,<span class=\"hljs-string\">'\u6536\u76e4\u50f9(\u5143)'<\/span>]], left_index=<span class=\"hljs-literal\">True<\/span>, right_index=<span class=\"hljs-literal\">True<\/span>) <span class=\"hljs-comment\">#\u628a\u6210\u4ea4\u91cf\u8ddf\u8cb7\u9032\/\u8ce3\u51fa\u5408\u8d77\u4f86<\/span>\nresult3 = pd.merge(result2, result_120, left_index=<span class=\"hljs-literal\">True<\/span>, right_index=<span class=\"hljs-literal\">True<\/span>) <span class=\"hljs-comment\">#\u628a\u6210\u4ea4\u91cf\u8ddf\u8cb7\u9032\/\u8ce3\u51fa\u5408\u8d77\u4f86<\/span><\/span><\/pre>\n\n\n\n<p id=\"9f92\">Then, according to the formula of chip concentration: ((Buyer\u2019s top 15 total overbought volume in the last n days \u2014 Seller\u2019s top 15 total overbought volume in the last n days)\/total volume in the last n days) *100, to calculate the chip concentration.<\/p>\n\n\n\n<pre id=\"fa05\" class=\"wp-block-preformatted\"><span class=\"pre--content\">result3[<span class=\"hljs-string\">'60\u65e5\u7c4c\u78bc\u96c6\u4e2d\u5ea6'<\/span>] = ((result3[<span class=\"hljs-string\">'\u8cb7\u9032\u80a1\u6578_60'<\/span>] - result3[<span class=\"hljs-string\">'\u8ce3\u51fa\u80a1\u6578_60'<\/span>])\/result2[<span class=\"hljs-string\">'\u6210\u4ea4\u91cf(\u5343\u80a1)_60'<\/span>])*100 \nresult3[<span class=\"hljs-string\">'120\u65e5\u7c4c\u78bc\u96c6\u4e2d\u5ea6'<\/span>] = ((result3[<span class=\"hljs-string\">'\u8cb7\u9032\u80a1\u6578_120'<\/span>] - result3[<span class=\"hljs-string\">'\u8ce3\u51fa\u80a1\u6578_120'<\/span>])\/result2[<span class=\"hljs-string\">'\u6210\u4ea4\u91cf(\u5343\u80a1)_120'<\/span>])*100 \n<span class=\"hljs-comment\"># ((\u8cb7\u65b9\u524d15\u540d\u8fd1n\u65e5\u7e3d\u8cb7\u8d85\u91cf - \u8ce3\u65b9\u524d15\u540d\u8fd1n\u65e5\u7e3d\u8ce3\u8d85\u91cf) \/ \u8fd1n\u65e5\u7e3d\u6210\u4ea4\u91cf)*100<\/span><\/span><\/pre>\n\n\n\n<p id=\"5bb4\">The results are made into an interactive chart via the plotly package, making it easy to observe trends at specific times. As you can see, TSMC\u2019s 60-day chip concentration hit a new low in 2017 during the epidemic panic, showing massive chip dispersion and a drop in the stock price to the lowest point of the range.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter caption-align-center\" id=\"69ad\"><img decoding=\"async\" src=\"https:\/\/tejwin20260323.j.webweb.today\/wp-content\/uploads\/1AB2PNIcqk8ma6MRCJ3BwYw-2.png\" alt=\"\u8fd1\u56db\u5e74\u53f0\u7a4d\u96fb&amp;\u7c4c\u78bc\u96c6\u4e2d\u5ea6\"\/><figcaption class=\"wp-element-caption\">\u7c4c\u78bc\u96c6\u4e2d\u5ea6<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"f9e7\"><span class=\"ez-toc-section\" id=\"Data_Import-2\"><\/span><strong class=\"markup--strong markup--h4-strong\"><strong>Data Import<\/strong><\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p id=\"6c75\">The data period is from mid-2021 to 2022, and TSMC is used as an example to obtain the broker&#8217;s name, the broker code, the number of shares bought, and the number of shares sold.<\/p>\n\n\n\n<pre id=\"e880\" class=\"wp-block-preformatted\"><span class=\"pre--content\">df2 = tejapi.get(<span class=\"hljs-string\">'TWN\/ABSR'<\/span>, <span class=\"hljs-comment\">#\u5f9eTEJ api\u6488\u53d6\u6240\u9700\u8981\u7684\u8cc7\u6599<\/span>\n                  chinese_column_name = <span class=\"hljs-literal\">True<\/span>,\n                  paginate = <span class=\"hljs-literal\">True<\/span>,\n                  mdate = {<span class=\"hljs-string\">'gt'<\/span>:<span class=\"hljs-string\">'2021-06-30'<\/span>, <span class=\"hljs-string\">'lt'<\/span>:<span class=\"hljs-string\">'2022-11-22'<\/span>},\n                  coid=<span class=\"hljs-string\">\"2330\"<\/span>,\n                  opts={<span class=\"hljs-string\">'columns'<\/span>:[<span class=\"hljs-string\">'coid'<\/span>,<span class=\"hljs-string\">'mdate'<\/span>,<span class=\"hljs-string\">'key3'<\/span>,<span class=\"hljs-string\">'brk_nm'<\/span>,<span class=\"hljs-string\">'buy_s'<\/span>,<span class=\"hljs-string\">'sell_s'<\/span>]})<\/span><\/pre>\n\n\n\n<p id=\"65a7\">Sort the number of shares bought and sold from the largest to the smallest, and use the rank function to rank the different brokers for each date.<\/p>\n\n\n\n<pre id=\"e7c0\" class=\"wp-block-preformatted\"><span class=\"pre--content\">df2_buy = df2.sort_values([<span class=\"hljs-string\">'\u5e74\u6708\u65e5'<\/span>,<span class=\"hljs-string\">'\u8cb7\u9032\u80a1\u6578(\u80a1)'<\/span>], ascending=[<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">0<\/span>]).reset_index(drop=<span class=\"hljs-literal\">True<\/span>)\ndf2_sell = df2.sort_values([<span class=\"hljs-string\">'\u5e74\u6708\u65e5'<\/span>,<span class=\"hljs-string\">'\u8ce3\u51fa\u80a1\u6578(\u80a1)'<\/span>], ascending=[<span class=\"hljs-number\">1<\/span>,<span class=\"hljs-number\">0<\/span>]).reset_index(drop=<span class=\"hljs-literal\">True<\/span>)\ndf2_buy[<span class=\"hljs-string\">'\u6392\u540d'<\/span>] = df2_buy.groupby(<span class=\"hljs-string\">'\u5e74\u6708\u65e5'<\/span>)[<span class=\"hljs-string\">'\u8cb7\u9032\u80a1\u6578(\u80a1)'<\/span>].apply(<span class=\"hljs-keyword\">lambda<\/span> x: x.rank(method=<span class=\"hljs-string\">'dense'<\/span> ,ascending=<span class=\"hljs-literal\">False<\/span>))\ndf2_sell[<span class=\"hljs-string\">'\u6392\u540d'<\/span>] = df2_sell.groupby(<span class=\"hljs-string\">'\u5e74\u6708\u65e5'<\/span>)[<span class=\"hljs-string\">'\u8ce3\u51fa\u80a1\u6578(\u80a1)'<\/span>].apply(<span class=\"hljs-keyword\">lambda<\/span> x: x.rank(method=<span class=\"hljs-string\">'dense'<\/span> ,ascending=<span class=\"hljs-literal\">False<\/span>))<\/span><\/pre>\n\n\n\n<p id=\"c9f2\">Calculate the number of buy orders, sell orders, ranking* orders, and the total number of participating brokers per day for the subsequent indicator calculation.<\/p>\n\n\n\n<pre id=\"bca0\" class=\"wp-block-preformatted\"><span class=\"pre--content\">df2_buy[<span class=\"hljs-string\">'\u8cb7\u9032\u5f35\u6578'<\/span>] = df2_buy[<span class=\"hljs-string\">'\u8cb7\u9032\u80a1\u6578(\u80a1)'<\/span>]\/<span class=\"hljs-number\">1000<\/span>\ndf2_buy[<span class=\"hljs-string\">'\u540d\u6b21_\u5f35\u6578'<\/span>] = df2_buy[<span class=\"hljs-string\">'\u6392\u540d'<\/span>]*df2_buy[<span class=\"hljs-string\">'\u8cb7\u9032\u5f35\u6578'<\/span>]\nattend = df2_buy.groupby(<span class=\"hljs-string\">'\u5e74\u6708\u65e5'<\/span>)[<span class=\"hljs-string\">'\u8cb7\u9032\u80a1\u6578(\u80a1)'<\/span>].count()\nattend.name = <span class=\"hljs-string\">'\u53c3\u8207\u4ea4\u6613\u5238\u5546\u6578'<\/span>\ndf2_buy = df2_buy.merge(attend, on=<span class=\"hljs-string\">'\u5e74\u6708\u65e5'<\/span>)\ndf2_buy.set_index(<span class=\"hljs-string\">'\u5e74\u6708\u65e5'<\/span>, inplace=<span class=\"hljs-literal\">True<\/span>)\n\ndf2_sell[<span class=\"hljs-string\">'\u8ce3\u51fa\u5f35\u6578'<\/span>] = df2_sell[<span class=\"hljs-string\">'\u8ce3\u51fa\u80a1\u6578(\u80a1)'<\/span>]\/<span class=\"hljs-number\">1000<\/span>\ndf2_sell[<span class=\"hljs-string\">'\u540d\u6b21_\u5f35\u6578'<\/span>] = df2_sell[<span class=\"hljs-string\">'\u6392\u540d'<\/span>]*df2_sell[<span class=\"hljs-string\">'\u8ce3\u51fa\u5f35\u6578'<\/span>]\nattend1 = df2_sell.groupby(<span class=\"hljs-string\">'\u5e74\u6708\u65e5'<\/span>)[<span class=\"hljs-string\">'\u8ce3\u51fa\u80a1\u6578(\u80a1)'<\/span>].count()\nattend1.name = <span class=\"hljs-string\">'\u53c3\u8207\u4ea4\u6613\u5238\u5546\u6578'<\/span>\ndf2_sell = df2_sell.merge(attend, on=<span class=\"hljs-string\">'\u5e74\u6708\u65e5'<\/span>)\ndf2_sell.set_index(<span class=\"hljs-string\">'\u5e74\u6708\u65e5'<\/span>, inplace=<span class=\"hljs-literal\">True<\/span>)<\/span><\/pre>\n\n\n\n<p id=\"273d\">Buy concentration formula:<br>(((SUM (number of buy sheets) *number of participating brokers)\/2) -(SUM (number of buy sheets)\/2) +(SUM (number of buy sheets) *ranking))\/ (SUM (number of buy sheets) *ranking)\/2<\/p>\n\n\n\n<p id=\"5cee\">Sell concentration formula:<br>(((SUM (number of sell sheets) *number of participating brokers)\/2) -(SUM (number of sell sheets)\/2) +(SUM (number of sell sheets) *ranking))\/ (SUM (number of sell sheets) *ranking)\/2<\/p>\n\n\n\n<p id=\"2b96\">Difference = Buy concentration \u2014 Sell concentration.<\/p>\n\n\n\n<p id=\"3b36\">Because the formula is more complicated, I divided it into three parts to calculate, and finally calculated the buy concentration, sell concentration, and the difference.<\/p>\n\n\n\n<pre id=\"9a6a\" class=\"wp-block-preformatted\"><span class=\"pre--content\">result = pd.DataFrame(index=(df2_buy.index).unique())\nresult[<span class=\"hljs-string\">'a1'<\/span>] = ((df2_buy.groupby(<span class=\"hljs-string\">'\u5e74\u6708\u65e5'<\/span>)[<span class=\"hljs-string\">'\u8cb7\u9032\u5f35\u6578'<\/span>].<span class=\"hljs-built_in\">sum<\/span>())*(df2_buy.groupby(<span class=\"hljs-string\">'\u5e74\u6708\u65e5'<\/span>)[<span class=\"hljs-string\">'\u53c3\u8207\u4ea4\u6613\u5238\u5546\u6578'<\/span>].head(<span class=\"hljs-number\">1<\/span>)))\/<span class=\"hljs-number\">2<\/span>\nresult[<span class=\"hljs-string\">'b1'<\/span>] = (df2_buy.groupby(<span class=\"hljs-string\">'\u5e74\u6708\u65e5'<\/span>)[<span class=\"hljs-string\">'\u8cb7\u9032\u5f35\u6578'<\/span>].<span class=\"hljs-built_in\">sum<\/span>())\/<span class=\"hljs-number\">2<\/span>\nresult[<span class=\"hljs-string\">'c1'<\/span>] = df2_buy.groupby(<span class=\"hljs-string\">'\u5e74\u6708\u65e5'<\/span>)[<span class=\"hljs-string\">'\u540d\u6b21_\u5f35\u6578'<\/span>].<span class=\"hljs-built_in\">sum<\/span>()\nresult[<span class=\"hljs-string\">'a2'<\/span>] = ((df2_sell.groupby(<span class=\"hljs-string\">'\u5e74\u6708\u65e5'<\/span>)[<span class=\"hljs-string\">'\u8ce3\u51fa\u5f35\u6578'<\/span>].<span class=\"hljs-built_in\">sum<\/span>())*(df2_buy.groupby(<span class=\"hljs-string\">'\u5e74\u6708\u65e5'<\/span>)[<span class=\"hljs-string\">'\u53c3\u8207\u4ea4\u6613\u5238\u5546\u6578'<\/span>].head(<span class=\"hljs-number\">1<\/span>)))\/<span class=\"hljs-number\">2<\/span>\nresult[<span class=\"hljs-string\">'b2'<\/span>] = (df2_sell.groupby(<span class=\"hljs-string\">'\u5e74\u6708\u65e5'<\/span>)[<span class=\"hljs-string\">'\u8ce3\u51fa\u5f35\u6578'<\/span>].<span class=\"hljs-built_in\">sum<\/span>())\/<span class=\"hljs-number\">2<\/span>\nresult[<span class=\"hljs-string\">'c2'<\/span>] = df2_sell.groupby(<span class=\"hljs-string\">'\u5e74\u6708\u65e5'<\/span>)[<span class=\"hljs-string\">'\u540d\u6b21_\u5f35\u6578'<\/span>].<span class=\"hljs-built_in\">sum<\/span>()\n\nresult[<span class=\"hljs-string\">'\u8cb7\u9032\u96c6\u4e2d\u5ea6'<\/span>] = (result[<span class=\"hljs-string\">'a1'<\/span>] - (result[<span class=\"hljs-string\">'b1'<\/span>]+result[<span class=\"hljs-string\">'c1'<\/span>]))\/result[<span class=\"hljs-string\">'a1'<\/span>]\nresult[<span class=\"hljs-string\">'\u8ce3\u51fa\u96c6\u4e2d\u5ea6'<\/span>] = (result[<span class=\"hljs-string\">'a2'<\/span>] - (result[<span class=\"hljs-string\">'b2'<\/span>]+result[<span class=\"hljs-string\">'c2'<\/span>]))\/result[<span class=\"hljs-string\">'a2'<\/span>]\nresult[<span class=\"hljs-string\">'\u5dee\u503c'<\/span>] = result[<span class=\"hljs-string\">'\u8cb7\u9032\u96c6\u4e2d\u5ea6'<\/span>] - result[<span class=\"hljs-string\">'\u8ce3\u51fa\u96c6\u4e2d\u5ea6'<\/span>]<\/span><\/pre>\n\n\n\n<p id=\"2d4e\">Integrate the buy concentration, sell concentration, difference, and TSMC\u2019s closing price into the same table to facilitate subsequent charting.<\/p>\n\n\n\n<pre id=\"8acb\" class=\"wp-block-preformatted\"><span class=\"pre--content\">final = result[[<span class=\"hljs-string\">'\u8cb7\u9032\u96c6\u4e2d\u5ea6'<\/span>,<span class=\"hljs-string\">'\u8ce3\u51fa\u96c6\u4e2d\u5ea6'<\/span>,<span class=\"hljs-string\">'\u5dee\u503c'<\/span>]].merge(result3.loc[<span class=\"hljs-string\">'2021-07-01'<\/span>:][<span class=\"hljs-string\">'\u6536\u76e4\u50f9(\u5143)'<\/span>], left_index=<span class=\"hljs-literal\">True<\/span>,right_index=<span class=\"hljs-literal\">True<\/span>)<\/span><\/pre>\n\n\n\n<figure class=\"wp-block-image aligncenter caption-align-center\" id=\"83e4\"><img decoding=\"async\" src=\"https:\/\/tejwin20260323.j.webweb.today\/wp-content\/uploads\/1sngvnGJXvrHum6GzQl6e5A-2.png\" alt=\"\u8fd1\u4e00\u5e74\u53f0\u7a4d\u96fb\u7c4c\u78bc\u96c6\u4e2d\u5ea6\"\/><\/figure>\n\n\n\n<p id=\"e4e8\">First, hide the difference to better observe this chart. You can find that no matter the buy concentration or sell concentration, fluctuations are very large. It is difficult to observe whether the trend is consistent with the stock price and then observe the relationship between the difference and the stock price.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter caption-align-center\" id=\"2271\"><img decoding=\"async\" src=\"https:\/\/tejwin20260323.j.webweb.today\/wp-content\/uploads\/1bn_yimlpRNWRlLMdG_amYg-2.png\" alt=\"\u8cb7\u8ce3\u96c6\u4e2d\u5ea6\u8207\u5dee\u503c\"\/><\/figure>\n\n\n\n<p id=\"895e\">It is clear from the difference and TSMC\u2019s closing price that when the difference is more prominent, TSMC\u2019s closing price performs better on that day, and conversely, when the difference shows a downward trend, TSMC\u2019s closing price also shows a downward trend. It can be seen that the concentration of chips, even for companies with large market capitalization and turnover like TSMC, still has a specific effect.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter caption-align-center\" id=\"0fbc\"><img decoding=\"async\" src=\"https:\/\/tejwin20260323.j.webweb.today\/wp-content\/uploads\/1JVRgyvISSIL5FzyNoNEh4w-2.png\" alt=\"\u8cb7\u8ce3\u96c6\u4e2d\u5ea6\u8207\u5dee\u503c\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"e910\"><span class=\"ez-toc-section\" id=\"Conclusion\"><\/span><strong>Conclusion<\/strong><span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p id=\"6fbb\">We can see from the results that both the first 60\/120-day chip concentration or the second buy\/sell indicators and differences show the impact of chip concentration on the stock price. The stock price tends to fall back when the concentration is lower, or the spread is smaller. It should be noted that if the reader wants to use it for program trading or academic research, further smoothing may need to be considered; otherwise, the data with such high volatility may easily have over-generated signals or problems with stationary.<\/p>\n\n\n\n<p id=\"bc52\">We will also introduce the use of the TEJ database to construct various indicators and backtest the performance of the indicators; welcome to purchase the plans offered in TEJ E Shop and use the well-complete database to find the potential event.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"e8ca\"><span class=\"ez-toc-section\" id=\"Source_Code\"><\/span>Source Code<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ul>\n<li id=\"b07a\" class=\"graf graf--figure graf--iframe graf-after--h4\"><a href=\"https:\/\/gist.github.com\/tej87681088\/081d8c172ee6020c5c110be151b6ad9a#file-tejapi_chip_concentration-ipynb\" target=\"_blank\" rel=\"noopener\">Github<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Extended_Reading\"><\/span>Extended Reading<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/medium.com\/tej-api-financial-data-anlaysis\/quant-2-technical-analysis-2958435a8922\" target=\"_blank\" rel=\"noopener\"><em>\u3010Quant\u3011- Technical Analysis<\/em><\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/medium.com\/tej-api-financial-data-anlaysis\/quant-15-momentum-trade-53e538e272dc\" target=\"_blank\" rel=\"noopener\"><em>\u3010Quant\u3011 Momentum trade<\/em><\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"513e\"><span class=\"ez-toc-section\" id=\"Related_Link\"><\/span>Related Link<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/api.tej.com.tw\/index.html\" rel=\"noreferrer noopener\" target=\"_blank\">TEJ API<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/eshop.tej.com.tw\/E-Shop\/Edata_intro\" rel=\"noreferrer noopener\" target=\"_blank\">TEJ E-Shop<\/a><\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Taiwan\u2019s stock market is a shallow dish market. A shallow dish means it has no depth and is susceptible to external shocks. In contrast, the stock market is easily disturbed by external forces. It has significant ups and downs, such as being influenced by news or large purchases of a single stock by large investors, which can significantly affect stock price performance. This article uses several chip data to explore the impact on stock prices when chips are concentrated in stock and presents them in an interactive chart.<\/p>\n","protected":false},"featured_media":12123,"template":"","tags":[2604,2371,3008,2541],"insight-category":[690,50],"class_list":["post-12113","insight","type-insight","status-publish","has-post-thumbnail","hentry","tag-machine-learning","tag-python","tag-tejapi-quant","tag-2541","insight-category-data-analysis","insight-category-fintech"],"acf":[],"_links":{"self":[{"href":"https:\/\/tejwin20260323.j.webweb.today\/en\/wp-json\/wp\/v2\/insight\/12113","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tejwin20260323.j.webweb.today\/en\/wp-json\/wp\/v2\/insight"}],"about":[{"href":"https:\/\/tejwin20260323.j.webweb.today\/en\/wp-json\/wp\/v2\/types\/insight"}],"version-history":[{"count":0,"href":"https:\/\/tejwin20260323.j.webweb.today\/en\/wp-json\/wp\/v2\/insight\/12113\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/tejwin20260323.j.webweb.today\/en\/wp-json\/wp\/v2\/media\/12123"}],"wp:attachment":[{"href":"https:\/\/tejwin20260323.j.webweb.today\/en\/wp-json\/wp\/v2\/media?parent=12113"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tejwin20260323.j.webweb.today\/en\/wp-json\/wp\/v2\/tags?post=12113"},{"taxonomy":"insight-category","embeddable":true,"href":"https:\/\/tejwin20260323.j.webweb.today\/en\/wp-json\/wp\/v2\/insight-category?post=12113"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}