{"version":3,"sources":["components/Dashboard.js","utils.js","formatmacd.js","App.js","index.js"],"names":["Dashboard","price","data","className","options","tooltips","intersect","mode","responsive","maintainAspectRatio","formatData","finalData","labels","datasets","label","backgroundColor","borderColor","fill","dates","map","val","ts","date","Date","hour","getHours","minute","getMinutes","second","getSeconds","milliseconds","getMilliseconds","day","getDate","month","getMonth","year","getFullYear","col1","col2","col3","col4","reverse","subtractHours","strdate","hours","time","moment","duration","subtract","format","formatmacdData","macd","signal","App","useState","currencies","setcurrencies","pair","setpair","setprice","pastData","setpastData","ws","useRef","macdarray","macdarray2","setmacd2","macdarray3","setmacd3","refresh","setrefresh","resolution","setresolution","first","url","useEffect","current","WebSocket","pairs","a","fetch","then","res","json","filtered","filter","quote_currency","sort","b","base_currency","apiCall","moment1","newdate","newdate2","substr","fetchHistoricalData","dataArr","dataArr2","historicalDataURL","i","length","push","enddate","strhour","toString","dataArr3","formattedData","MACD","require","macdInput","values","fastPeriod","slowPeriod","signalPeriod","SimpleMAOscillator","SimpleMASignal","calculate","final","console","log","msg","type","product_ids","channels","jsonMsg","JSON","stringify","send","onmessage","e","parse","product_id","csv","Object","keys","setTimeout","getTime","name","value","onChange","unsubMsg","unsub","target","cur","idx","id","display_name","Number","ReactDOM","render","StrictMode","document","getElementById"],"mappings":"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","file":"static/js/main.fb7fe4b5.chunk.js","sourcesContent":["import React, { useRef } from \"react\";\nimport { Line } from \"react-chartjs-2\";\n\nfunction Dashboard({ price, data }) {\n const opts = {\n tooltips: {\n intersect: true,\n mode: \"index\"\n },\n responsive: true,\n maintainAspectRatio: false\n };\n if (price === \"0.00\") {\n return

please select a currency pair

;\n }\n return (\n
\n

{`$${price}`}

\n\n
\n \n
\n
\n );\n}\n\nexport default Dashboard;","import moment from \"moment\";\n\nexport const formatData = (data) => {\n let finalData = {\n labels: [],\n datasets: [\n {\n label: \"Col1\",\n data: [],\n backgroundColor: \"rgb(10, 10, 10)\",\n borderColor: \"rgba(200, 200, 200)\",\n fill: false\n },\n {\n label: \"Col2\",\n data: [],\n backgroundColor: \"rgb(10, 10, 10)\",\n borderColor: \"rgba(200, 200, 200)\",\n fill: false\n },\n {\n label: \"Col3\",\n data: [],\n backgroundColor: \"rgb(10, 10, 10)\",\n borderColor: \"rgba(200, 200, 200)\",\n fill: false\n },\n {\n label: \"Col4\",\n data: [],\n backgroundColor: \"rgb(10, 10, 10)\",\n borderColor: \"rgba(200, 200, 200)\",\n fill: false\n }\n ]\n };\n \n let dates = data.map((val) => {\n const ts = val[0];\n let date = new Date(ts * 1000);\n\n let hour = date.getHours();\n let minute = date.getMinutes();\n let second = date.getSeconds();\n let milliseconds = date.getMilliseconds();\n\n let day = date.getDate();\n let month = date.getMonth() + 1;\n let year = date.getFullYear();\n \n let final = `${hour}:${minute}:${second}:${milliseconds}__${day}-${month}-${year}`;\n return final;\n });\n \n let col1 = data.map((val) => {\n return val[1];\n });\n let col2 = data.map((val) => {\n return val[2];\n });\n let col3 = data.map((val) => {\n return val[3];\n });\n let col4 = data.map((val) => {\n return val[4];\n });\n col1.reverse();\n col2.reverse();\n col3.reverse();\n col4.reverse();\n dates.reverse();\n finalData.labels = dates;\n finalData.datasets[0].data = col1;\n finalData.datasets[1].data = col2;\n finalData.datasets[2].data = col3;\n finalData.datasets[3].data = col4;\n return finalData;\n };\n\n export const subtractHours = ((strdate,hours)=>{\n var time = moment.duration(hours+\":00:00\");\n strdate=moment(strdate).subtract(time);\n return strdate.format(\"YYYY-MM-DDTHH:mm:ss.sssZ\");;\n });","export const formatmacdData = (data) => {\n let finalData = {\n labels: [],\n datasets: [\n {\n label: \"MacD\",\n data: [],\n backgroundColor: \"rgb(255, 0, 0)\",\n borderColor: \"rgba(255, 0, 0)\",\n fill: false\n },\n {\n label: \"Signal\",\n data: [],\n backgroundColor: \"rgb(0, 255,0)\",\n borderColor: \"rgba(0,255, 0)\",\n fill: false\n }\n ]\n };\n \n let dates = data.map((val) => {\n let final = val[\"date\"];\n return final;\n });\n \n let macd = data.map((val) => {\n return val[\"MACD\"];\n });\n let signal = data.map((val) => {\n return val[\"signal\"];\n });\n macd.reverse();\n dates.reverse();\n finalData.labels = dates;\n finalData.datasets[0].data = macd;\n finalData.datasets[1].data = signal;\n return finalData;\n };\n ","import 'devextreme/dist/css/dx.common.css';\nimport 'devextreme/dist/css/dx.light.css';\nimport React, { useState, useEffect, useRef } from \"react\";\nimport Dashboard from \"./components/Dashboard\";\nimport { formatData,subtractHours } from \"./utils\";\nimport { formatmacdData } from \"./formatmacd\";\nimport \"./styles.css\";\nimport 'devextreme/dist/css/dx.light.css';\nimport { CSVLink, CSVDownload } from \"react-csv\";\nimport { macd, sma } from \"technicalindicators\";\nimport moment from 'moment';\nexport default function App() {\n const [currencies, setcurrencies] = useState([]);\n const [pair, setpair] = useState(\"\");\n const [price, setprice] = useState(\"0.00\");\n //var [priceSMA, setpriceSMA] = useState(\"\");\n const [priceOBV, setpriceOBV] = useState({});\n const [pastData, setpastData] = useState({});\n const [csvdata, setcsvdata] = useState({});\n const ws = useRef(null);\n var printarray=[];\n var ssma=useState([]);\n var macdarray=[];\n const [macdarray2, setmacd2] = useState({});\n const [macdarray3, setmacd3] = useState({});\n const [refresh, setrefresh] = useState(0);\n const [resolution, setresolution] = useState(60);\n const opts = {\n tooltips: {\n intersect: true,\n mode: \"index\"\n },\n responsive: true,\n maintainAspectRatio: false\n };\n\n let first = useRef(false);\n const url = \"https://api.pro.coinbase.com\";\n\n\n useEffect(() => {\n ws.current = new WebSocket(\"wss://ws-feed.pro.coinbase.com\");\n\n let pairs = [];\n\n const apiCall = async () => {\n await fetch(url + \"/products\")\n .then((res) => res.json())\n .then((data) => (pairs = data));\n \n let filtered = pairs.filter((pair) => {\n if (pair.quote_currency === \"USD\") {\n return pair;\n }\n });\n\n filtered = filtered.sort((a, b) => {\n if (a.base_currency < b.base_currency) {\n return -1;\n }\n if (a.base_currency > b.base_currency) {\n return 1;\n }\n return 0;\n });\n\n \n setcurrencies(filtered);\n\n first.current = true;\n };\n\n apiCall();\n }, []);\n\n let moment1=new Date();\n let newdate = subtractHours(moment1,\"05\");\n let newdate2=newdate.substr(0,24)+'z';\n \n const fetchHistoricalData = async () => {\n let dataArr = [];\n let dataArr2 = [];\n let historicalDataURL = `${url}/products/${pair}/candles?granularity=60`;\n await fetch(historicalDataURL)\n .then((res) => res.json())\n .then((data) => (dataArr = data));\n for (let i=0;i res.json())\n .then((data) => (dataArr = data));\n for (let i=0;i {\n if (!first.current) {\n \n return;\n }\n\n \n let msg = {\n type: \"subscribe\",\n product_ids: [pair],\n channels: [\"ticker\"]\n };\n let jsonMsg = JSON.stringify(msg);\n ws.current.send(jsonMsg);\n\n\n\nfetchHistoricalData();\n\n ws.current.onmessage = (e) => {\n let data = JSON.parse(e.data);\n if (data.type !== \"ticker\") {\n return;\n }\n\n if (data.product_id === pair) {\n setprice(data.price);\n }\n };\n }, [pair]);\n\n const handleSelect = (e) => {\n let unsubMsg = {\n type: \"unsubscribe\",\n product_ids: [pair],\n channels: [\"ticker\"]\n };\n let unsub = JSON.stringify(unsubMsg);\n\n ws.current.send(unsub);\n\n setpair(e.target.value);\n };\n \n const handleResolution = (e) => {\n setresolution(Number(e.target.value));\n };\n \n let csv=[];\n if(Object.keys(macdarray2).length>0){\n csv.push(Download CSV);\n }\n\n useEffect(() => {\n \n const refreshCall = () => {\n if(pair!==\"\"){\n fetchHistoricalData();\n }\n setTimeout(function(){ \n \n setrefresh((new Date()).getTime()); }\n , 500000000000);\n };\n\n refreshCall();\n }, [refresh]);\n\n\n return (\n
\n {\n \n }\n \n {csv}\n

\n

resolution\n \n \n\n\n\n obv macd crossing \n slippage indicators\n \n\n
\n );\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport App from './App';\n\nReactDOM.render(\n \n \n ,\n document.getElementById('root')\n);\n"],"sourceRoot":""}