Created
July 16, 2021 19:47
-
-
Save tej87681088/e4563c0a4f9ea0152a5131f99dd4a07d to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import tejapi\n", | |
| "import pandas as pd\n", | |
| "import numpy as np\n", | |
| "import matplotlib.pyplot as plt\n", | |
| "tejapi.ApiConfig.api_key = 'Your Key'\n", | |
| "tejapi.ApiConfig.ignoretz = True" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>證券名稱</th>\n", | |
| " <th>年月日</th>\n", | |
| " <th>合計買賣超(千股)</th>\n", | |
| " <th>合計持股率%</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>None</th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-01-02</td>\n", | |
| " <td>4681</td>\n", | |
| " <td>24.43</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-01-03</td>\n", | |
| " <td>7634</td>\n", | |
| " <td>24.57</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-01-06</td>\n", | |
| " <td>-1933</td>\n", | |
| " <td>24.52</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-01-07</td>\n", | |
| " <td>-2229</td>\n", | |
| " <td>24.47</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-01-08</td>\n", | |
| " <td>-3970</td>\n", | |
| " <td>24.39</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>...</th>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>240</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-12-25</td>\n", | |
| " <td>36469</td>\n", | |
| " <td>33.82</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>241</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-12-28</td>\n", | |
| " <td>6982</td>\n", | |
| " <td>33.96</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>242</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-12-29</td>\n", | |
| " <td>-69663</td>\n", | |
| " <td>32.52</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>243</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-12-30</td>\n", | |
| " <td>11001</td>\n", | |
| " <td>32.75</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>244</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-12-31</td>\n", | |
| " <td>2773</td>\n", | |
| " <td>32.52</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "<p>245 rows × 4 columns</p>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " 證券名稱 年月日 合計買賣超(千股) 合計持股率%\n", | |
| "None \n", | |
| "0 2603 2020-01-02 4681 24.43\n", | |
| "1 2603 2020-01-03 7634 24.57\n", | |
| "2 2603 2020-01-06 -1933 24.52\n", | |
| "3 2603 2020-01-07 -2229 24.47\n", | |
| "4 2603 2020-01-08 -3970 24.39\n", | |
| "... ... ... ... ...\n", | |
| "240 2603 2020-12-25 36469 33.82\n", | |
| "241 2603 2020-12-28 6982 33.96\n", | |
| "242 2603 2020-12-29 -69663 32.52\n", | |
| "243 2603 2020-12-30 11001 32.75\n", | |
| "244 2603 2020-12-31 2773 32.52\n", | |
| "\n", | |
| "[245 rows x 4 columns]" | |
| ] | |
| }, | |
| "execution_count": 2, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "#長榮 2603 籌碼 https://api.tej.com.tw/columns.html?idCode=TRAIL/TATINST1\n", | |
| "evergreen_chip = tejapi.get('TRAIL/TATINST1',\n", | |
| " coid = '2603',\n", | |
| " opts = {'columns':['coid','mdate','ttl_ex','fld024']},\n", | |
| " chinese_column_name = True)\n", | |
| "evergreen_chip" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>年月日</th>\n", | |
| " <th>開盤價(元)</th>\n", | |
| " <th>次日開盤價</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>None</th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>2020-01-02</td>\n", | |
| " <td>12.60</td>\n", | |
| " <td>12.80</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>2020-01-03</td>\n", | |
| " <td>12.80</td>\n", | |
| " <td>13.00</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>2020-01-06</td>\n", | |
| " <td>13.00</td>\n", | |
| " <td>13.00</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>2020-01-07</td>\n", | |
| " <td>13.00</td>\n", | |
| " <td>12.75</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>2020-01-08</td>\n", | |
| " <td>12.75</td>\n", | |
| " <td>12.75</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>...</th>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>240</th>\n", | |
| " <td>2020-12-25</td>\n", | |
| " <td>33.00</td>\n", | |
| " <td>34.75</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>241</th>\n", | |
| " <td>2020-12-28</td>\n", | |
| " <td>34.75</td>\n", | |
| " <td>39.00</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>242</th>\n", | |
| " <td>2020-12-29</td>\n", | |
| " <td>39.00</td>\n", | |
| " <td>38.00</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>243</th>\n", | |
| " <td>2020-12-30</td>\n", | |
| " <td>38.00</td>\n", | |
| " <td>38.70</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>244</th>\n", | |
| " <td>2020-12-31</td>\n", | |
| " <td>38.70</td>\n", | |
| " <td>NaN</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "<p>245 rows × 3 columns</p>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " 年月日 開盤價(元) 次日開盤價\n", | |
| "None \n", | |
| "0 2020-01-02 12.60 12.80\n", | |
| "1 2020-01-03 12.80 13.00\n", | |
| "2 2020-01-06 13.00 13.00\n", | |
| "3 2020-01-07 13.00 12.75\n", | |
| "4 2020-01-08 12.75 12.75\n", | |
| "... ... ... ...\n", | |
| "240 2020-12-25 33.00 34.75\n", | |
| "241 2020-12-28 34.75 39.00\n", | |
| "242 2020-12-29 39.00 38.00\n", | |
| "243 2020-12-30 38.00 38.70\n", | |
| "244 2020-12-31 38.70 NaN\n", | |
| "\n", | |
| "[245 rows x 3 columns]" | |
| ] | |
| }, | |
| "execution_count": 3, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "#長榮 2603 股價 https://api.tej.com.tw/columns.html?idCode=TRAIL/TAPRCD\n", | |
| "evergreen_price = tejapi.get('TRAIL/TAPRCD',\n", | |
| " coid = '2603',\n", | |
| " opts = {'columns':['mdate','open_d']},\n", | |
| " chinese_column_name = True)\n", | |
| "evergreen_price['次日開盤價'] = evergreen_price['開盤價(元)'].shift(-1)\n", | |
| "evergreen_price" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>年月日</th>\n", | |
| " <th>市場報酬率%</th>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>None</th>\n", | |
| " <th></th>\n", | |
| " <th></th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>2020-01-02</td>\n", | |
| " <td>0.8614</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>2020-01-03</td>\n", | |
| " <td>0.0823</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>2020-01-06</td>\n", | |
| " <td>-1.2970</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>2020-01-07</td>\n", | |
| " <td>-0.6110</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>2020-01-08</td>\n", | |
| " <td>-0.5322</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>...</th>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>240</th>\n", | |
| " <td>2020-12-25</td>\n", | |
| " <td>0.3581</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>241</th>\n", | |
| " <td>2020-12-28</td>\n", | |
| " <td>1.0582</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>242</th>\n", | |
| " <td>2020-12-29</td>\n", | |
| " <td>-0.0761</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>243</th>\n", | |
| " <td>2020-12-30</td>\n", | |
| " <td>1.4901</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>244</th>\n", | |
| " <td>2020-12-31</td>\n", | |
| " <td>0.3052</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "<p>245 rows × 2 columns</p>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " 年月日 市場報酬率%\n", | |
| "None \n", | |
| "0 2020-01-02 0.8614\n", | |
| "1 2020-01-03 0.0823\n", | |
| "2 2020-01-06 -1.2970\n", | |
| "3 2020-01-07 -0.6110\n", | |
| "4 2020-01-08 -0.5322\n", | |
| "... ... ...\n", | |
| "240 2020-12-25 0.3581\n", | |
| "241 2020-12-28 1.0582\n", | |
| "242 2020-12-29 -0.0761\n", | |
| "243 2020-12-30 1.4901\n", | |
| "244 2020-12-31 0.3052\n", | |
| "\n", | |
| "[245 rows x 2 columns]" | |
| ] | |
| }, | |
| "execution_count": 4, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "#市場報酬\n", | |
| "market = tejapi.get('TRAIL/TAPRCD',\n", | |
| " coid = 'Y9997',\n", | |
| " opts = {'columns':['mdate', 'roi']},\n", | |
| " chinese_column_name = True)\n", | |
| "market = market.rename(columns = {'報酬率%':'市場報酬率%'})\n", | |
| "market" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>證券名稱</th>\n", | |
| " <th>年月日</th>\n", | |
| " <th>合計買賣超(千股)</th>\n", | |
| " <th>合計持股率%</th>\n", | |
| " <th>開盤價(元)</th>\n", | |
| " <th>次日開盤價</th>\n", | |
| " <th>市場報酬率%</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-01-02</td>\n", | |
| " <td>4681</td>\n", | |
| " <td>24.43</td>\n", | |
| " <td>12.60</td>\n", | |
| " <td>12.80</td>\n", | |
| " <td>0.8614</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-01-03</td>\n", | |
| " <td>7634</td>\n", | |
| " <td>24.57</td>\n", | |
| " <td>12.80</td>\n", | |
| " <td>13.00</td>\n", | |
| " <td>0.0823</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-01-06</td>\n", | |
| " <td>-1933</td>\n", | |
| " <td>24.52</td>\n", | |
| " <td>13.00</td>\n", | |
| " <td>13.00</td>\n", | |
| " <td>-1.2970</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-01-07</td>\n", | |
| " <td>-2229</td>\n", | |
| " <td>24.47</td>\n", | |
| " <td>13.00</td>\n", | |
| " <td>12.75</td>\n", | |
| " <td>-0.6110</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-01-08</td>\n", | |
| " <td>-3970</td>\n", | |
| " <td>24.39</td>\n", | |
| " <td>12.75</td>\n", | |
| " <td>12.75</td>\n", | |
| " <td>-0.5322</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>...</th>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>240</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-12-25</td>\n", | |
| " <td>36469</td>\n", | |
| " <td>33.82</td>\n", | |
| " <td>33.00</td>\n", | |
| " <td>34.75</td>\n", | |
| " <td>0.3581</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>241</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-12-28</td>\n", | |
| " <td>6982</td>\n", | |
| " <td>33.96</td>\n", | |
| " <td>34.75</td>\n", | |
| " <td>39.00</td>\n", | |
| " <td>1.0582</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>242</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-12-29</td>\n", | |
| " <td>-69663</td>\n", | |
| " <td>32.52</td>\n", | |
| " <td>39.00</td>\n", | |
| " <td>38.00</td>\n", | |
| " <td>-0.0761</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>243</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-12-30</td>\n", | |
| " <td>11001</td>\n", | |
| " <td>32.75</td>\n", | |
| " <td>38.00</td>\n", | |
| " <td>38.70</td>\n", | |
| " <td>1.4901</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>244</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-12-31</td>\n", | |
| " <td>2773</td>\n", | |
| " <td>32.52</td>\n", | |
| " <td>38.70</td>\n", | |
| " <td>NaN</td>\n", | |
| " <td>0.3052</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "<p>245 rows × 7 columns</p>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " 證券名稱 年月日 合計買賣超(千股) 合計持股率% 開盤價(元) 次日開盤價 市場報酬率%\n", | |
| "0 2603 2020-01-02 4681 24.43 12.60 12.80 0.8614\n", | |
| "1 2603 2020-01-03 7634 24.57 12.80 13.00 0.0823\n", | |
| "2 2603 2020-01-06 -1933 24.52 13.00 13.00 -1.2970\n", | |
| "3 2603 2020-01-07 -2229 24.47 13.00 12.75 -0.6110\n", | |
| "4 2603 2020-01-08 -3970 24.39 12.75 12.75 -0.5322\n", | |
| ".. ... ... ... ... ... ... ...\n", | |
| "240 2603 2020-12-25 36469 33.82 33.00 34.75 0.3581\n", | |
| "241 2603 2020-12-28 6982 33.96 34.75 39.00 1.0582\n", | |
| "242 2603 2020-12-29 -69663 32.52 39.00 38.00 -0.0761\n", | |
| "243 2603 2020-12-30 11001 32.75 38.00 38.70 1.4901\n", | |
| "244 2603 2020-12-31 2773 32.52 38.70 NaN 0.3052\n", | |
| "\n", | |
| "[245 rows x 7 columns]" | |
| ] | |
| }, | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "#合併\n", | |
| "evergreen = evergreen_chip.merge(evergreen_price, on = '年月日')\n", | |
| "evergreen = evergreen.merge(market, on = '年月日')\n", | |
| "evergreen" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>證券名稱</th>\n", | |
| " <th>年月日</th>\n", | |
| " <th>合計買賣超(千股)</th>\n", | |
| " <th>合計持股率%</th>\n", | |
| " <th>開盤價(元)</th>\n", | |
| " <th>次日開盤價</th>\n", | |
| " <th>市場報酬率%</th>\n", | |
| " <th>合計買賣超</th>\n", | |
| " <th>持股率_5日MA</th>\n", | |
| " <th>合計持股變化</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-01-08</td>\n", | |
| " <td>-3970</td>\n", | |
| " <td>24.39</td>\n", | |
| " <td>12.75</td>\n", | |
| " <td>12.75</td>\n", | |
| " <td>-0.5322</td>\n", | |
| " <td>0</td>\n", | |
| " <td>24.476</td>\n", | |
| " <td>0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-01-09</td>\n", | |
| " <td>1020</td>\n", | |
| " <td>24.39</td>\n", | |
| " <td>12.75</td>\n", | |
| " <td>12.90</td>\n", | |
| " <td>1.2992</td>\n", | |
| " <td>1</td>\n", | |
| " <td>24.468</td>\n", | |
| " <td>0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-01-10</td>\n", | |
| " <td>12553</td>\n", | |
| " <td>24.67</td>\n", | |
| " <td>12.90</td>\n", | |
| " <td>13.15</td>\n", | |
| " <td>0.4514</td>\n", | |
| " <td>1</td>\n", | |
| " <td>24.488</td>\n", | |
| " <td>1</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-01-13</td>\n", | |
| " <td>1896</td>\n", | |
| " <td>24.71</td>\n", | |
| " <td>13.15</td>\n", | |
| " <td>13.15</td>\n", | |
| " <td>0.7382</td>\n", | |
| " <td>1</td>\n", | |
| " <td>24.526</td>\n", | |
| " <td>1</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-01-14</td>\n", | |
| " <td>6599</td>\n", | |
| " <td>24.84</td>\n", | |
| " <td>13.15</td>\n", | |
| " <td>13.20</td>\n", | |
| " <td>0.5481</td>\n", | |
| " <td>1</td>\n", | |
| " <td>24.600</td>\n", | |
| " <td>1</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>...</th>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>235</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-12-24</td>\n", | |
| " <td>560</td>\n", | |
| " <td>33.06</td>\n", | |
| " <td>31.70</td>\n", | |
| " <td>33.00</td>\n", | |
| " <td>0.4021</td>\n", | |
| " <td>1</td>\n", | |
| " <td>33.308</td>\n", | |
| " <td>0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>236</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-12-25</td>\n", | |
| " <td>36469</td>\n", | |
| " <td>33.82</td>\n", | |
| " <td>33.00</td>\n", | |
| " <td>34.75</td>\n", | |
| " <td>0.3581</td>\n", | |
| " <td>1</td>\n", | |
| " <td>33.348</td>\n", | |
| " <td>1</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>237</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-12-28</td>\n", | |
| " <td>6982</td>\n", | |
| " <td>33.96</td>\n", | |
| " <td>34.75</td>\n", | |
| " <td>39.00</td>\n", | |
| " <td>1.0582</td>\n", | |
| " <td>1</td>\n", | |
| " <td>33.408</td>\n", | |
| " <td>1</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>238</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-12-29</td>\n", | |
| " <td>-69663</td>\n", | |
| " <td>32.52</td>\n", | |
| " <td>39.00</td>\n", | |
| " <td>38.00</td>\n", | |
| " <td>-0.0761</td>\n", | |
| " <td>0</td>\n", | |
| " <td>33.282</td>\n", | |
| " <td>0</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>239</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-12-30</td>\n", | |
| " <td>11001</td>\n", | |
| " <td>32.75</td>\n", | |
| " <td>38.00</td>\n", | |
| " <td>38.70</td>\n", | |
| " <td>1.4901</td>\n", | |
| " <td>1</td>\n", | |
| " <td>33.222</td>\n", | |
| " <td>0</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "<p>240 rows × 10 columns</p>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " 證券名稱 年月日 合計買賣超(千股) 合計持股率% 開盤價(元) 次日開盤價 市場報酬率% 合計買賣超 \\\n", | |
| "0 2603 2020-01-08 -3970 24.39 12.75 12.75 -0.5322 0 \n", | |
| "1 2603 2020-01-09 1020 24.39 12.75 12.90 1.2992 1 \n", | |
| "2 2603 2020-01-10 12553 24.67 12.90 13.15 0.4514 1 \n", | |
| "3 2603 2020-01-13 1896 24.71 13.15 13.15 0.7382 1 \n", | |
| "4 2603 2020-01-14 6599 24.84 13.15 13.20 0.5481 1 \n", | |
| ".. ... ... ... ... ... ... ... ... \n", | |
| "235 2603 2020-12-24 560 33.06 31.70 33.00 0.4021 1 \n", | |
| "236 2603 2020-12-25 36469 33.82 33.00 34.75 0.3581 1 \n", | |
| "237 2603 2020-12-28 6982 33.96 34.75 39.00 1.0582 1 \n", | |
| "238 2603 2020-12-29 -69663 32.52 39.00 38.00 -0.0761 0 \n", | |
| "239 2603 2020-12-30 11001 32.75 38.00 38.70 1.4901 1 \n", | |
| "\n", | |
| " 持股率_5日MA 合計持股變化 \n", | |
| "0 24.476 0 \n", | |
| "1 24.468 0 \n", | |
| "2 24.488 1 \n", | |
| "3 24.526 1 \n", | |
| "4 24.600 1 \n", | |
| ".. ... ... \n", | |
| "235 33.308 0 \n", | |
| "236 33.348 1 \n", | |
| "237 33.408 1 \n", | |
| "238 33.282 0 \n", | |
| "239 33.222 0 \n", | |
| "\n", | |
| "[240 rows x 10 columns]" | |
| ] | |
| }, | |
| "execution_count": 6, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "#建立買賣點欄位\n", | |
| "evergreen['合計買賣超'] = np.where(evergreen['合計買賣超(千股)'] >= 0, 1, 0)\n", | |
| "evergreen['持股率_5日MA'] = evergreen['合計持股率%'].rolling(5).mean()\n", | |
| "evergreen['合計持股變化'] = np.where(evergreen['合計持股率%'] - evergreen['持股率_5日MA'] > 0, 1, 0)\n", | |
| "evergreen = evergreen.dropna().reset_index(drop=True)\n", | |
| "evergreen" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 7, | |
| "metadata": { | |
| "scrolled": true | |
| }, | |
| "outputs": [ | |
| { | |
| "name": "stderr", | |
| "output_type": "stream", | |
| "text": [ | |
| "<ipython-input-7-1f072148f07d>:4: SettingWithCopyWarning: \n", | |
| "A value is trying to be set on a copy of a slice from a DataFrame\n", | |
| "\n", | |
| "See the caveats in the documentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy\n", | |
| " evergreen['訊號'][len(evergreen)-1] = 'Sell'\n" | |
| ] | |
| }, | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>證券名稱</th>\n", | |
| " <th>年月日</th>\n", | |
| " <th>合計買賣超(千股)</th>\n", | |
| " <th>合計持股率%</th>\n", | |
| " <th>開盤價(元)</th>\n", | |
| " <th>次日開盤價</th>\n", | |
| " <th>市場報酬率%</th>\n", | |
| " <th>合計買賣超</th>\n", | |
| " <th>持股率_5日MA</th>\n", | |
| " <th>合計持股變化</th>\n", | |
| " <th>訊號</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-01-08</td>\n", | |
| " <td>-3970</td>\n", | |
| " <td>24.39</td>\n", | |
| " <td>12.75</td>\n", | |
| " <td>12.75</td>\n", | |
| " <td>-0.5322</td>\n", | |
| " <td>0</td>\n", | |
| " <td>24.476</td>\n", | |
| " <td>0</td>\n", | |
| " <td></td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-01-09</td>\n", | |
| " <td>1020</td>\n", | |
| " <td>24.39</td>\n", | |
| " <td>12.75</td>\n", | |
| " <td>12.90</td>\n", | |
| " <td>1.2992</td>\n", | |
| " <td>1</td>\n", | |
| " <td>24.468</td>\n", | |
| " <td>0</td>\n", | |
| " <td>Buy</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-01-10</td>\n", | |
| " <td>12553</td>\n", | |
| " <td>24.67</td>\n", | |
| " <td>12.90</td>\n", | |
| " <td>13.15</td>\n", | |
| " <td>0.4514</td>\n", | |
| " <td>1</td>\n", | |
| " <td>24.488</td>\n", | |
| " <td>1</td>\n", | |
| " <td></td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-01-13</td>\n", | |
| " <td>1896</td>\n", | |
| " <td>24.71</td>\n", | |
| " <td>13.15</td>\n", | |
| " <td>13.15</td>\n", | |
| " <td>0.7382</td>\n", | |
| " <td>1</td>\n", | |
| " <td>24.526</td>\n", | |
| " <td>1</td>\n", | |
| " <td></td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-01-14</td>\n", | |
| " <td>6599</td>\n", | |
| " <td>24.84</td>\n", | |
| " <td>13.15</td>\n", | |
| " <td>13.20</td>\n", | |
| " <td>0.5481</td>\n", | |
| " <td>1</td>\n", | |
| " <td>24.600</td>\n", | |
| " <td>1</td>\n", | |
| " <td></td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>...</th>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>235</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-12-24</td>\n", | |
| " <td>560</td>\n", | |
| " <td>33.06</td>\n", | |
| " <td>31.70</td>\n", | |
| " <td>33.00</td>\n", | |
| " <td>0.4021</td>\n", | |
| " <td>1</td>\n", | |
| " <td>33.308</td>\n", | |
| " <td>0</td>\n", | |
| " <td>Buy</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>236</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-12-25</td>\n", | |
| " <td>36469</td>\n", | |
| " <td>33.82</td>\n", | |
| " <td>33.00</td>\n", | |
| " <td>34.75</td>\n", | |
| " <td>0.3581</td>\n", | |
| " <td>1</td>\n", | |
| " <td>33.348</td>\n", | |
| " <td>1</td>\n", | |
| " <td></td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>237</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-12-28</td>\n", | |
| " <td>6982</td>\n", | |
| " <td>33.96</td>\n", | |
| " <td>34.75</td>\n", | |
| " <td>39.00</td>\n", | |
| " <td>1.0582</td>\n", | |
| " <td>1</td>\n", | |
| " <td>33.408</td>\n", | |
| " <td>1</td>\n", | |
| " <td></td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>238</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-12-29</td>\n", | |
| " <td>-69663</td>\n", | |
| " <td>32.52</td>\n", | |
| " <td>39.00</td>\n", | |
| " <td>38.00</td>\n", | |
| " <td>-0.0761</td>\n", | |
| " <td>0</td>\n", | |
| " <td>33.282</td>\n", | |
| " <td>0</td>\n", | |
| " <td></td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>239</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-12-30</td>\n", | |
| " <td>11001</td>\n", | |
| " <td>32.75</td>\n", | |
| " <td>38.00</td>\n", | |
| " <td>38.70</td>\n", | |
| " <td>1.4901</td>\n", | |
| " <td>1</td>\n", | |
| " <td>33.222</td>\n", | |
| " <td>0</td>\n", | |
| " <td>Sell</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "<p>240 rows × 11 columns</p>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " 證券名稱 年月日 合計買賣超(千股) 合計持股率% 開盤價(元) 次日開盤價 市場報酬率% 合計買賣超 \\\n", | |
| "0 2603 2020-01-08 -3970 24.39 12.75 12.75 -0.5322 0 \n", | |
| "1 2603 2020-01-09 1020 24.39 12.75 12.90 1.2992 1 \n", | |
| "2 2603 2020-01-10 12553 24.67 12.90 13.15 0.4514 1 \n", | |
| "3 2603 2020-01-13 1896 24.71 13.15 13.15 0.7382 1 \n", | |
| "4 2603 2020-01-14 6599 24.84 13.15 13.20 0.5481 1 \n", | |
| ".. ... ... ... ... ... ... ... ... \n", | |
| "235 2603 2020-12-24 560 33.06 31.70 33.00 0.4021 1 \n", | |
| "236 2603 2020-12-25 36469 33.82 33.00 34.75 0.3581 1 \n", | |
| "237 2603 2020-12-28 6982 33.96 34.75 39.00 1.0582 1 \n", | |
| "238 2603 2020-12-29 -69663 32.52 39.00 38.00 -0.0761 0 \n", | |
| "239 2603 2020-12-30 11001 32.75 38.00 38.70 1.4901 1 \n", | |
| "\n", | |
| " 持股率_5日MA 合計持股變化 訊號 \n", | |
| "0 24.476 0 \n", | |
| "1 24.468 0 Buy \n", | |
| "2 24.488 1 \n", | |
| "3 24.526 1 \n", | |
| "4 24.600 1 \n", | |
| ".. ... ... ... \n", | |
| "235 33.308 0 Buy \n", | |
| "236 33.348 1 \n", | |
| "237 33.408 1 \n", | |
| "238 33.282 0 \n", | |
| "239 33.222 0 Sell \n", | |
| "\n", | |
| "[240 rows x 11 columns]" | |
| ] | |
| }, | |
| "execution_count": 7, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "#設定訊號 \n", | |
| "evergreen['訊號'] = np.where((evergreen['合計買賣超'] == 1)&(evergreen['合計持股變化'] == 0), 'Buy', '') #買點\n", | |
| "evergreen['訊號'] = np.where((evergreen['合計買賣超'] == 0)&(evergreen['合計持股變化'] == 1), 'Sell', evergreen['訊號']) #賣點\n", | |
| "evergreen['訊號'][len(evergreen)-1] = 'Sell'\n", | |
| "evergreen" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 8, | |
| "metadata": { | |
| "scrolled": true | |
| }, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>證券名稱</th>\n", | |
| " <th>年月日</th>\n", | |
| " <th>合計買賣超(千股)</th>\n", | |
| " <th>合計持股率%</th>\n", | |
| " <th>開盤價(元)</th>\n", | |
| " <th>次日開盤價</th>\n", | |
| " <th>市場報酬率%</th>\n", | |
| " <th>合計買賣超</th>\n", | |
| " <th>持股率_5日MA</th>\n", | |
| " <th>合計持股變化</th>\n", | |
| " <th>訊號</th>\n", | |
| " <th>籌碼面報酬率(%)</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-01-08</td>\n", | |
| " <td>-3970</td>\n", | |
| " <td>24.39</td>\n", | |
| " <td>12.75</td>\n", | |
| " <td>12.75</td>\n", | |
| " <td>-0.5322</td>\n", | |
| " <td>0</td>\n", | |
| " <td>24.476</td>\n", | |
| " <td>0</td>\n", | |
| " <td></td>\n", | |
| " <td>0.000000</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-01-09</td>\n", | |
| " <td>1020</td>\n", | |
| " <td>24.39</td>\n", | |
| " <td>12.75</td>\n", | |
| " <td>12.90</td>\n", | |
| " <td>1.2992</td>\n", | |
| " <td>1</td>\n", | |
| " <td>24.468</td>\n", | |
| " <td>0</td>\n", | |
| " <td>Buy</td>\n", | |
| " <td>0.000000</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-01-10</td>\n", | |
| " <td>12553</td>\n", | |
| " <td>24.67</td>\n", | |
| " <td>12.90</td>\n", | |
| " <td>13.15</td>\n", | |
| " <td>0.4514</td>\n", | |
| " <td>1</td>\n", | |
| " <td>24.488</td>\n", | |
| " <td>1</td>\n", | |
| " <td></td>\n", | |
| " <td>0.000000</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-01-13</td>\n", | |
| " <td>1896</td>\n", | |
| " <td>24.71</td>\n", | |
| " <td>13.15</td>\n", | |
| " <td>13.15</td>\n", | |
| " <td>0.7382</td>\n", | |
| " <td>1</td>\n", | |
| " <td>24.526</td>\n", | |
| " <td>1</td>\n", | |
| " <td></td>\n", | |
| " <td>0.000000</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-01-14</td>\n", | |
| " <td>6599</td>\n", | |
| " <td>24.84</td>\n", | |
| " <td>13.15</td>\n", | |
| " <td>13.20</td>\n", | |
| " <td>0.5481</td>\n", | |
| " <td>1</td>\n", | |
| " <td>24.600</td>\n", | |
| " <td>1</td>\n", | |
| " <td></td>\n", | |
| " <td>0.000000</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>...</th>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>235</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-12-24</td>\n", | |
| " <td>560</td>\n", | |
| " <td>33.06</td>\n", | |
| " <td>31.70</td>\n", | |
| " <td>33.00</td>\n", | |
| " <td>0.4021</td>\n", | |
| " <td>1</td>\n", | |
| " <td>33.308</td>\n", | |
| " <td>0</td>\n", | |
| " <td>Buy</td>\n", | |
| " <td>0.000000</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>236</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-12-25</td>\n", | |
| " <td>36469</td>\n", | |
| " <td>33.82</td>\n", | |
| " <td>33.00</td>\n", | |
| " <td>34.75</td>\n", | |
| " <td>0.3581</td>\n", | |
| " <td>1</td>\n", | |
| " <td>33.348</td>\n", | |
| " <td>1</td>\n", | |
| " <td></td>\n", | |
| " <td>0.000000</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>237</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-12-28</td>\n", | |
| " <td>6982</td>\n", | |
| " <td>33.96</td>\n", | |
| " <td>34.75</td>\n", | |
| " <td>39.00</td>\n", | |
| " <td>1.0582</td>\n", | |
| " <td>1</td>\n", | |
| " <td>33.408</td>\n", | |
| " <td>1</td>\n", | |
| " <td></td>\n", | |
| " <td>0.000000</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>238</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-12-29</td>\n", | |
| " <td>-69663</td>\n", | |
| " <td>32.52</td>\n", | |
| " <td>39.00</td>\n", | |
| " <td>38.00</td>\n", | |
| " <td>-0.0761</td>\n", | |
| " <td>0</td>\n", | |
| " <td>33.282</td>\n", | |
| " <td>0</td>\n", | |
| " <td></td>\n", | |
| " <td>0.000000</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>239</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-12-30</td>\n", | |
| " <td>11001</td>\n", | |
| " <td>32.75</td>\n", | |
| " <td>38.00</td>\n", | |
| " <td>38.70</td>\n", | |
| " <td>1.4901</td>\n", | |
| " <td>1</td>\n", | |
| " <td>33.222</td>\n", | |
| " <td>0</td>\n", | |
| " <td>Sell</td>\n", | |
| " <td>15.348204</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "<p>240 rows × 12 columns</p>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " 證券名稱 年月日 合計買賣超(千股) 合計持股率% 開盤價(元) 次日開盤價 市場報酬率% 合計買賣超 \\\n", | |
| "0 2603 2020-01-08 -3970 24.39 12.75 12.75 -0.5322 0 \n", | |
| "1 2603 2020-01-09 1020 24.39 12.75 12.90 1.2992 1 \n", | |
| "2 2603 2020-01-10 12553 24.67 12.90 13.15 0.4514 1 \n", | |
| "3 2603 2020-01-13 1896 24.71 13.15 13.15 0.7382 1 \n", | |
| "4 2603 2020-01-14 6599 24.84 13.15 13.20 0.5481 1 \n", | |
| ".. ... ... ... ... ... ... ... ... \n", | |
| "235 2603 2020-12-24 560 33.06 31.70 33.00 0.4021 1 \n", | |
| "236 2603 2020-12-25 36469 33.82 33.00 34.75 0.3581 1 \n", | |
| "237 2603 2020-12-28 6982 33.96 34.75 39.00 1.0582 1 \n", | |
| "238 2603 2020-12-29 -69663 32.52 39.00 38.00 -0.0761 0 \n", | |
| "239 2603 2020-12-30 11001 32.75 38.00 38.70 1.4901 1 \n", | |
| "\n", | |
| " 持股率_5日MA 合計持股變化 訊號 籌碼面報酬率(%) \n", | |
| "0 24.476 0 0.000000 \n", | |
| "1 24.468 0 Buy 0.000000 \n", | |
| "2 24.488 1 0.000000 \n", | |
| "3 24.526 1 0.000000 \n", | |
| "4 24.600 1 0.000000 \n", | |
| ".. ... ... ... ... \n", | |
| "235 33.308 0 Buy 0.000000 \n", | |
| "236 33.348 1 0.000000 \n", | |
| "237 33.408 1 0.000000 \n", | |
| "238 33.282 0 0.000000 \n", | |
| "239 33.222 0 Sell 15.348204 \n", | |
| "\n", | |
| "[240 rows x 12 columns]" | |
| ] | |
| }, | |
| "execution_count": 8, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "hold = 0\n", | |
| "cost = 0\n", | |
| "Return = []\n", | |
| "for i in range(len(evergreen)):\n", | |
| " if evergreen['訊號'][i] == '':\n", | |
| " Return.append(0)\n", | |
| " elif evergreen['訊號'][i] == 'Buy':\n", | |
| " if hold == 0:\n", | |
| " cost = evergreen['次日開盤價'][i]\n", | |
| " hold = 1\n", | |
| " Return.append(0)\n", | |
| " else:\n", | |
| " Return.append(0)\n", | |
| " elif evergreen['訊號'][i] == 'Sell':\n", | |
| " if hold == 1:\n", | |
| " Return.append(100*(np.log(evergreen['次日開盤價'][i]/cost)- 0.001425*2 - 0.003))\n", | |
| " hold = 0\n", | |
| " else:\n", | |
| " Return.append(0)\n", | |
| "evergreen['籌碼面報酬率(%)'] = Return\n", | |
| "evergreen" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 11, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>證券名稱</th>\n", | |
| " <th>年月日</th>\n", | |
| " <th>合計買賣超(千股)</th>\n", | |
| " <th>合計持股率%</th>\n", | |
| " <th>開盤價(元)</th>\n", | |
| " <th>次日開盤價</th>\n", | |
| " <th>市場報酬率%</th>\n", | |
| " <th>合計買賣超</th>\n", | |
| " <th>持股率_5日MA</th>\n", | |
| " <th>合計持股變化</th>\n", | |
| " <th>訊號</th>\n", | |
| " <th>籌碼面報酬率(%)</th>\n", | |
| " <th>籌碼累積報酬率</th>\n", | |
| " <th>市場累積報酬率</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-01-08</td>\n", | |
| " <td>-3970</td>\n", | |
| " <td>24.39</td>\n", | |
| " <td>12.75</td>\n", | |
| " <td>12.75</td>\n", | |
| " <td>-0.5322</td>\n", | |
| " <td>0</td>\n", | |
| " <td>24.476</td>\n", | |
| " <td>0</td>\n", | |
| " <td></td>\n", | |
| " <td>0.000000</td>\n", | |
| " <td>1.000000</td>\n", | |
| " <td>0.994678</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-01-09</td>\n", | |
| " <td>1020</td>\n", | |
| " <td>24.39</td>\n", | |
| " <td>12.75</td>\n", | |
| " <td>12.90</td>\n", | |
| " <td>1.2992</td>\n", | |
| " <td>1</td>\n", | |
| " <td>24.468</td>\n", | |
| " <td>0</td>\n", | |
| " <td>Buy</td>\n", | |
| " <td>0.000000</td>\n", | |
| " <td>1.000000</td>\n", | |
| " <td>1.007601</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-01-10</td>\n", | |
| " <td>12553</td>\n", | |
| " <td>24.67</td>\n", | |
| " <td>12.90</td>\n", | |
| " <td>13.15</td>\n", | |
| " <td>0.4514</td>\n", | |
| " <td>1</td>\n", | |
| " <td>24.488</td>\n", | |
| " <td>1</td>\n", | |
| " <td></td>\n", | |
| " <td>0.000000</td>\n", | |
| " <td>1.000000</td>\n", | |
| " <td>1.012149</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-01-13</td>\n", | |
| " <td>1896</td>\n", | |
| " <td>24.71</td>\n", | |
| " <td>13.15</td>\n", | |
| " <td>13.15</td>\n", | |
| " <td>0.7382</td>\n", | |
| " <td>1</td>\n", | |
| " <td>24.526</td>\n", | |
| " <td>1</td>\n", | |
| " <td></td>\n", | |
| " <td>0.000000</td>\n", | |
| " <td>1.000000</td>\n", | |
| " <td>1.019621</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-01-14</td>\n", | |
| " <td>6599</td>\n", | |
| " <td>24.84</td>\n", | |
| " <td>13.15</td>\n", | |
| " <td>13.20</td>\n", | |
| " <td>0.5481</td>\n", | |
| " <td>1</td>\n", | |
| " <td>24.600</td>\n", | |
| " <td>1</td>\n", | |
| " <td></td>\n", | |
| " <td>0.000000</td>\n", | |
| " <td>1.000000</td>\n", | |
| " <td>1.025209</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>...</th>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " <td>...</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>235</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-12-24</td>\n", | |
| " <td>560</td>\n", | |
| " <td>33.06</td>\n", | |
| " <td>31.70</td>\n", | |
| " <td>33.00</td>\n", | |
| " <td>0.4021</td>\n", | |
| " <td>1</td>\n", | |
| " <td>33.308</td>\n", | |
| " <td>0</td>\n", | |
| " <td>Buy</td>\n", | |
| " <td>0.000000</td>\n", | |
| " <td>1.945133</td>\n", | |
| " <td>1.244314</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>236</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-12-25</td>\n", | |
| " <td>36469</td>\n", | |
| " <td>33.82</td>\n", | |
| " <td>33.00</td>\n", | |
| " <td>34.75</td>\n", | |
| " <td>0.3581</td>\n", | |
| " <td>1</td>\n", | |
| " <td>33.348</td>\n", | |
| " <td>1</td>\n", | |
| " <td></td>\n", | |
| " <td>0.000000</td>\n", | |
| " <td>1.945133</td>\n", | |
| " <td>1.248770</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>237</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-12-28</td>\n", | |
| " <td>6982</td>\n", | |
| " <td>33.96</td>\n", | |
| " <td>34.75</td>\n", | |
| " <td>39.00</td>\n", | |
| " <td>1.0582</td>\n", | |
| " <td>1</td>\n", | |
| " <td>33.408</td>\n", | |
| " <td>1</td>\n", | |
| " <td></td>\n", | |
| " <td>0.000000</td>\n", | |
| " <td>1.945133</td>\n", | |
| " <td>1.261985</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>238</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-12-29</td>\n", | |
| " <td>-69663</td>\n", | |
| " <td>32.52</td>\n", | |
| " <td>39.00</td>\n", | |
| " <td>38.00</td>\n", | |
| " <td>-0.0761</td>\n", | |
| " <td>0</td>\n", | |
| " <td>33.282</td>\n", | |
| " <td>0</td>\n", | |
| " <td></td>\n", | |
| " <td>0.000000</td>\n", | |
| " <td>1.945133</td>\n", | |
| " <td>1.261024</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>239</th>\n", | |
| " <td>2603</td>\n", | |
| " <td>2020-12-30</td>\n", | |
| " <td>11001</td>\n", | |
| " <td>32.75</td>\n", | |
| " <td>38.00</td>\n", | |
| " <td>38.70</td>\n", | |
| " <td>1.4901</td>\n", | |
| " <td>1</td>\n", | |
| " <td>33.222</td>\n", | |
| " <td>0</td>\n", | |
| " <td>Sell</td>\n", | |
| " <td>15.348204</td>\n", | |
| " <td>2.243675</td>\n", | |
| " <td>1.279815</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "<p>240 rows × 14 columns</p>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " 證券名稱 年月日 合計買賣超(千股) 合計持股率% 開盤價(元) 次日開盤價 市場報酬率% 合計買賣超 \\\n", | |
| "0 2603 2020-01-08 -3970 24.39 12.75 12.75 -0.5322 0 \n", | |
| "1 2603 2020-01-09 1020 24.39 12.75 12.90 1.2992 1 \n", | |
| "2 2603 2020-01-10 12553 24.67 12.90 13.15 0.4514 1 \n", | |
| "3 2603 2020-01-13 1896 24.71 13.15 13.15 0.7382 1 \n", | |
| "4 2603 2020-01-14 6599 24.84 13.15 13.20 0.5481 1 \n", | |
| ".. ... ... ... ... ... ... ... ... \n", | |
| "235 2603 2020-12-24 560 33.06 31.70 33.00 0.4021 1 \n", | |
| "236 2603 2020-12-25 36469 33.82 33.00 34.75 0.3581 1 \n", | |
| "237 2603 2020-12-28 6982 33.96 34.75 39.00 1.0582 1 \n", | |
| "238 2603 2020-12-29 -69663 32.52 39.00 38.00 -0.0761 0 \n", | |
| "239 2603 2020-12-30 11001 32.75 38.00 38.70 1.4901 1 \n", | |
| "\n", | |
| " 持股率_5日MA 合計持股變化 訊號 籌碼面報酬率(%) 籌碼累積報酬率 市場累積報酬率 \n", | |
| "0 24.476 0 0.000000 1.000000 0.994678 \n", | |
| "1 24.468 0 Buy 0.000000 1.000000 1.007601 \n", | |
| "2 24.488 1 0.000000 1.000000 1.012149 \n", | |
| "3 24.526 1 0.000000 1.000000 1.019621 \n", | |
| "4 24.600 1 0.000000 1.000000 1.025209 \n", | |
| ".. ... ... ... ... ... ... \n", | |
| "235 33.308 0 Buy 0.000000 1.945133 1.244314 \n", | |
| "236 33.348 1 0.000000 1.945133 1.248770 \n", | |
| "237 33.408 1 0.000000 1.945133 1.261985 \n", | |
| "238 33.282 0 0.000000 1.945133 1.261024 \n", | |
| "239 33.222 0 Sell 15.348204 2.243675 1.279815 \n", | |
| "\n", | |
| "[240 rows x 14 columns]" | |
| ] | |
| }, | |
| "execution_count": 11, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "evergreen['籌碼累積報酬率'] = evergreen['籌碼面報酬率(%)'].apply(lambda x: 0.01*x+1).cumprod()\n", | |
| "evergreen['市場累積報酬率'] = evergreen['市場報酬率%'].apply(lambda x: 0.01*x+1).cumprod()\n", | |
| "evergreen" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 9, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "image/png": "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\n", | |
| "text/plain": [ | |
| "<Figure size 432x288 with 1 Axes>" | |
| ] | |
| }, | |
| "metadata": { | |
| "needs_background": "light" | |
| }, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "plt.plot(evergreen['年月日'], evergreen['籌碼累積報酬率'], label = 'strategy')\n", | |
| "plt.plot(evergreen['年月日'], evergreen['市場累積報酬率'], label = 'market')\n", | |
| "plt.legend()\n", | |
| "plt.show()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 12, | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>籌碼面</th>\n", | |
| " <th>市場</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>年化報酬(%)</th>\n", | |
| " <td>133.618932</td>\n", | |
| " <td>29.570016</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>年化標準差(%)</th>\n", | |
| " <td>43.667737</td>\n", | |
| " <td>21.373507</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>夏普比率</th>\n", | |
| " <td>3.037000</td>\n", | |
| " <td>1.336702</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " 籌碼面 市場\n", | |
| "年化報酬(%) 133.618932 29.570016\n", | |
| "年化標準差(%) 43.667737 21.373507\n", | |
| "夏普比率 3.037000 1.336702" | |
| ] | |
| }, | |
| "execution_count": 12, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "cagr = [100*(evergreen['籌碼累積報酬率'].values[-1]**(252/len(evergreen)) - 1), 100*(evergreen['市場累積報酬率'].values[-1]**(252/len(evergreen)) - 1)]\n", | |
| "std = [evergreen['籌碼面報酬率(%)'].std()*(252**0.5),evergreen['市場報酬率%'].std()*(252**0.5)]\n", | |
| "sharpe_ratio = [(cagr[0] - 1)/std[0],(cagr[1] - 1)/std[1]] #設rf = 1%\n", | |
| "result = pd.DataFrame([cagr,std,sharpe_ratio], columns = ['籌碼面','市場'], index = ['年化報酬(%)','年化標準差(%)','夏普比率'])\n", | |
| "result" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": null, | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [] | |
| } | |
| ], | |
| "metadata": { | |
| "kernelspec": { | |
| "display_name": "Python 3", | |
| "language": "python", | |
| "name": "python3" | |
| }, | |
| "language_info": { | |
| "codemirror_mode": { | |
| "name": "ipython", | |
| "version": 3 | |
| }, | |
| "file_extension": ".py", | |
| "mimetype": "text/x-python", | |
| "name": "python", | |
| "nbconvert_exporter": "python", | |
| "pygments_lexer": "ipython3", | |
| "version": "3.8.5" | |
| } | |
| }, | |
| "nbformat": 4, | |
| "nbformat_minor": 4 | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment