From 56a59df6233539df3213c57cb7ed36cb8cd4fa07 Mon Sep 17 00:00:00 2001 From: akira-zkdice Date: Wed, 24 Apr 2024 22:27:56 +0530 Subject: [PATCH] add Impermanent loss calculator python code --- analysis/uniV3Math.ipynb | 140 +++++++++++++++++++++++++++++++++++++++ analysis/v3IL.ipynb | 135 +++++++++++++++++++++++++++++++++++++ 2 files changed, 275 insertions(+) create mode 100755 analysis/uniV3Math.ipynb create mode 100755 analysis/v3IL.ipynb diff --git a/analysis/uniV3Math.ipynb b/analysis/uniV3Math.ipynb new file mode 100755 index 0000000..86caa6a --- /dev/null +++ b/analysis/uniV3Math.ipynb @@ -0,0 +1,140 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# Uniswap math functions\n", + "# https://youtu.be/_asFkMz4zhw?t=25 - Uniswap V3 - Liquidity | DeFi\n", + "\n", + "def get_liquidity_0(x, sp, sb):\n", + " return x * sp * sb / (sb - sp)\n", + "\n", + "def get_liquidity_1(y, sp, sa):\n", + " return y / (sp - sa)\n", + "\n", + "def get_liquidity(x, y, sp, sa, sb):\n", + " if sp <= sa:\n", + " liquidity = get_liquidity_0(x, sp, sb)\n", + " elif sp < sb:\n", + " liquidity0 = get_liquidity_0(x, sp, sb)\n", + " liquidity1 = get_liquidity_1(y, sp, sa)\n", + " liquidity = min(liquidity0, liquidity1)\n", + " else:\n", + " liquidity = get_liquidity_1(y, sp, sa)\n", + " return liquidity\n", + "\n", + "\n", + "#\n", + "# Calculate x and y given liquidity and price range\n", + "#\n", + "def calculate_x(L, sp, sa, sb):\n", + " sp = max(min(sp, sb), sa) # if the price is outside the range, use the range endpoints instead\n", + " return L * (sb - sp) / (sp * sb)\n", + "\n", + "def calculate_y(L, sp, sa, sb):\n", + " sp = max(min(sp, sb), sa) # if the price is outside the range, use the range endpoints instead\n", + " return L * (sp - sa)\n", + "\n", + "def calculate_a1(L, sp, sb, x, y):\n", + " # https://www.wolframalpha.com/input/?i=solve+L+%3D+y+%2F+%28sqrt%28P%29+-+a%29+for+a\n", + " # sqrt(a) = sqrt(P) - y / L\n", + " return (sp - y / L) ** 2\n", + "\n", + "def calculate_a2(sp, sb, x, y):\n", + " # https://www.wolframalpha.com/input/?i=solve+++x+sqrt%28P%29+sqrt%28b%29+%2F+%28sqrt%28b%29++-+sqrt%28P%29%29+%3D+y+%2F+%28sqrt%28P%29+-+a%29%2C+for+a\n", + " # sqrt(a) = (y/sqrt(b) + sqrt(P) x - y/sqrt(P))/x\n", + " # simplify:\n", + " # sqrt(a) = y/(sqrt(b) x) + sqrt(P) - y/(sqrt(P) x)\n", + " sa = y / (sb * x) + sp - y / (sp * x)\n", + " return sa ** 2\n", + "\n", + "#\n", + "# Two different ways how to calculate p_b. calculate_b1() uses liquidity as an input, calculate_b2() does not.\n", + "#\n", + "def calculate_b1(L, sp, sa, x, y):\n", + " # https://www.wolframalpha.com/input/?i=solve+L+%3D+x+sqrt%28P%29+sqrt%28b%29+%2F+%28sqrt%28b%29+-+sqrt%28P%29%29+for+b\n", + " # sqrt(b) = (L sqrt(P)) / (L - sqrt(P) x)\n", + " return ((L * sp) / (L - sp * x)) ** 2\n", + "\n", + "def calculate_b2(sp, sa, x, y):\n", + " # find the square root of b:\n", + " # https://www.wolframalpha.com/input/?i=solve+++x+sqrt%28P%29+b+%2F+%28b++-+sqrt%28P%29%29+%3D+y+%2F+%28sqrt%28P%29+-+sqrt%28a%29%29%2C+for+b\n", + " # sqrt(b) = (sqrt(P) y)/(sqrt(a) sqrt(P) x - P x + y)\n", + " P = sp ** 2\n", + " return (sp * y / ((sa * sp - P) * x + y)) ** 2\n", + "\n", + "\n", + "\n", + "def calculate_P(x,y,sa,sb):\n", + " p = sb*x\n", + " q = y-x*sa*sb\n", + " r = -sb*y\n", + " return (math.pow(-1*q+(q**2 - 4*p*r),0.5)/(2*p) )\n", + "\n", + "def tick_price(t):\n", + " return 1.0001**t\n", + "\n", + "def price_tick(p):\n", + " return math.log(p,1.0001)\n", + "\n", + "def getYFromX(x,sa,sb,sp):\n", + " return x * (sp - sa) * sp *sb /(sb - sp)\n", + "\n", + "# ? P is Y/X\n", + "def simulator_calc_L(x,pa,pb,p):\n", + " sa = pa ** 0.5\n", + " sb = pb ** 0.5\n", + " sp = p ** 0.5\n", + " if p >= pb:\n", + " y=x\n", + " x=0\n", + " L = get_liquidity(x, y, sp, sa, sb)\n", + " elif p <= pa:\n", + " y = 0\n", + " else:\n", + " print(\"sim2\", sa, sb, sp, x)\n", + " y = getYFromX(x, sa, sb, sp)\n", + " L = get_liquidity(x, y, sp, sa, sb)\n", + "\n", + " return L,y\n", + "\n", + "# ! Requires X token to be a stable token\n", + "def getXY(capitalDollar, token0Decimals, token1Decimals, Pxusd, Pyusd, sp, sa, sb):\n", + " # captal = x * Pxusd / xdecimals + y * Pyusd / yDecimals ----- eq1\n", + " # replace y with x from getYFromX\n", + "\n", + " factor1 = Pxusd / (10 ** token0Decimals)\n", + " factor2 = Pyusd / (10 ** token1Decimals)\n", + " factor3 = (sp - sa) * sp * sb / (sb - sp)\n", + "\n", + " x = capitalDollar / (factor1 + factor3 * factor2)\n", + " y = getYFromX(x, sa, sb, sp)\n", + " return x, y" + ] + } + ], + "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.10.11" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/analysis/v3IL.ipynb b/analysis/v3IL.ipynb new file mode 100755 index 0000000..ac6c8a9 --- /dev/null +++ b/analysis/v3IL.ipynb @@ -0,0 +1,135 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "import math\n", + "import numpy as np\n", + "import pandas as pd\n", + "%run analysis/uniV3Math.ipynb\n" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Step: 4.0\n" + ] + } + ], + "source": [ + "# MySwap: https://starkscan.co/contract/0xfff107e2403123c7df78d91728a7ee5cfd557aec0fa2d2bdc5891c286bbfff#read-write-contract-sub-write\n", + "\n", + "# P is Y/X\n", + "def get_il(Pnow, Pstart, Pa, Pb):\n", + " k = Pnow / float(Pstart)\n", + " return (2 * math.sqrt(k) - 1 - k) / (1 + k - math.sqrt(Pa/float(Pstart)) - k * math.sqrt(Pstart / float(Pb)))\n", + "\n", + "# qtys are decimal adjusted. i.e. for 1.01 ETH as x, xQty is 1.01 and not (1.01 * 10**18)\n", + "# xPrice is price in USD (float)\n", + "def get_hodlings_usd(xQty: float, xPrice: float, yQty: float, yPrice: float):\n", + " return xQty * xPrice + yQty * yPrice\n", + "\n", + "# E.g. Pool STRK/ETH\n", + "# X is amount of ETH at a tick in pool\n", + "# Y is amount of STRK at a tick in pool\n", + "xDecimals = 18\n", + "yDecimals = 18\n", + "simulationPeriod = 90 # days\n", + "expectedYieldPercent = 100 # e.g. 100% percent\n", + "\n", + "Pa = 1500 # 1500 STRK per ETH\n", + "Pb = 1700 # 1700 STRK per ETH\n", + "P = 1600 # Current price\n", + "\n", + "x = 10**18 # initial ETH investment\n", + "y = getYFromX(x, Pa ** 0.5, Pb ** 0.5, P ** 0.5)\n", + "\n", + "Pdiff = Pb - Pa # Pb >= Pa always\n", + "# We vary Pnow from [Pa - (Pdiff / 2)] to [Pb + (Pdiff/2)]\n", + "step = (Pdiff * 2) / 100 # Divides total chart range in 100 points\n", + "\n", + "yPrice = 2.0 # STRK price USD\n", + "\n", + "i = 0\n", + "rows = []\n", + "for Pnow in np.arange(Pa - (Pdiff / 2), Pb + (Pdiff/2), step):\n", + " # We fix USD price of one token to get other token usd price\n", + " xPrice = yPrice * (Pnow * (10 ** (xDecimals - yDecimals)))\n", + " hdl = get_hodlings_usd(x / 10.0 ** xDecimals, xPrice, y / 10.0**yDecimals, yPrice)\n", + " il = get_il(Pnow, P, Pa, Pb)\n", + " valueWithIL = hdl * (1 + il)\n", + " expectedYield = hdl * (expectedYieldPercent / 100) * simulationPeriod / 365\n", + " netValue = valueWithIL + expectedYield\n", + " rows.append({\n", + " 'price': Pnow,\n", + " 'hodl': hdl,\n", + " 'ILValue': valueWithIL,\n", + " 'netValue': netValue\n", + " })\n", + " \n", + "df = pd.DataFrame(rows, columns=['price', 'hodl', 'ILValue', 'netValue'])\n", + "df.set_index('price', inplace=True)\n" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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1f3+1gyMiIiIuB0FGBEREXE7CjAiIiLidhRgRERExO0owIiIiIjbUYARERERt6MAIyIiIm5HAUZERETcjgKMiIiIuB0FGBEREXE7CjAiIiLidhRgRERExO0owIiIiIjbUYARERERt6MAIyIiIm5HAUZERETcjgKMiIiIuB0FGBEREXE7CjAiIiLidhRgRERExO0owIiIiIjbUYARERERt6MAIyIiIm5HAUZERETcjgKMiIiIuB0FGBEREXE7CjAiIiLidhRgRERExO0owIiIiIjbUYARERERt1OjANO8eXMsFst5y6RJkwAoKipi0qRJREREEBgYyMiRI8nIyHB6jtTUVEaMGIG/vz9RUVE8+OCDlJWVObVZvnw5PXr0wMfHh9atWzNv3ryfN0oRERFpUGoUYNauXUtaWppjWbJkCQC33HILAA888ABffvkl//rXv/j+++85fvw4N998s+Px5eXljBgxgpKSElauXMn8+fOZN28eTzzxhKPNwYMHGTFiBFdffTWbNm3i/vvv5+677+brr7+ujfGKiIhIA2AxDMO41Afff//9LFy4kL1792Kz2WjSpAkffPABv/71rwHYtWsXHTp0ICUlhSuvvJJFixZx/fXXc/z4caKjowGYM2cO06ZN48SJE3h7ezNt2jS++uortm3b5nid2267jezsbBYvXlztvtlsNkJCQsjJySE4OPhShygiIiJ1qLrf35d8DExJSQnvv/8+48aNw2KxsH79ekpLSxk6dKijTfv27UlISCAlJQWAlJQUunTp4ggvAMnJydhsNrZv3+5oc/ZzVLapfI4LKS4uxmazOS0iIiJSu07nl/DtjgxeXLyL9Jwil/XD81If+Nlnn5Gdnc2YMWMASE9Px9vbm9DQUKd20dHRpKenO9qcHV4qt1duu1gbm81GYWEhfn5+VfZn1qxZzJgx41KHIyIiIucotxvsychlQ2oWGw5nsyE1i4Mn8x3b28UEcWP3pi7p2yUHmL///e9cd911xMXF1WZ/Ltn06dOZOnWq477NZiM+Pt6FPRIREXEvOYWlbEzNYsPhLDakZrPpSDZ5xWXntWsdFUiPhFCahVU9qVAXLinAHD58mG+//ZZPPvnEsS4mJoaSkhKys7OdZmEyMjKIiYlxtFmzZo3Tc1WepXR2m3PPXMrIyCA4OPiCsy8APj4++Pj4XMpwREREGh27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PJkvvvjC0abOPo9GIwcYn3766Xnrjx49ajRt2tTYtm2bkZiYaLz66quObTt27DAAY+3atY51ixYtMiwWi3Hs2DHDMAzjrbfeMsLCwozi4mJHm2nTphnt2rW7bGO5kEsZo2EYVa47W30f4+jRo40bb7zxgo9pCO/jT43RMNz/fbz11luN3/72txd8THZ2tuHl5WX861//cqzbuXOnARgpKSmGYRjGf//7X8NqtRrp6emONm+//bYRHBzsNO66cCljNAzDGDRokPGHP/zhgtvr+xjPdeONNxrXXHON435D+Dye69wxGob7fx47depkPP30007revToYTz66KOGYdTt57FRzsD8FLvdzp133smDDz5Ip06dztuekpJCaGgovXr1cqwbOnQoVquV1atXO9oMHDgQb29vR5vk5GR2795NVlbW5R/ET/ipMVZ6/vnniYiIICkpiZdeeslpiq++jxFg+fLlREVF0a5dO+69915OnTrl2NYQ3ke4+Bgruev7aLfb+eqrr2jbti3JyclERUXRp08fp2nt9evXU1paytChQx3r2rdvT0JCAikpKYA5xi5duhAdHe1ok5ycjM1mY/v27XU2nqpUZ4yVFixYQGRkJJ07d2b69OkUFBQ4ttXnMZ4rIyODr776ivHjxzvWNZTPY6WqxljJXT+PAFdddRVffPEFx44dwzAMvvvuO/bs2cOwYcOAuv08NtiLOf4cL7zwAp6enkyZMqXK7enp6URFRTmt8/T0JDw8nPT0dEebFi1aOLWpfLPS09MJCwu7DD2vvp8aI8CUKVPo0aMH4eHhrFy5kunTp5OWlsYrr7wC1P8xDh8+nJtvvpkWLVqwf/9+HnnkEa677jpSUlLw8PBoEO/jT40R3Pt9zMzMJC8vj+eff56ZM2fywgsvsHjxYm6++Wa+++47Bg0aRHp6Ot7e3oSGhjo9Njo62ul9PPuXZeX2ym2uVJ0xAtxxxx0kJiYSFxfHli1bmDZtGrt37+aTTz4B6vcYzzV//nyCgoKcdis0hM/j2aoaI7j35xHgjTfeYOLEiTRr1gxPT0+sVit//etfGThwoKOPdfV5VIA5x/r163n99dfZsGEDFovF1d25LKo7xqlTpzp+7tq1K97e3vzud79j1qxZblEO+7bbbnP83KVLF7p27UqrVq1Yvnw5Q4YMcWHPak91xujO76Pdbgfgxhtv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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "df.plot.line()" + ] + } + ], + "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.10.11" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}