214 lines
22 KiB
Plaintext
214 lines
22 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 1,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import matplotlib.pyplot as plt\n",
|
|
"import numpy as np\n",
|
|
"import random\n",
|
|
"import math"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 43,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"##########################################\n",
|
|
"# This block is a literal translation of #\n",
|
|
"# src/math.ts #\n",
|
|
"##########################################\n",
|
|
"\n",
|
|
"# Computes the price at a specific reserve `R`\n",
|
|
"def getPriceR(R, V0, k):\n",
|
|
" return (k * R ** ((k - 1) / k)) / V0 ** (1 / k)\n",
|
|
"\n",
|
|
"# Compute slippage at a point `R`, given a `deltaR`\n",
|
|
"def getSlippage(R, deltaR, V0, k):\n",
|
|
" S = (V0 * R) ** (1 / k)\n",
|
|
" deltaS = (V0 * (R + deltaR)) ** (1 / k) - S\n",
|
|
" realizedPrice = deltaR / deltaS\n",
|
|
" spotPrice = getPriceR(R, V0, k)\n",
|
|
" return abs(realizedPrice - spotPrice) / spotPrice\n",
|
|
"\n",
|
|
"# Get deltaR for a given price growth factor\n",
|
|
"def getDeltaR_priceGrowth(R, k, priceGrowth):\n",
|
|
" return -R + (priceGrowth * R ** (1 - 1 / k)) ** (k / (-1 + k))\n",
|
|
"\n",
|
|
"# Computes a tx distribution using a normal distribution,\n",
|
|
"# Given a sum of tx value and a number of transactions\n",
|
|
"# Demo: https://codepen.io/anon/pen/mNqJjv?editors=0010#0\n",
|
|
"def getTxDistribution(_sum, num):\n",
|
|
" mean = _sum / num\n",
|
|
" off = mean * 4\n",
|
|
" x = []\n",
|
|
" for i in range(0, int(num)):\n",
|
|
" x.append(randn_bm(mean - off, mean + off))\n",
|
|
" return x\n",
|
|
"\n",
|
|
"# Random variable uniformly distributed\n",
|
|
"def rv_U(min, max):\n",
|
|
" return random.random() * (max - min) + min\n",
|
|
"\n",
|
|
"\n",
|
|
"# Standard Normal variate using Box-Muller transform.\n",
|
|
"# by https://stackoverflow.com/questions/25582882/javascript-math-random-normal-distribution-gaussian-bell-curve/36481059#36481059\n",
|
|
"def randn_bm(min, max):\n",
|
|
" u = 0\n",
|
|
" v = 0\n",
|
|
" while (u == 0):\n",
|
|
" u = random.random() # Converting [0,1) to (0,1)\n",
|
|
" while (v == 0):\n",
|
|
" v = random.random()\n",
|
|
" num = math.sqrt(-2.0 * math.log(u)) * math.cos(2.0 * math.pi * v)\n",
|
|
" \n",
|
|
" num = num / 10.0 + 0.5; # Translate to 0 -> 1\n",
|
|
" if (num > 1) or (num < 0):\n",
|
|
" num = randn_bm(min, max) # resample between 0 and 1 if out of range\n",
|
|
" num *= max - min # Stretch to fill range\n",
|
|
" num += min # offset to min\n",
|
|
" return num\n"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 46,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"##########################################\n",
|
|
"# This block represent the user choices #\n",
|
|
"# src/App.ts #\n",
|
|
"##########################################\n",
|
|
"\n",
|
|
"# Given data\n",
|
|
"d0 = 1e6\n",
|
|
"theta = 0.35\n",
|
|
"p0 = 0.1\n",
|
|
"p1 = 0.3\n",
|
|
"wFee = 0.05\n",
|
|
"\n",
|
|
"# Initial params\n",
|
|
"k = p1 / p0 / (1 - theta)\n",
|
|
"R0 = (1 - theta) * d0\n",
|
|
"S0 = d0 / p0\n",
|
|
"V0 = S0 ** k / R0"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 49,
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"##########################################\n",
|
|
"# Literal translation of the price walk #\n",
|
|
"# in src/App.ts #\n",
|
|
"##########################################\n",
|
|
"\n",
|
|
"# Price walk\n",
|
|
"R_t = [R0]\n",
|
|
"p_t = [getPriceR(R0, V0, k)]\n",
|
|
"wFee_t = [0]\n",
|
|
"slippage_t = []\n",
|
|
"avgTxSize_t = []\n",
|
|
"\n",
|
|
"numSteps = 52\n",
|
|
"\n",
|
|
"for t in range(0, numSteps):\n",
|
|
" txsWeek = rv_U(5, 2 * t + 5)\n",
|
|
" priceGrowth = rv_U(0.99, 1.03)\n",
|
|
"\n",
|
|
" R = R_t[-1]\n",
|
|
" deltaR = getDeltaR_priceGrowth(R, k, priceGrowth)\n",
|
|
"\n",
|
|
" R_next = R + deltaR\n",
|
|
" txs = getTxDistribution(deltaR, txsWeek)\n",
|
|
" # Compute slippage\n",
|
|
" slippage_txs = [getSlippage(R, txR, V0, k) for txR in txs]\n",
|
|
" slippage = np.mean(slippage_txs)\n",
|
|
" \n",
|
|
" txsWithdraw = filter(lambda tx: tx < 0, txs)\n",
|
|
" wFees = -wFee * sum(txsWithdraw)\n",
|
|
"\n",
|
|
" # Store variables\n",
|
|
" R_t.append(R_next)\n",
|
|
" p_t.append(getPriceR(R_next, V0, k))\n",
|
|
" slippage_t.append(slippage)\n",
|
|
" wFee_t.append(wFees)"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 56,
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"data": {
|
|
"text/plain": [
|
|
"Text(0, 0.5, 'Price')"
|
|
]
|
|
},
|
|
"execution_count": 56,
|
|
"metadata": {},
|
|
"output_type": "execute_result"
|
|
},
|
|
{
|
|
"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": [
|
|
"##########################################\n",
|
|
"# Same graph as the one showed after #\n",
|
|
"# clicking \"Run simulation\" #\n",
|
|
"##########################################\n",
|
|
"\n",
|
|
"plt.plot(p_t)\n",
|
|
"plt.xlabel('Weeks')\n",
|
|
"plt.ylabel('Price')"
|
|
]
|
|
},
|
|
{
|
|
"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.7"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 2
|
|
}
|