Build Dash Plotly app utilizing API endpoints. App will enable end-user to select crypto pair and perform cycle analysis (disclosed once accepted project) - 04/08/2023 07:24 EDT

Job ID: 37002186

Budget: £20 – £250 GBP

1. FastAPI Backend Setup:

a. Start by setting up FastAPI to serve as the backend for your application.
b. Create an endpoint that communicates with the Coin API.
bi.At user request - It should take the symbol_id, period_id, and limit as parameters and return the OHLC data (price (open, high, low, close), volume traded, trades count)
bii.https://docs.coinapi.io/market-data/rest-api/ohlcv
c. Store time-series from 1bi) at user request into a local database
d. Create another endpoint that communicates with the Cycle Scanner API (API documentation available on request). It should accept a time-series dataset from 1bi), format it as required by the Cycle Scanner API, and return the response.
2. Dash Front-End Setup:
a. Set up Dash application to serve as Front-End
b. Implement a main chart that visualizes the price data fetched from the CoinAPI (enable Zoom functionality). Ensure that candlesticks are visualized.
c. Provide dropdown for user to select cryptocurrency pair (symbol_id), period_id, and limit parameters, also include timeframe ie. 1D,1H etc optionality
d. Implement a button that, when clicked, makes a request to the FastAPI endpoint that communicates with the Cycle Scanner API
e. At this stage ensure that the data feeding into the Cycle Scanner API matches the schema required on POST. Ensure that the end-user can select the request body of choice (ie.user may have multiple charts saved down in the app). Ensure that the format of the time-series is compatible with that of the request body (json format)
f. Output display schema returned from the Cycle Scanner API in a table below the time-series with an extra column labeled “Cycle Length”. Within this column compute length/2 from the output data ie. if length is 90 then the field should show 45. Output data are a number of cycles.
3. Data visualization and Analysis:
a. Perform a function which locates and identifies the "minBarNum" value (output value from 2f. This value chronologically identifies the first bar number to which there was a local minima from the identified cycles from the outputted cycle spectrum. If the minBarNum is for example 50, this means that the first local minima of the cycle was at 50 bars into the time-series (when starting from the left hand side of a chart)
b. Map the "minBarNum'' value on the original time-series from 2b/2c back into the time-series to which the analysis is performed on. Once the minBarNum is located, map the half cycle length as vertical line classifiers (notating the half cycle length as Min45 at the first minBarNum and the subsequent vertical line as Max45 (rotating for each line for the given cycle). In this example, the first vertical line will be at bar 50 and the next vertical line will be at bar 95, followed by 140, 185 etc. Compute said lines across the time-series even when there are no prices on the x-axis (future vertical lines - extend future lines into future distance as users input)
c. Important 1 - User should be enabled to re-select time frame of initial data set using dropdown still with the newly vertical lines mapped out but only when the a newly selected time frame is greater than the time frame to that of the initial analysis example:
When selecting BTC/USD with time frame 1D and hence running the analysis the first line projected will be at bar 50 ie. day 50 on the chart. The first line will be at day 95, followed by day 140 from day 0. When keeping the mapped lines from the cycle analysis user can select another time frame ie. 4H, 1H, 30m, 15m etc. But importantly to ensure the cycle mappings are true to the original 1D time frame a calculation needs to be carried out ie.
1D = 24Hrs so 45Dx24 to ensure that the lines are mapped to the original bar stamps (see appendix 1)
d. Important 2- User should have a button to select which cycle to be added to the chart. This can be multiple cycles resulting in multiple vertical line series mapped to their own respective “minBarNum” integer
e. Once done enable user to export time-series + feature set in.csv and in json format
4.Additional user functionality:
a. Build input box which enables user to manually override the “minBarNum” value for each cycle
b. Build select/deselect function which enables user to turn off cycle mapping ie. if there are 10 cycles from the cycle scanner user can view them all or just select a few based on desired analysis when looking at the table from step 5 (ie. in the output scheme values such as bartelsValue and strength are useful)
c. Assign each cycle (and thus each vertical line series) its own unique color for easy differentiation
d. Ensure that the vertical lines are notated and classified enabling further analysis against the time-series. As mentioned previously Min45,Max45, Min45, Max45
Related categories: Python JSON Web API LearnDash FastAPI