chore: 添加Stock-Prediction-Models项目文件

添加了Stock-Prediction-Models项目的多个文件,包括数据集、模型代码、README文档和CSS样式文件。这些文件用于股票预测模型的训练和展示,涵盖了LSTM、GRU等深度学习模型的应用。
This commit is contained in:
zhoujie committed 2025-04-27 16:28:06 +08:00
1 parent f57150dae8
commit 2757a4d0d2
200 files changed
+79402

No files matched your search

@@ -0,0 +1,260 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"from tqdm import tqdm\n",
"sns.set()"
]
},
{
"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>Date</th>\n",
" <th>Open</th>\n",
" <th>High</th>\n",
" <th>Low</th>\n",
" <th>Close</th>\n",
" <th>Adj Close</th>\n",
" <th>Volume</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2018-03-23</td>\n",
" <td>311.250000</td>\n",
" <td>311.250000</td>\n",
" <td>300.450012</td>\n",
" <td>301.540009</td>\n",
" <td>301.540009</td>\n",
" <td>6654900</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2018-03-26</td>\n",
" <td>307.339996</td>\n",
" <td>307.589996</td>\n",
" <td>291.359985</td>\n",
" <td>304.179993</td>\n",
" <td>304.179993</td>\n",
" <td>8375200</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2018-03-27</td>\n",
" <td>304.000000</td>\n",
" <td>304.269989</td>\n",
" <td>277.179993</td>\n",
" <td>279.179993</td>\n",
" <td>279.179993</td>\n",
" <td>13872000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2018-03-28</td>\n",
" <td>264.579987</td>\n",
" <td>268.679993</td>\n",
" <td>252.100006</td>\n",
" <td>257.779999</td>\n",
" <td>257.779999</td>\n",
" <td>21001400</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2018-03-29</td>\n",
" <td>256.489990</td>\n",
" <td>270.959991</td>\n",
" <td>248.210007</td>\n",
" <td>266.130005</td>\n",
" <td>266.130005</td>\n",
" <td>15170700</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Date Open High Low Close Adj Close \\\n",
"0 2018-03-23 311.250000 311.250000 300.450012 301.540009 301.540009 \n",
"1 2018-03-26 307.339996 307.589996 291.359985 304.179993 304.179993 \n",
"2 2018-03-27 304.000000 304.269989 277.179993 279.179993 279.179993 \n",
"3 2018-03-28 264.579987 268.679993 252.100006 257.779999 257.779999 \n",
"4 2018-03-29 256.489990 270.959991 248.210007 266.130005 266.130005 \n",
"\n",
" Volume \n",
"0 6654900 \n",
"1 8375200 \n",
"2 13872000 \n",
"3 21001400 \n",
"4 15170700 "
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.read_csv('../dataset/TSLA.csv')\n",
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 100/100 [00:00<00:00, 104.14it/s]\n"
]
}
],
"source": [
"number_simulation = 100\n",
"predict_day = 30\n",
"\n",
"close = df['Close'].tolist()\n",
"returns = pd.DataFrame(close).pct_change()\n",
"last_price = close[-1]\n",
"results = pd.DataFrame()\n",
"avg_daily_ret = returns.mean()\n",
"variance = returns.var()\n",
"daily_vol = returns.std()\n",
"daily_drift = avg_daily_ret - (variance / 2)\n",
"drift = daily_drift - 0.5 * daily_vol ** 2\n",
"\n",
"results = pd.DataFrame()\n",
"\n",
"for i in tqdm(range(number_simulation)):\n",
" prices = []\n",
" prices.append(df.Close.iloc[-1])\n",
" for d in range(predict_day):\n",
" shock = [drift + daily_vol * np.random.normal()]\n",
" shock = np.mean(shock)\n",
" price = prices[-1] * np.exp(shock)\n",
" prices.append(price)\n",
" results[i] = prices"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(10,5))\n",
"plt.plot(results)\n",
"plt.ylabel('Value')\n",
"plt.xlabel('Simulated days')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 1224x360 with 3 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"raveled = results.values.ravel()\n",
"raveled.sort()\n",
"cp_raveled = raveled.copy()\n",
"\n",
"plt.figure(figsize=(17,5))\n",
"plt.subplot(1,3,1)\n",
"plt.plot(results)\n",
"plt.ylabel('Value')\n",
"plt.xlabel('Simulated days')\n",
"plt.subplot(1,3,2)\n",
"sns.distplot(df.Close,norm_hist=True)\n",
"plt.title('$\\mu$ = %.2f, $\\sigma$ = %.2f'%(df.Close.mean(),df.Close.std()))\n",
"plt.subplot(1,3,3)\n",
"sns.distplot(raveled,norm_hist=True,label='monte carlo samples')\n",
"sns.distplot(df.Close,norm_hist=True,label='real samples')\n",
"plt.title('simulation $\\mu$ = %.2f, $\\sigma$ = %.2f'%(raveled.mean(),raveled.std()))\n",
"plt.legend()\n",
"plt.show()"
]
}
],
"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.6.8"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
@@ -0,0 +1,268 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"from tqdm import tqdm\n",
"sns.set()"
]
},
{
"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>Date</th>\n",
" <th>Open</th>\n",
" <th>High</th>\n",
" <th>Low</th>\n",
" <th>Close</th>\n",
" <th>Adj Close</th>\n",
" <th>Volume</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2018-03-23</td>\n",
" <td>311.250000</td>\n",
" <td>311.250000</td>\n",
" <td>300.450012</td>\n",
" <td>301.540009</td>\n",
" <td>301.540009</td>\n",
" <td>6654900</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2018-03-26</td>\n",
" <td>307.339996</td>\n",
" <td>307.589996</td>\n",
" <td>291.359985</td>\n",
" <td>304.179993</td>\n",
" <td>304.179993</td>\n",
" <td>8375200</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2018-03-27</td>\n",
" <td>304.000000</td>\n",
" <td>304.269989</td>\n",
" <td>277.179993</td>\n",
" <td>279.179993</td>\n",
" <td>279.179993</td>\n",
" <td>13872000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2018-03-28</td>\n",
" <td>264.579987</td>\n",
" <td>268.679993</td>\n",
" <td>252.100006</td>\n",
" <td>257.779999</td>\n",
" <td>257.779999</td>\n",
" <td>21001400</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2018-03-29</td>\n",
" <td>256.489990</td>\n",
" <td>270.959991</td>\n",
" <td>248.210007</td>\n",
" <td>266.130005</td>\n",
" <td>266.130005</td>\n",
" <td>15170700</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Date Open High Low Close Adj Close \\\n",
"0 2018-03-23 311.250000 311.250000 300.450012 301.540009 301.540009 \n",
"1 2018-03-26 307.339996 307.589996 291.359985 304.179993 304.179993 \n",
"2 2018-03-27 304.000000 304.269989 277.179993 279.179993 279.179993 \n",
"3 2018-03-28 264.579987 268.679993 252.100006 257.779999 257.779999 \n",
"4 2018-03-29 256.489990 270.959991 248.210007 266.130005 266.130005 \n",
"\n",
" Volume \n",
"0 6654900 \n",
"1 8375200 \n",
"2 13872000 \n",
"3 21001400 \n",
"4 15170700 "
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.read_csv('../dataset/TSLA.csv')\n",
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"def pct_change(x,period=1):\n",
" x = np.array(x)\n",
" return ((x[period:] - x[:-period]) / x[:-period])"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 100/100 [00:00<00:00, 689.32it/s]\n"
]
}
],
"source": [
"number_simulation = 100\n",
"predict_day = 30\n",
"\n",
"results = pd.DataFrame()\n",
"\n",
"for i in tqdm(range(number_simulation)):\n",
" prices = df.Close.values[-predict_day:].tolist()\n",
" volatility = pct_change(prices[-predict_day:]).std()\n",
" for d in range(predict_day):\n",
" prices.append(prices[-1] * (1 + np.random.normal(0, volatility)))\n",
" volatility = pct_change(prices[-predict_day:]).std()\n",
" results[i] = pd.Series(prices[-predict_day:]).values"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(10,5))\n",
"plt.plot(results)\n",
"plt.ylabel('Value')\n",
"plt.xlabel('Simulated days')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"scrolled": true
},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAA/IAAAFUCAYAAACHuAfiAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOzdd5gV1f348fftW9m+sJSluHDovRcbYCG2KHYQS6zRFGOJJjH+bDHxq4lRsRMElKixgij2QhEBAVHgUJa6C+yyvd0+vz/mLm6F7Y3P63n2YWfmzJnPzL17mDOnjMUwDIQQQgghhBBCCNE+WFs7ACGEEEIIIYQQQtSdVOSFEEIIIYQQQoh2RCryQgghhBBCCCFEOyIVeSGEEEIIIYQQoh2RirwQQgghhBBCCNGOSEVeCCGEEEIIIYRoR6QiL4QQQgghhBBCtCNSkRdCCCGEEEIIIdoRqcgLIYQQQghxglJK/aSUOrUZ8t2jlJrWiP2bJS4hOgp7awcghBBCiOqUUouAqUAkcAj4h9b6pQrbbwWuBoYAi7XWV1fYFg+8DJwBHAHu0Vq/doxjfQmMB/yhVRlaa9WQvFqaUsoFzAWmAfHALswYP6yQplcozQTAA/wP+J3W2l9DfsVVVoUDc7XWt4W2H/NzEaK90VoPau0YlFJ7gF9prT8tX9cW4mqIupRJoXSXAX8FUjHLkqu11t9U2N4X2Az8T2s96xjH+5Lay+86xdJamqH8rlP5XNdr29ZJi7wQQgjRNv0N6KW17gScBzyklBpVYXsm8BAwr4Z9nwG8QGfgSuBZpdTxbopv1VpHhX5UI/NqSXZgP3AKEAP8GXgjdPNXbi6QBaQAw0Npb6kpswrXIAroApQBb1ZIcrzPRQhxYjtumaSUmg78HbgGiAZOBtKr5PMMsLaOx6yt/K5L+diamrT8pu7lc32ubZslLfJCCCFEPSml/gT00FrfFFqOw7zRiNZau5viGFrrnyosGqGfk4D1oe1vh449GuheIbZI4CJgsNa6GFihlHofmA38sT4xNEVeSikHcD/mQ4Bu/HzvsVlrPbQ+8dREa10Syr/cUqXUbmAUsCe0rjfwdOizOaSU+gioy8OIizA/16OtZMf7XIRoq5RSdwO/ATphPgi8RWv9WcXW8NDvz2D+jZ8E/Be4F5gPTAbWABdrrfNCeRpAX631ztDyfOCA1vrPNRz/j8D1QDJm5e1PWut3lFILMVullyilAsADWut/VIlrAPAsZkUuA7PV9v1QvnuAp4GrgJ7AR8Cc2sri5i6/61gm/b/QeX4bWs6oEuNlQD6wCkhr5lhq1d7K77qUz011bdsCqcgLIYQQ9TcE+LLC8nBA13QTqJRainkDXJMVWutzajuIUmouZvf5cGADsKwOsfUD/Frr7RXWbcJsxTiWvymlHgU05g32l43Iq6KHQumnALnAe0AhcEfVhI25VhXy6ByKu+IN3b+Ay0JdUOOAs4G/1CH2OcACrbVR5RgN+VyEaDVKKQXcCozRWmeGWjxttSS/CJiOWU/YAIwArgO2Yn7Xf4NZEa2vXZjlwCHgYmCRUipNaz1bKTWFKl3rK8TuAJZg9j46A7OMeE8pNVprrUPJLgHOAtzASsy/z+dqiaNFyu8KeVQqk5RSNmA08L5SaicQBrwL3Km1LlNKdQIeAE4HfnW8/ENqKr+PG0sdtLvy+1jlcwOvbZslFXkhhBCi/oZg3lyUG45Zwa2mLjcvtdFa36KUug1zbOCpmOMDjycK80arogLM7pu1uRvYgtmF/jLMlrHhDczrKKVUNOZN/1Ct9f7QureAS7XWVbuRNupahfJ2AK8Cr2itt1XY9DVwA+a52IBXMG+cj5VXT8wb2OtqiLMhn4sQrSkAuICBSqlsrfWeY6R9Smt9GEAp9Q2QpbXeEFp+B3MMcr1prSsOUXldKXUPMBazcngs4zHLoke11kHg81Cl8XJ+bs39t9Y6MxTjEswyuTYtUn6HYqmpTOoMOICZmBVkH+Y1+DPwJ+BB4GWt9QHz+ctx1Vh+a6131SGWY8XeLsvv45TP9b22bZqMkRdCCCHqQSnlxOyq90OF1cOAjc1xPK11QGu9ArP7/M112KUYs+tsRZ2AomMcY43Wukhr7dFav4LZojWjIXlVcTKQrrXeUWFdHGaLXJNSSlmBhZg3s7dWWf8R8DbmBEiJoRj+fpwsZ2O2Iu2uaWMDPhchWk2o6/vvMCu+WUqp/yqlutaS/HCF38tqWI5qSAxKqauUUhuVUvlKqXxgMObf4/F0BfaHKvHl9mJ29S5XsUwprS3Gliy/ayuTMK8hmA9MDmqtjwBPADNCD1CnAf+s63GOUX7XJZZjabfld03lc0OubVsnLfJCCCFE/QzAnBW4FEApZcF86l/jTO5KqQ8xW11q8o3W+uw6HteOeQN6PNsBu1Kqb4UbsGHUvSslmOMKLU2QVxKQV74Qula/BJ6sKXFDr1Uo35cxW7pmaK19FTbHY46/fVpr7QE8Sqn/YHYZvesYsV8FPHqM7eXq+rkI0aq0+baJ10Ldi5/HrAzNbmS2pUBEheUuwIGqiUI9XF7EbM1frbUOKKU2YpYzYJY5tckEeiilrBUq86mY5VN9tUj5fawySWudp5Q6QOVzLv/9VKAXsC/UYhwF2JRSA7XWI+twfuV5lV/X45WPx9Key+9yFcvnU2n8tW1TpCIvhBBC1M9QIFkpdRLmDeafMCdY2lNT4npU1I9SSiVjjuFbitl6Mw2zG+nlFdLYMf8ft2HejIRhjmcvUUq9DTyglPoVZrfR84GJtRwrFhgHfIX5+qJLMVtifluXvEKTW6ErvP6ugh+BkaGWEI35qiUDeL2mWBpyrUKexbxBn6a1Lqu4QWt9JDR50s1Kqf/DvHmbQ+UWuUqUUhMxW/verLL+uJ+LEG1RaIx8N8zWWjfm97e2MfL1sRG4Qin1E+a4+lOAdTWki8T8288OxXMNZot8ucNAn1qOsQbzgcFdSqnHgUnAucCYBsTb7OV3SK1lUsh/gNtCE7f5gN9jlisvYE4wWO4OzMpnjb1+jlV+1yWWjlR+16F8rte1bQ+ka70QQghRP0OA5ZiTJe3E7GZ+APOGsKkYmDcXBzBbRP4P872571dI82fMm5U/ArNCv5fPFH0L5kQ/WcBi4OaKs/kqpT5USt0bWnRgtm5kY74n/jbgggoT3B0zL6AHZuWgGq31OuBhzMmG0jFb6+rTInRcoZa+GzEfMhxSShWHfq6skOxCzImwsjE/s/Ib56rXotwc4G2tddUhBHX5XIRoi1yYPUyOYHaNTgbuaYJ8f4tZqc7HnNm8xrHLWustwOPAasxK+xAqlxt/A/4c6nZ/R5V9vaFjnB2Kfy5wVV3Gedeg2cvvOpZJD2K+/mw75iSCG4CHtdalWutD5T+Yw5vcWuvsCvnXufyuQywdqfw+Zvlcl2vb3lgM41g9WYQQQghRUaj74Eta67daO5bWFhpvuglzMqQmu7kTQojmIOX3z6T8bv+ka70QQghRP0MwW1BOeKGWsgGtHYcQQtSRlN8hUn63f9K1XgghhKgjpVQcZpfUHcdLK4QQou2Q8lt0NNK1XgghhBBCCCGEaEc6cou8HXMmQhk+IIRoSlK2CCGEEEKIVtWRb0R7Ys5sOIUa3mcphBAN1B34BkgDdrVyLM3BhflKn4NAoJVjEUJ0HDYgBXOmbk8rx9LUpNwUQjSHY5abHbkinxL695tWjUII0VGl0DEr8mOQclMI0XymACtaO4gmJuWmEKI51VhuduSK/EGAvLwSgsG6zQOQkBBFTk5xswbVlCTe5tWe4m1PsUL7jtdqtRAXFwmhMqYDqnfZ2Va1t+9Zc5PrUZ1ck8qa83p08LKzUeVmR/geyjm0vvYeP8g5VHW8crMjV+QDAMGgUa9Ctb3duEq8zas9xdueYoUOEW9H7T7ZoLKzreoI59CU5HpUJ9eksha4Hh2x7Gx0udkRvodyDq2vvccPcg61qLHc7MiT3QkhhBBCCCGEEB2OVOSFEEIIIYQQQoh2pCN3rRdCCCGEEEKIBgkE/OTlZeP3e1s7lOPKyrISDAZbO4xGOZHPwW53EheXhM1W9+q5VOSFEEIIIYQQooq8vGzCwiKIjOyCxWJp7XCOyW634ve370rwiXoOhmFQUlJIXl42iYkpx9+h/Fj1DU4IIYQQQojmoJTqB7wCJAA5wFVa6x1V0tiAfwNnAQbwqNb6pdC2vwCXYU4O5QPu1VovD22LAP4DjAL8wB1a66XH2yZOXH6/t11U4kX7ZrFYiIzsRHFxfr32kzHyQgghhBCirXgOeEZr3Q94Bni+hjRXAmlAX2ACcL9Sqldo23fAGK31UOBa4HWlVHho2x1AodY6DTgXeEkpFVWHbeIEJpV40RIa8j2TirwQQgghhGh1SqlkYCSwOLRqMTBSKZVUJemlwIta66DWOht4F7gYQGu9XGtdGkr3A2DBbN0v3+/5ULodwDrg7DpsE0KINke61gshhBBCiLagB5ChtQ4AaK0DSqnM0PrsCulSgb0VlveF0lR1FbBLa32gDvvVNc9aJSQ0vAE/KSm6wfu2FR3xHLKyrNjtP7d7egMGbq+/yY8b5rTjtDW+5b9irA2xfv06/H4f48ZNaHQsDT3+U0/9k/nzX22V49fXAw/8lQEDBnDxxZdVWt/Qz8Fqtdbr70gq8kK0c74937P/rbcwOqVgTeqFLbE3tqReWFyRrR1am+f+KQuLxYJrYNXGHiGEEO2ZUuoU4EFgeksdMyenmGDQqPd+SUnRZGcXNUNELaejnkMwGKw0cVmZx8/arYeb/NhjBnTG6mpctawpJopbt24tZWVljBo1rlH5NITfbz4gMQzazYR3hmEQDBqV4m3M5xAMBit9B61WyzEfEEpFXoh2zAj68axejDXoI+jbh3/3uqPbLNFJ2JLMSr01sRe2pN5YnOHHyO3EYgSCuDcdxtkztrVDEaJLine truncated
"text/plain": [
"<Figure size 1224x360 with 3 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"raveled = results.values.ravel()\n",
"raveled.sort()\n",
"cp_raveled = raveled.copy()\n",
"\n",
"plt.figure(figsize=(17,5))\n",
"plt.subplot(1,3,1)\n",
"plt.plot(results)\n",
"plt.ylabel('Value')\n",
"plt.xlabel('Simulated days')\n",
"plt.subplot(1,3,2)\n",
"sns.distplot(df.Close,norm_hist=True)\n",
"plt.title('$\\mu$ = %.2f, $\\sigma$ = %.2f'%(df.Close.mean(),df.Close.std()))\n",
"plt.subplot(1,3,3)\n",
"sns.distplot(raveled,norm_hist=True,label='monte carlo samples')\n",
"sns.distplot(df.Close,norm_hist=True,label='real samples')\n",
"plt.title('simulation $\\mu$ = %.2f, $\\sigma$ = %.2f'%(raveled.mean(),raveled.std()))\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"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.6.8"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
@@ -0,0 +1,266 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"from tqdm import tqdm\n",
"sns.set()"
]
},
{
"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>Date</th>\n",
" <th>Open</th>\n",
" <th>High</th>\n",
" <th>Low</th>\n",
" <th>Close</th>\n",
" <th>Adj Close</th>\n",
" <th>Volume</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>2018-03-23</td>\n",
" <td>311.250000</td>\n",
" <td>311.250000</td>\n",
" <td>300.450012</td>\n",
" <td>301.540009</td>\n",
" <td>301.540009</td>\n",
" <td>6654900</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2018-03-26</td>\n",
" <td>307.339996</td>\n",
" <td>307.589996</td>\n",
" <td>291.359985</td>\n",
" <td>304.179993</td>\n",
" <td>304.179993</td>\n",
" <td>8375200</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2018-03-27</td>\n",
" <td>304.000000</td>\n",
" <td>304.269989</td>\n",
" <td>277.179993</td>\n",
" <td>279.179993</td>\n",
" <td>279.179993</td>\n",
" <td>13872000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>2018-03-28</td>\n",
" <td>264.579987</td>\n",
" <td>268.679993</td>\n",
" <td>252.100006</td>\n",
" <td>257.779999</td>\n",
" <td>257.779999</td>\n",
" <td>21001400</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>2018-03-29</td>\n",
" <td>256.489990</td>\n",
" <td>270.959991</td>\n",
" <td>248.210007</td>\n",
" <td>266.130005</td>\n",
" <td>266.130005</td>\n",
" <td>15170700</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Date Open High Low Close Adj Close \\\n",
"0 2018-03-23 311.250000 311.250000 300.450012 301.540009 301.540009 \n",
"1 2018-03-26 307.339996 307.589996 291.359985 304.179993 304.179993 \n",
"2 2018-03-27 304.000000 304.269989 277.179993 279.179993 279.179993 \n",
"3 2018-03-28 264.579987 268.679993 252.100006 257.779999 257.779999 \n",
"4 2018-03-29 256.489990 270.959991 248.210007 266.130005 266.130005 \n",
"\n",
" Volume \n",
"0 6654900 \n",
"1 8375200 \n",
"2 13872000 \n",
"3 21001400 \n",
"4 15170700 "
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df = pd.read_csv('../dataset/TSLA.csv')\n",
"df.head()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"def pct_change(x,period=1):\n",
" x = np.array(x)\n",
" return ((x[period:] - x[:-period]) / x[:-period])"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 100/100 [00:00<00:00, 1819.19it/s]\n"
]
}
],
"source": [
"number_simulation = 100\n",
"predict_day = 30\n",
"returns = df.Close.pct_change()\n",
"volatility = returns.std()\n",
"results = pd.DataFrame()\n",
"\n",
"for i in tqdm(range(number_simulation)):\n",
" prices = []\n",
" prices.append(df.Close.iloc[-1])\n",
" for d in range(predict_day):\n",
" prices.append(prices[d] * (1 + np.random.normal(0, volatility)))\n",
" results[i] = pd.Series(prices).values"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 720x360 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(10,5))\n",
"plt.plot(results)\n",
"plt.ylabel('Value')\n",
"plt.xlabel('Simulated days')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 1224x360 with 3 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"raveled = results.values.ravel()\n",
"raveled.sort()\n",
"cp_raveled = raveled.copy()\n",
"\n",
"plt.figure(figsize=(17,5))\n",
"plt.subplot(1,3,1)\n",
"plt.plot(results)\n",
"plt.ylabel('Value')\n",
"plt.xlabel('Simulated days')\n",
"plt.subplot(1,3,2)\n",
"sns.distplot(df.Close,norm_hist=True)\n",
"plt.title('$\\mu$ = %.2f, $\\sigma$ = %.2f'%(df.Close.mean(),df.Close.std()))\n",
"plt.subplot(1,3,3)\n",
"sns.distplot(raveled,norm_hist=True,label='monte carlo samples')\n",
"sns.distplot(df.Close,norm_hist=True,label='real samples')\n",
"plt.title('simulation $\\mu$ = %.2f, $\\sigma$ = %.2f'%(raveled.mean(),raveled.std()))\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"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.6.8"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
@@ -0,0 +1,641 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"from tqdm import tqdm\n",
"import requests\n",
"sns.set()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Pull sentiment, fear greed and BTC/USDT data from bitcurate API.\n",
"\n",
"Can read more about this API at https://doc.api.bitcurate.com/"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"dict_keys(['momentum', 'sentiment', 'timestamp', 'volatility'])"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"r = requests.get('https://datascience.api.dev.bitcurate.com/social_sentiment?query=(BTC%20OR%20bitcoin)%20AND%20binance&before_date=8/15/2019%200:0')\n",
"sentiment = r.json()\n",
"sentiment.keys()"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"dict_keys(['fear', 'greed', 'label', 'timestamp'])"
]
},
"execution_count": 3,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"r = requests.get('https://datascience.api.dev.bitcurate.com/social_feargreed?query=(BTC%20OR%20bitcoin)%20AND%20binance&before_date=8/15/2019%200:0')\n",
"feargreed = r.json()\n",
"feargreed.keys()"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"dict_keys(['close', 'high', 'low', 'momentum', 'open', 'timestamp', 'volatility', 'volume'])"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"r = requests.get('https://datascience.api.dev.bitcurate.com/pair?before_date=8/15/2019%200:0&pair=BTC/USDT&exchange=binance')\n",
"btc = r.json()\n",
"btc.keys()"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/local/lib/python3.6/dist-packages/scipy/stats/stats.py:1706: FutureWarning: Using a non-tuple sequence for multidimensional indexing is deprecated; use `arr[tuple(seq)]` instead of `arr[seq]`. In the future this will be interpreted as an array index, `arr[np.array(seq)]`, which will result either in an error or a different result.\n",
" return np.add.reduce(sorted[indexer] * weights, axis=axis) / sumval\n"
]
},
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 1080x216 with 4 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(15,3))\n",
"plt.subplot(1,4,1)\n",
"sns.distplot(btc['close'])\n",
"plt.title('BTC/USDT histogram')\n",
"plt.subplot(1,4,2)\n",
"sns.distplot(sentiment['sentiment'])\n",
"plt.title('sentiment histogram')\n",
"plt.subplot(1,4,3)\n",
"sns.distplot(feargreed['fear'])\n",
"plt.title('fear histogram')\n",
"plt.subplot(1,4,4)\n",
"sns.distplot(feargreed['greed'])\n",
"plt.title('greed histogram')\n",
"plt.show()"
]
},
{
"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>momentum_x</th>\n",
" <th>sentiment</th>\n",
" <th>timestamp</th>\n",
" <th>volatility_x</th>\n",
" <th>close</th>\n",
" <th>high</th>\n",
" <th>low</th>\n",
" <th>momentum_y</th>\n",
" <th>open</th>\n",
" <th>volatility_y</th>\n",
" <th>volume</th>\n",
" <th>fear</th>\n",
" <th>greed</th>\n",
" <th>label</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1.726086</td>\n",
" <td>-0.305778</td>\n",
" <td>2019-08-15 00:00:00</td>\n",
" <td>70.186031</td>\n",
" <td>10142.664026</td>\n",
" <td>10854.806026</td>\n",
" <td>9928.099609</td>\n",
" <td>96.233277</td>\n",
" <td>10843.803747</td>\n",
" <td>0.005316</td>\n",
" <td>5.790672e+08</td>\n",
" <td>0.497674</td>\n",
" <td>0.502326</td>\n",
" <td>greed</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1.726086</td>\n",
" <td>0.184823</td>\n",
" <td>2019-08-15 01:00:00</td>\n",
" <td>70.186031</td>\n",
" <td>10086.199284</td>\n",
" <td>10739.315820</td>\n",
" <td>9928.099609</td>\n",
" <td>96.233277</td>\n",
" <td>10689.825716</td>\n",
" <td>0.005316</td>\n",
" <td>5.641456e+08</td>\n",
" <td>0.801826</td>\n",
" <td>0.198174</td>\n",
" <td>fear</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1.726086</td>\n",
" <td>0.726358</td>\n",
" <td>2019-08-15 02:00:00</td>\n",
" <td>70.186031</td>\n",
" <td>10095.049805</td>\n",
" <td>10712.450195</td>\n",
" <td>9928.099609</td>\n",
" <td>96.233277</td>\n",
" <td>10611.636387</td>\n",
" <td>0.005316</td>\n",
" <td>5.416016e+08</td>\n",
" <td>0.809082</td>\n",
" <td>0.190918</td>\n",
" <td>fear</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1.726086</td>\n",
" <td>0.100070</td>\n",
" <td>2019-08-15 03:00:00</td>\n",
" <td>70.186031</td>\n",
" <td>10095.049805</td>\n",
" <td>10697.000000</td>\n",
" <td>9928.099609</td>\n",
" <td>96.233277</td>\n",
" <td>10640.818994</td>\n",
" <td>0.005316</td>\n",
" <td>5.159930e+08</td>\n",
" <td>0.320567</td>\n",
" <td>0.679433</td>\n",
" <td>greed</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>1.726086</td>\n",
" <td>0.219240</td>\n",
" <td>2019-08-15 04:00:00</td>\n",
" <td>70.186031</td>\n",
" <td>10095.049805</td>\n",
" <td>10697.000000</td>\n",
" <td>9928.099609</td>\n",
" <td>96.233277</td>\n",
" <td>10642.563684</td>\n",
" <td>0.005316</td>\n",
" <td>5.106988e+08</td>\n",
" <td>0.381714</td>\n",
" <td>0.618286</td>\n",
" <td>greed</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" momentum_x sentiment timestamp volatility_x close \\\n",
"0 1.726086 -0.305778 2019-08-15 00:00:00 70.186031 10142.664026 \n",
"1 1.726086 0.184823 2019-08-15 01:00:00 70.186031 10086.199284 \n",
"2 1.726086 0.726358 2019-08-15 02:00:00 70.186031 10095.049805 \n",
"3 1.726086 0.100070 2019-08-15 03:00:00 70.186031 10095.049805 \n",
"4 1.726086 0.219240 2019-08-15 04:00:00 70.186031 10095.049805 \n",
"\n",
" high low momentum_y open volatility_y \\\n",
"0 10854.806026 9928.099609 96.233277 10843.803747 0.005316 \n",
"1 10739.315820 9928.099609 96.233277 10689.825716 0.005316 \n",
"2 10712.450195 9928.099609 96.233277 10611.636387 0.005316 \n",
"3 10697.000000 9928.099609 96.233277 10640.818994 0.005316 \n",
"4 10697.000000 9928.099609 96.233277 10642.563684 0.005316 \n",
"\n",
" volume fear greed label \n",
"0 5.790672e+08 0.497674 0.502326 greed \n",
"1 5.641456e+08 0.801826 0.198174 fear \n",
"2 5.416016e+08 0.809082 0.190918 fear \n",
"3 5.159930e+08 0.320567 0.679433 greed \n",
"4 5.106988e+08 0.381714 0.618286 greed "
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_sentiment = pd.DataFrame(sentiment)\n",
"df_btc = pd.DataFrame(btc)\n",
"df_feargreed = pd.DataFrame(feargreed)\n",
"merged = df_sentiment.merge(df_btc, on = 'timestamp')\n",
"merged = merged.merge(df_feargreed, on = 'timestamp')\n",
"merged.head()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Monte carlo simulation using sentiment and fear\n",
"\n",
"I want to simulate 30 hours ahead for 100 times. More simulation, more precise it will be."
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [],
"source": [
"number_simulation = 100\n",
"predict_hour = 30"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:3: RuntimeWarning: invalid value encountered in sqrt\n",
" This is separate from the ipykernel package so we can avoid doing imports until\n",
"100%|██████████| 100/100 [00:00<00:00, 1995.27it/s]\n"
]
}
],
"source": [
"v = merged[['sentiment', 'fear', 'close']].pct_change(1).dropna().values\n",
"variance = np.linalg.cholesky(np.cov(v.T))\n",
"daily_vol = np.sqrt(variance)\n",
"avg_daily_ret = np.mean(v,axis=0)\n",
"daily_drift = avg_daily_ret - (variance / 2)\n",
"drift = daily_drift - 0.5 * daily_vol ** 2\n",
"\n",
"results_close_fear = pd.DataFrame()\n",
"\n",
"for i in tqdm(range(number_simulation)):\n",
" prices = []\n",
" prices.append(merged['close'].iloc[-1])\n",
" for d in range(predict_hour):\n",
" shock = drift + daily_vol * np.random.normal()\n",
" price = prices[-1] * np.exp(shock)[-1,-1]\n",
" prices.append(price)\n",
" results_close_fear[i] = prices"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Monte carlo simulation using sentiment and greed"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/usr/local/lib/python3.6/dist-packages/ipykernel_launcher.py:5: RuntimeWarning: invalid value encountered in sqrt\n",
" \"\"\"\n",
"100%|██████████| 100/100 [00:00<00:00, 1956.93it/s]\n"
]
}
],
"source": [
"number_simulation = 100\n",
"predict_hour = 30\n",
"v = merged[['sentiment', 'greed', 'close']].pct_change(1).dropna().values\n",
"variance = np.linalg.cholesky(np.cov(v.T))\n",
"daily_vol = np.sqrt(variance)\n",
"avg_daily_ret = np.mean(v,axis=0)\n",
"daily_drift = avg_daily_ret - (variance / 2)\n",
"drift = daily_drift - 0.5 * daily_vol ** 2\n",
"\n",
"results_close_greed = pd.DataFrame()\n",
"\n",
"for i in tqdm(range(number_simulation)):\n",
" prices = []\n",
" prices.append(merged['close'].iloc[-1])\n",
" for d in range(predict_hour):\n",
" shock = drift + daily_vol * np.random.normal()\n",
" price = prices[-1] * np.exp(shock)[-1,-1]\n",
" prices.append(price)\n",
" results_close_greed[i] = prices"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Monte carlo simulation univariate\n",
"\n",
"**Just historical close volatility, univariate**."
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"100%|██████████| 100/100 [00:01<00:00, 79.04it/s]\n"
]
}
],
"source": [
"number_simulation = 100\n",
"predict_hour = 30\n",
"\n",
"close = merged['close'].tolist()\n",
"returns = pd.DataFrame(close).pct_change()\n",
"last_price = close[-1]\n",
"results = pd.DataFrame()\n",
"avg_daily_ret = returns.mean()\n",
"variance = returns.var()\n",
"daily_vol = returns.std()\n",
"daily_drift = avg_daily_ret - (variance / 2)\n",
"drift = daily_drift - 0.5 * daily_vol ** 2\n",
"\n",
"results = pd.DataFrame()\n",
"\n",
"for i in tqdm(range(number_simulation)):\n",
" prices = []\n",
" prices.append(merged['close'].iloc[-1])\n",
" for d in range(predict_hour):\n",
" shock = drift + daily_vol * np.random.normal()\n",
" price = prices[-1] * np.exp(shock)\n",
" prices.append(price[0])\n",
" results[i] = prices"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 1440x360 with 3 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize=(20,5))\n",
"plt.subplot(1,3,1)\n",
"plt.plot(results_close_fear)\n",
"plt.ylabel('Value')\n",
"plt.xlabel('Simulated hours')\n",
"plt.title('Monte Carlo BTC/USDT with sentiment & fear')\n",
"plt.subplot(1,3,2)\n",
"plt.plot(results_close_greed)\n",
"plt.ylabel('Value')\n",
"plt.xlabel('Simulated hours')\n",
"plt.title('Monte Carlo BTC/USDT with sentiment & greed')\n",
"plt.subplot(1,3,3)\n",
"plt.plot(results)\n",
"plt.ylabel('Value')\n",
"plt.xlabel('Simulated hours')\n",
"plt.title('Monte Carlo BTC/USDT')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Value-at-Risk"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"99% VaR for sentiment & fear: 3460.0421119349726\n",
"99% VaR for sentiment & greed: 3587.808611402619\n",
"99% VaR: 9061.239256181689\n"
]
}
],
"source": [
"price_array = results_close_fear.iloc[-1, :]\n",
"price_array = sorted(price_array, key = int)\n",
"var99 = np.percentile(price_array, 0.99)\n",
"print('99% VaR for sentiment & fear:', var99)\n",
"\n",
"price_array = results_close_greed.iloc[-1, :]\n",
"price_array = sorted(price_array, key = int)\n",
"var99 = np.percentile(price_array, 0.99)\n",
"print('99% VaR for sentiment & greed:', var99)\n",
"\n",
"price_array = results.iloc[-1, :]\n",
"price_array = sorted(price_array, key = int)\n",
"var99 = np.percentile(price_array, 0.99)\n",
"print('99% VaR:', var99)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"**If you observed from both `fear` and `greed` histograms, some of simulations dropped less than 5k of `BTC/USDT`. What is the probability going to happen for going less than 5k based on the monte carlo?**"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"probability < 5k for sentiment & fear 0.14\n",
"probability < 5k for sentiment & greed 0.09\n"
]
}
],
"source": [
"v = results_close_fear.iloc[-1, :].values\n",
"print('probability < 5k for sentiment & fear', v[v < 5000].shape[0] / number_simulation)\n",
"v = results_close_greed.iloc[-1, :].values\n",
"print('probability < 5k for sentiment & greed', v[v < 5000].shape[0] / number_simulation)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"I believe it is pretty reasonable why probability on `fear` is higher than `greed`, `fear` factors can caused bearish."
]
},
{
"cell_type": "code",
"execution_count": 14,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 1224x360 with 3 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"raveled = results.values.ravel()\n",
"raveled.sort()\n",
"cp_raveled = raveled.copy()\n",
"\n",
"raveled_close_fear = results_close_fear.values.ravel()\n",
"raveled_close_fear.sort()\n",
"cp_raveled_close_fear = raveled_close_fear.copy()\n",
"\n",
"raveled_close_greed = results_close_greed.values.ravel()\n",
"raveled_close_greed.sort()\n",
"cp_raveled_close_greed = raveled_close_greed.copy()\n",
"\n",
"plt.figure(figsize=(17,5))\n",
"plt.subplot(1,3,1)\n",
"plt.plot(results)\n",
"plt.ylabel('Value')\n",
"plt.xlabel('Simulated days')\n",
"plt.subplot(1,3,2)\n",
"sns.distplot(close,norm_hist=True)\n",
"plt.title('$\\mu$ = %.2f, $\\sigma$ = %.2f'%(np.mean(close),np.std(close)))\n",
"plt.subplot(1,3,3)\n",
"sns.distplot(raveled,norm_hist=True,label='univariate monte carlo samples')\n",
"sns.distplot(raveled_close_fear,norm_hist=True,label='multivariate monte carlo samples sentiment & fear')\n",
"sns.distplot(raveled_close_greed,norm_hist=True,label='multivariate monte carlo samples sentiment & greed')\n",
"sns.distplot(close,norm_hist=True,label='real samples')\n",
"plt.title('simulation $\\mu$ = %.2f, $\\sigma$ = %.2f'%(raveled.mean(),raveled.std()))\n",
"plt.legend()\n",
"plt.show()"
]
},
{
"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.6.8"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
@@ -0,0 +1,348 @@
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"sns.set()"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"['../dataset/AMD.csv',\n",
" '../dataset/FB.csv',\n",
" '../dataset/TSLA.csv',\n",
" '../dataset/TWTR.csv',\n",
" '../dataset/MONDY.csv']"
]
},
"execution_count": 2,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"directory = '../dataset/'\n",
"stocks = ['AMD.csv', 'FB.csv', 'TSLA.csv', 'TWTR.csv', 'MONDY.csv']\n",
"stocks = [directory + s for s in stocks]\n",
"stocks"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [],
"source": [
"dfs = [pd.read_csv(s)[['Date', 'Close']] for s in stocks]"
]
},
{
"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>Close_x</th>\n",
" <th>Close_y</th>\n",
" <th>Close_x</th>\n",
" <th>Close_y</th>\n",
" <th>Close</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>16.270000</td>\n",
" <td>207.320007</td>\n",
" <td>318.869995</td>\n",
" <td>44.490002</td>\n",
" <td>56.889999</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>16.580000</td>\n",
" <td>207.229996</td>\n",
" <td>310.100006</td>\n",
" <td>44.259998</td>\n",
" <td>56.639999</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>16.870001</td>\n",
" <td>209.990005</td>\n",
" <td>322.690002</td>\n",
" <td>44.709999</td>\n",
" <td>57.730000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>16.850000</td>\n",
" <td>209.360001</td>\n",
" <td>323.850006</td>\n",
" <td>43.340000</td>\n",
" <td>57.810001</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>16.709999</td>\n",
" <td>208.089996</td>\n",
" <td>320.230011</td>\n",
" <td>43.439999</td>\n",
" <td>52.380001</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Close_x Close_y Close_x Close_y Close\n",
"0 16.270000 207.320007 318.869995 44.490002 56.889999\n",
"1 16.580000 207.229996 310.100006 44.259998 56.639999\n",
"2 16.870001 209.990005 322.690002 44.709999 57.730000\n",
"3 16.850000 209.360001 323.850006 43.340000 57.810001\n",
"4 16.709999 208.089996 320.230011 43.439999 52.380001"
]
},
"execution_count": 4,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from functools import reduce\n",
"data = reduce(lambda left,right: pd.merge(left,right,on='Date'), dfs).iloc[:, 1:]\n",
"data.head()"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [],
"source": [
"returns = data.pct_change()\n",
"mean_daily_returns = returns.mean()\n",
"cov_matrix = returns.cov()"
]
},
{
"cell_type": "code",
"execution_count": 8,
"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>Close_x</th>\n",
" <th>Close_y</th>\n",
" <th>Close_x</th>\n",
" <th>Close_y</th>\n",
" <th>Close</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>Close_x</th>\n",
" <td>0.002342</td>\n",
" <td>0.000316</td>\n",
" <td>0.000368</td>\n",
" <td>0.000387</td>\n",
" <td>0.000215</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Close_y</th>\n",
" <td>0.000316</td>\n",
" <td>0.000694</td>\n",
" <td>0.000216</td>\n",
" <td>0.000463</td>\n",
" <td>0.000043</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Close_x</th>\n",
" <td>0.000368</td>\n",
" <td>0.000216</td>\n",
" <td>0.001643</td>\n",
" <td>0.000516</td>\n",
" <td>0.000004</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Close_y</th>\n",
" <td>0.000387</td>\n",
" <td>0.000463</td>\n",
" <td>0.000516</td>\n",
" <td>0.001240</td>\n",
" <td>0.000177</td>\n",
" </tr>\n",
" <tr>\n",
" <th>Close</th>\n",
" <td>0.000215</td>\n",
" <td>0.000043</td>\n",
" <td>0.000004</td>\n",
" <td>0.000177</td>\n",
" <td>0.000985</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Close_x Close_y Close_x Close_y Close\n",
"Close_x 0.002342 0.000316 0.000368 0.000387 0.000215\n",
"Close_y 0.000316 0.000694 0.000216 0.000463 0.000043\n",
"Close_x 0.000368 0.000216 0.001643 0.000516 0.000004\n",
"Close_y 0.000387 0.000463 0.000516 0.001240 0.000177\n",
"Close 0.000215 0.000043 0.000004 0.000177 0.000985"
]
},
"execution_count": 8,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"cov_matrix"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [],
"source": [
"num_portfolios = 25000\n",
"results = np.zeros((3,num_portfolios))"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"for i in range(num_portfolios):\n",
" weights = np.random.random(cov_matrix.shape[0])\n",
" weights /= np.sum(weights)\n",
" portfolio_return = np.sum(mean_daily_returns * weights) * 252\n",
" portfolio_std_dev = np.sqrt(np.dot(weights.T,np.dot(cov_matrix, weights))) * np.sqrt(252)\n",
" results[0,i] = portfolio_return\n",
" results[1,i] = portfolio_std_dev\n",
" results[2,i] = results[0,i] / results[1,i]"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [],
"source": [
"results_frame = pd.DataFrame(results.T,columns=['ret','stdev','sharpe'])"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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 truncated
"text/plain": [
"<Figure size 504x360 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"plt.figure(figsize = (7, 5))\n",
"plt.scatter(results_frame.stdev,results_frame.ret,c=results_frame.sharpe,cmap='RdYlBu')\n",
"plt.colorbar()\n",
"plt.xlabel('volatility')\n",
"plt.ylabel('returns')\n",
"plt.show()"
]
},
{
"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.6.8"
}
},
"nbformat": 4,
"nbformat_minor": 2
}