From b041c94eba467d2ee28fd1ea9352119256aebf5e Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 23 Feb 2018 18:18:11 +0100 Subject: [PATCH] Olivia and Tom working --- .vs/AAWebPlatform/v15/.suo | Bin 58368 -> 65536 bytes ChartUtilities.js | 2 +- Dashboard.js | 14 ++- Ecosystem.js | 200 ++++++++++++++++++++++++++++++------- FileCloud.js | 2 +- FileCursor.js | 16 +-- FileCursorCache.js | 3 +- Panels/ChartLayersPanel.js | 7 +- Panels/ControlPanel.js | 2 +- TimelineChart.js | 196 ++++++++++++++++++++++++------------ ViewPort.js | 56 ++++++----- index.html | 9 +- server.js | 19 ++-- 13 files changed, 375 insertions(+), 151 deletions(-) diff --git a/.vs/AAWebPlatform/v15/.suo b/.vs/AAWebPlatform/v15/.suo index 87e963a56f1686141b416cb5597831395cbf8308..eb2f4a698acd8c1117097225e22a32f0a8011468 100644 GIT binary patch delta 8374 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 delta 5123 zcmeI03s98T6@d5t>@ExLuFJy}k;kqgE(jSwK)?r!Y|tP^HXvF<-aqPAE)|RDp;geb`ied_Hn-#!*0*r(o}3+r-Z+I1SY4Tiv68MEa*y)0P*(%hxp{ziv+@9}1eYxG3>fkE8^htHk(7J|#g>zq5kMVW&oM-hCdIzBN z7j!Ag*@8~%Ni%N|WH3rv=ebBALJK(unT042HA2fx?w6s|AX;P|5{3jJ3y^SRA)SjP zI1(~n8;4bzW--bHK~F@v1fih{Y3B@f<6M?yH-@qt)V#))5-mn*)~nrYxQa{t>(M|1??d^0rqsWA~u=@BG4FWcKD`C7=;7W zTcV^oR2l+dw{NDLjxD7GY(D~h>M$7cwXry`_*o^fXy*9g*`Ayuay9ki&5@1lYx729 zKJ{`6M()%4j=hFCIv1{RQ4&f+S7CTTrb3j0sw)(ouWAm@meYn%ERJ;?3dfGpC@?Qv zr(hJV%iNwyc4FlfemL5bYYyW&Vhl`9K}`8!Yyew<80ylm!ewa;m<`$TBz(Bky}^*7 z7cNO-B`48%njc=2$)@(7ABxWQm|~9D7aRr+XcAA#=n`_x&krTaS@SZ^k!NTzWUx^; zRy8(n5jXGQ9D(TyQ8Kn(;noApfdew-1jAgLqyr7Fz}mt9xYHlTC)j#eNB*EhLFrJ8 zkem%8CH1Pq9-~PU?>_p8g!8qL9+FYXe^NS!Ia0Q%8vH*!a3VjZu4YaD-{Q&*6%ZTb z&mT&uW}qEN$Gbl7oj*5ka;ggoM0dU=t_oK>`| z%=E<8njENpDS}=i^xteZ$;&>~oUQ!axi9o9vdfq8X%~x_n)1D?^a_gM4Pn(JaORL4 z8ryYHd8kLR+SLwaCV02kI`>G|eb0yPTvwrlr2%Dou_N)yqX!=}XM=Ea?)e;bwMR*J zO*?imxo<`Ec;!&b6H`>W+E%IMZX-pYP8q{6$!5(|j2|Lg)I?fT<)bF=aT9d6WvCaq z4WENLeP^?Y>bvIRi?`P@p+~i zOU9tPR1Nt9Dt^ngTdX6`AY`@;2Z8fVbGzH<6g}o{E3wL*cbnh}rbe*s(?Lgn0Ob;r zEQDv*tZcgJk{^C{c={>QG{*yMeQ&|#zFgRTK@J6bl%AuPaxK`e<$z?D8X|0RXl@IE zra$YU{>Cc!Q%x@X#=IDQTdVjcablz_fIklGXQS)Ybjur#1mj*_mqO=YE@XUk3aWcn zPrL)ZNv(32Dz%zm^opBy79Gt@c-56+PD)5m$zNXs^*b}*<05~^ym6GhfaiHV6b>li z>g`D9-ux&o62AM{Yf$=8E`R4QG7iqy(ZTkIa(*K;_v@kPK-hS0{-34e|C3y-o;(*r z!S#hgq`ZUQLunDIu(BusHV-H<*}lmMVKp%g8Q}iF-YEmlHB51m8df}91Zkb`!n|8* z*z@pHc<*Ku=pQbF^6ZUZ-Jj#{u8Z4eja2YyM>&~?LkJlJ}8H>q6p&yxO|_j=lL zUp;XDl*y~F3zj5rSEV~zKe?pKJl=VIaj5DKg;DrLISW2aP6Xe9ENJ{)(|_vqnr;78 z@6O-Vf;OlCUJq77@$Hw!f*{Bm0A0a)c+7K$&W86>3|#&!4`U_;^buVhPj}&0bYURe zxgS2sV+s9Jqns`he)EHq%+(sBEu3TfakGoy!`tC1e(S-Q<;I_^zVy|Sk1xEvfuj#} z@M-Xe>fk82b5qIdA4=Ku+V5w~4D~^&(Dh|E>|GN?NmWiudjk>Py?Z1K^l>W{=yZBqRSS?Cq&1`=~N$B4!sw= t^5)%RdBe%`_JGgJ^A^xwfv#c}6!#AkrwO|Iwa|1+hWGGj{fEC!{ud7Z^wIzT diff --git a/ChartUtilities.js b/ChartUtilities.js index 27bb78841..e652f8bf9 100644 --- a/ChartUtilities.js +++ b/ChartUtilities.js @@ -70,7 +70,7 @@ function getTransparenceFactor(timePeriod) { function recalculatePeriod(zoomLevel) { - console.log(" recalculatePeriod > " + zoomLevel); + //console.log(" recalculatePeriod > " + zoomLevel); if (zoomLevel > 200) { return _1_MINUTE_IN_MILISECONDS; diff --git a/Dashboard.js b/Dashboard.js index 43dccd81c..9ebc5bb3a 100644 --- a/Dashboard.js +++ b/Dashboard.js @@ -61,8 +61,6 @@ function convertTimePeriodToName(pTimePeriod) { -var viewPort = newViewPort(); - const DEBUG_START_UP_DELAY = 0 //3000; // This is a waiting time in case there is a need to debug the very first steps of initialization, to be able to hit F12 on time. const INITIAL_DEFAULT_MARKET = 2; // This is the market that will be shown when loading the site for the first time. const DEFAULT_EXCHANGE = "Poloniex"; @@ -98,7 +96,15 @@ const _1_MINUTE_IN_MILISECONDS = 1 * 60 * 1000; const EARLIEST_DATE = new Date(2014, 0, 18, 4, 26, 8); const FONT_ASPECT_RATIO = 0.60; const CHART_ASPECT_RATIO = 1 / 10; -const INITIAL_TIME_PERIOD = _10_MINUTES_IN_MILISECONDS; + +const INITIAL_ZOOM_LEVEL = 0; // This is the zoom level at the view port in which the APP starts. +const INITIAL_TIME_PERIOD = recalculatePeriod(INITIAL_ZOOM_LEVEL); + +var viewPort = newViewPort(); + + + + /* Here we list the valid Time Periods: */ @@ -116,7 +122,7 @@ var newDate = new Date(); newDate.setMilliseconds(0); newDate.setDate(newDate.getDate() - 90); -const INITIAL_DATE = newDate; +const INITIAL_DATE = new Date(2017,11,17,14,18,0,0); var maxDate = new Date(); maxDate.setMilliseconds(0); diff --git a/Ecosystem.js b/Ecosystem.js index 73f3eab1a..faae1e831 100644 --- a/Ecosystem.js +++ b/Ecosystem.js @@ -74,15 +74,8 @@ function newEcosystem() { plotter: { devTeam: "AAMasters", repo: "AAOlivia-Plotter", - moduleName: "Candlesticks", - target: "Timeline", - dependencies: { - dependency: { - devTeam: "AAMasters", - repo: "Plotters-Utilities", - moduleName: "Candlesticks" - } - } + moduleName: "Candles", + target: "Timeline" } }] } @@ -91,7 +84,7 @@ function newEcosystem() { displayName: "Market Volumes per Period", description: "A set of files per period that contains all volumes of one whole market.", storageAccount: "aaolivia", - filePath: "@Exchange/Output/Candles/Multi-Period-Market/@Period", + filePath: "@Exchange/Output/Volumes/Multi-Period-Market/@Period", fileName: "@AssetA_@AssetB.json", exchangeList: { exchange: [{ @@ -112,14 +105,7 @@ function newEcosystem() { devTeam: "AAMasters", repo: "AAOlivia-Plotter", moduleName: "Volumes", - target: "Timeline", - dependencies: { - dependency: { - devTeam: "AAMasters", - repo: "Plotters-Utilities", - moduleName: "Volumes" - } - } + target: "Timeline" } }] } @@ -149,14 +135,7 @@ function newEcosystem() { devTeam: "AAMasters", repo: "AAOlivia-Plotter", moduleName: "Candlesticks", - target: "Timeline", - dependencies: { - dependency: { - devTeam: "AAMasters", - repo: "Plotters-Utilities", - moduleName: "Candlesticks" - } - } + target: "Timeline" } }] } @@ -165,7 +144,7 @@ function newEcosystem() { displayName: "Daily Volumes per Period", description: "A set of files per period that contains all volumes of one whole market.", storageAccount: "aaolivia", - filePath: "@Exchange/Output/Candles/Multi-Period-Daily/@Period/@Year/@Month/@Day", + filePath: "@Exchange/Output/Volumes/Multi-Period-Daily/@Period/@Year/@Month/@Day", fileName: "@AssetA_@AssetB.json", exchangeList: { exchange: [{ @@ -186,14 +165,7 @@ function newEcosystem() { devTeam: "AAMasters", repo: "AAOlivia-Plotter", moduleName: "Volumes", - target: "Timeline", - dependencies: { - dependency: { - devTeam: "AAMasters", - repo: "Plotters-Utilities", - moduleName: "Volumes" - } - } + target: "Timeline" } }] } @@ -225,6 +197,164 @@ function newEcosystem() { sas: '?sv=2017-04-17&ss=f&srt=sco&sp=rl&se=2018-12-31T02:34:32Z&st=2018-02-01T18:34:32Z&spr=https,http&sig=24UJjGDVpPrHjhBoZtt3iKj4sxgenfSV4VTJD2v0q1U%3D', fileUri: 'https://' + 'aaolivia' + '.file.core.windows.net' } + }, + { + codeName: "AATom", + displayName: "Tom", + type: "Indicator", + version: { + number: "1.0.0", + status: "Mantained", // Discontinued + }, + products: { + product: [{ + codeName: "Market Candle-Stairs", + displayName: "Market Candle-Stairs per Period", + description: "A set of files per period that contains all candle-stairs of one whole market.", + storageAccount: "aatom", + filePath: "@Exchange/Tom/dataSet.V1/Output/CandleStairs/Multi-Period-Market/@Period", + fileName: "@AssetA_@AssetB.json", + exchangeList: { + exchange: [{ + name: "Poloniex", + datetimeRange: { + minDatetime: "2017-02-19 19:15:00.000 GMT+0000", + maxDatetime: "2018-02-13 10:10:00.000 GMT+0000" + } + }] + }, + layers: { + layer: [{ + codeName: "Market Candle-Stairs", + displayName: "Candle-Stairs", + exchangeList: ["Poloniex"], + validPeriods: ["24-hs", "12-hs", "08-hs", "06-hs", "04-hs", "03-hs", "02-hs", "01-hs"], + plotter: { + devTeam: "AAMasters", + repo: "AATom-Plotter", + moduleName: "CandleStairs", + target: "Timeline" + } + }] + } + }, { + codeName: "Market Volume-Stairs", + displayName: "Market Volume-Stairs per Period", + description: "A set of files per period that contains all volume-stairs of one whole market.", + storageAccount: "aaolivia", + filePath: "@Exchange/Tom/dataSet.V1/Output/Volume-Stairs/Multi-Period-Market/@Period", + fileName: "@AssetA_@AssetB.json", + exchangeList: { + exchange: [{ + name: "Poloniex", + datetimeRange: { + minDatetime: "2017-02-19 19:15:00.000 GMT+0000", + maxDatetime: "2018-02-13 10:10:00.000 GMT+0000" + } + }] + }, + layers: { + layer: [{ + codeName: "Market Volume-Stairs", + displayName: "Volume-Stairs", + exchangeList: ["Poloniex"], + validPeriods: ["24-hs", "12-hs", "08-hs", "06-hs", "04-hs", "03-hs", "02-hs", "01-hs"], + plotter: { + devTeam: "AAMasters", + repo: "AATom-Plotter", + moduleName: "VolumeStairs", + target: "Timeline" + } + }] + } + }, { + codeName: "Daily Candle-Stairs", + displayName: "Daily Candle-Stairs per Period", + description: "A set of files per period that contains all candle-stairs of one whole market.", + storageAccount: "aatom", + filePath: "@Exchange/Tom/dataSet.V1/Output/CandleStairs/Multi-Period-Daily/@Period/@Year/@Month/@Day", + fileName: "@AssetA_@AssetB.json", + exchangeList: { + exchange: [{ + name: "Poloniex", + datetimeRange: { + minDatetime: "2017-02-19 19:15:00.000 GMT+0000", + maxDatetime: "2018-02-13 10:10:00.000 GMT+0000" + } + }] + }, + layers: { + layer: [{ + codeName: "Daily Candle-Stairs", + displayName: "Candle-Stairs", + exchangeList: ["Poloniex"], + validPeriods: ["45-min", "40-min", "30-min", "20-min", "15-min", "10-min", "05-min", "04-min", "03-min", "02-min", "01-min"], + plotter: { + devTeam: "AAMasters", + repo: "AATom-Plotter", + moduleName: "CandleStairs", + target: "Timeline" + } + }] + } + }, { + codeName: "Daily Volume-Stairs", + displayName: "Daily Volume-Stairs per Period", + description: "A set of files per period that contains all volume-stairs of one whole market.", + storageAccount: "aaotom", + filePath: "@Exchange/Tom/dataSet.V1/Output/Volume-Stairs/Multi-Period-Daily/@Period/@Year/@Month/@Day", + fileName: "@AssetA_@AssetB.json", + exchangeList: { + exchange: [{ + name: "Poloniex", + datetimeRange: { + minDatetime: "2017-02-19 19:15:00.000 GMT+0000", + maxDatetime: "2018-02-13 10:10:00.000 GMT+0000" + } + }] + }, + layers: { + layer: [{ + codeName: "Daily Volume-Stairs", + displayName: "Volume-Stairs", + exchangeList: ["Poloniex"], + validPeriods: ["45-min", "40-min", "30-min", "20-min", "15-min", "10-min", "05-min", "04-min", "03-min", "02-min", "01-min"], + plotter: { + devTeam: "AAMasters", + repo: "AATom-Plotter", + moduleName: "VolumeStairs", + target: "Timeline" + } + }] + } + }] + }, + processes: + { + process: [{ + name: "One-Min-Daily-Candles-Volumes", + description: "Read trades files and generates one minute candles and volumes files for each day." + }] + }, + directDependencies: [], + directDependents: [], + collaboratorsList: [], + github: { + org: "AAMasters", + repos: { + repo: [{ + name: "AABruce", + description: "Produces two data-sets with candles and volumes for all markets at all exchanges.", + openIssues: 0, + openPullRequests: 0, + contributors: 1 + }] + } + }, + storage: { + sas: '?sv=2017-04-17&ss=f&srt=sco&sp=r&se=2018-12-31T19:28:33Z&st=2018-02-22T11:28:33Z&spr=https&sig=YaprSp9zO%2Fsz0nPPWwPMqPACxZTnYhSWKApfun%2Bfez4%3D', + fileUri: 'https://' + 'aatom' + '.file.core.windows.net' + } } ] } diff --git a/FileCloud.js b/FileCloud.js index 9fd9fb913..7da02dbb7 100644 --- a/FileCloud.js +++ b/FileCloud.js @@ -39,7 +39,7 @@ function newFileCloud() { fileService.getFileToText('data', filePath, fileName, undefined, onFileReceived); - console.log("File Requested > " + filePath); + //console.log("File Requested > " + filePath); function onFileReceived(err, text, response) { diff --git a/FileCursor.js b/FileCursor.js index 5c71f822c..64cd6901e 100644 --- a/FileCursor.js +++ b/FileCursor.js @@ -25,7 +25,7 @@ function newFileCursor() { return fileCursor; - function initialize(pFileCloud, pProduct, pExchange, pMarket, pPeriodName, pCursorDate, pTimePeriod, callBackFunction) { + function initialize(pFileCloud, pProduct, pExchange, pMarket, pPeriodName, pTimePeriod, pCursorDate, pCurrentTimePeriod, callBackFunction) { market = pMarket; exchange = pExchange; @@ -35,7 +35,7 @@ function newFileCursor() { cursorDate = pCursorDate; timePeriod = pTimePeriod; - setTimePeriod(pTimePeriod); + setTimePeriod(pCurrentTimePeriod); getFiles(callBackFunction); @@ -76,12 +76,12 @@ function newFileCursor() { if (Math.abs(positionB - positionA) <= 1) { exitSavingMode(); - console.log("File Cursor with period " + periodName + " EXITED saving mode after being notified the user is at period " + convertTimePeriodToName(pTimePeriod)); + //console.log("File Cursor with period " + periodName + " EXITED saving mode after being notified the user is at period " + convertTimePeriodToName(pTimePeriod)); } else { enterSavingMode(); - console.log("File Cursor with period " + periodName + " ENTERED saving mode after being notified the user is at period " + convertTimePeriodToName(pTimePeriod)); + //console.log("File Cursor with period " + periodName + " ENTERED saving mode after being notified the user is at period " + convertTimePeriodToName(pTimePeriod)); } @@ -166,25 +166,25 @@ function newFileCursor() { case _45_MINUTES_IN_MILISECONDS: { - minCursorSize = 10; + minCursorSize = 13; maxCursorSize = 30; } break; case _40_MINUTES_IN_MILISECONDS: { - minCursorSize = 8; + minCursorSize = 11; maxCursorSize = 20; } break; case _30_MINUTES_IN_MILISECONDS: { - minCursorSize = 6; + minCursorSize = 9; maxCursorSize = 15; } break; case _20_MINUTES_IN_MILISECONDS: { - minCursorSize = 5; + minCursorSize = 7; maxCursorSize = 15; } break; diff --git a/FileCursorCache.js b/FileCursorCache.js index 24c89c631..bc348199b 100644 --- a/FileCursorCache.js +++ b/FileCursorCache.js @@ -4,6 +4,7 @@ function newFileCursorCache() { let fileCursorCache = { getFileCursor: getFileCursor, setDatetime: setDatetime, + setTimePeriod: setTimePeriod, initialize: initialize } @@ -53,7 +54,7 @@ function newFileCursorCache() { if (layer.validPeriods.includes(periodName) === true) { let fileCursor = newFileCursor(); - fileCursor.initialize(fileCloud, product, exchange, pMarket, periodName, pDatetime, pTimePeriod, onFileReceived); + fileCursor.initialize(fileCloud, product, exchange, pMarket, periodName, periodTime, pDatetime, pTimePeriod, onFileReceived); fileCursors.set(periodTime, fileCursor); diff --git a/Panels/ChartLayersPanel.js b/Panels/ChartLayersPanel.js index 0dec6e1f0..c303819a3 100644 --- a/Panels/ChartLayersPanel.js +++ b/Panels/ChartLayersPanel.js @@ -11,8 +11,9 @@ function newChartLayersPanel() { const LAYER_NAMES = { OLIVIA_CANDLES: 'Olivia Candlesticks', - CANDLESTICKS: 'Candlesticks', - VOLUME: 'Volume', + OLIVIA_VOLUMES: 'Olivia Volumes', + TOM_CANDLE_STAIRS: 'Tom Candle-Stairs', + TOM_VOLUME_STAIRS: 'Tom Volume-Stairs', ATH: 'All-time Highs and Lows', HIGH_LOWS: 'High and Lows', FORECAST: 'Forecast', @@ -62,7 +63,7 @@ function newChartLayersPanel() { var buttonPosition; - var buttonNames = [LAYER_NAMES.OLIVIA_CANDLES,LAYER_NAMES.CANDLESTICKS, LAYER_NAMES.VOLUME, LAYER_NAMES.ATH, LAYER_NAMES.HIGH_LOWS, LAYER_NAMES.FORECAST, LAYER_NAMES.ORDER_BOOKS, LAYER_NAMES.CANDLE_STAIRS, LAYER_NAMES.VOLUME_STAIRS, LAYER_NAMES.BUY_SELL_BALANCE, LAYER_NAMES.LINEAR_REGRESION_CURVE]; + var buttonNames = [LAYER_NAMES.OLIVIA_CANDLES, LAYER_NAMES.OLIVIA_VOLUMES, LAYER_NAMES.TOM_CANDLE_STAIRS, LAYER_NAMES.TOM_VOLUME_STAIRS, LAYER_NAMES.ATH, LAYER_NAMES.HIGH_LOWS, LAYER_NAMES.FORECAST, LAYER_NAMES.ORDER_BOOKS, LAYER_NAMES.CANDLE_STAIRS, LAYER_NAMES.VOLUME_STAIRS, LAYER_NAMES.BUY_SELL_BALANCE, LAYER_NAMES.LINEAR_REGRESION_CURVE]; var lastY = 5; buttons = []; diff --git a/Panels/ControlPanel.js b/Panels/ControlPanel.js index b579f3837..6d4f65575 100644 --- a/Panels/ControlPanel.js +++ b/Panels/ControlPanel.js @@ -102,7 +102,7 @@ function newControlPanel() { viewPort.eventHandler.listenToEvent("Zoom Changed", onZoomChanged); - PLAY_STEP = recalculatePeriod(viewPort.zoomLevel); + PLAY_STEP = INITIAL_TIME_PERIOD; } diff --git a/TimelineChart.js b/TimelineChart.js index c7fe82c8c..02c03631f 100644 --- a/TimelineChart.js +++ b/TimelineChart.js @@ -93,9 +93,25 @@ function newTimelineChart() { function initializeLayers() { + /* Here we need to move the viewPort to the default date. */ + + //-869208.2550614576 y = 40845.822907407215 + + + + let displaceVector = { + x: -869208.2550614576, + y: 40845.822907407215 + }; + + viewPort.displace(displaceVector); + + + let layerStatus; + /* AAMasters AAOlivia Candlesticks */ - var layerAAMastersAAOliviaCandlesticks = newAAMastersAAOliviaCandlesticks(); + var layerAAMastersAAOliviaCandlesticks = newAAMastersAAOliviaCandles(); layerAAMastersAAOliviaCandlesticks.container.displacement.parentDisplacement = timelineChart.container.displacement; layerAAMastersAAOliviaCandlesticks.container.zoom.parentZoom = timelineChart.container.zoom; @@ -109,16 +125,98 @@ function newTimelineChart() { layerAAMastersAAOliviaCandlesticks.container.frame.position.x = timelineChart.container.frame.width / 2 - layerAAMastersAAOliviaCandlesticks.container.frame.width / 2; layerAAMastersAAOliviaCandlesticks.container.frame.position.y = timelineChart.container.frame.height / 2 - layerAAMastersAAOliviaCandlesticks.container.frame.height / 2; - layerAAMastersAAOliviaCandlesticks.initialize(DEFAULT_EXCHANGE, DEFAULT_MARKET, INITIAL_DATE, INITIAL_TIME_PERIOD, chartLayersPanel, onOliviaInitialized); + layerStatus = chartLayersPanel.getLayerStatus(chartLayersPanel.layerNames.OLIVIA_CANDLES); - function onOliviaInitialized() { + layerAAMastersAAOliviaCandlesticks.initialize(DEFAULT_EXCHANGE, DEFAULT_MARKET, INITIAL_DATE, INITIAL_TIME_PERIOD, layerStatus, onOliviaCandlesInitialized); + + function onOliviaCandlesInitialized() { splashScreenNeeded = false; // This is when we dont need a splash screen anymore! } - /* All Time Layer */ + /* AAMasters AAOlivia Volumes */ + var layerAAMastersAAOliviaVolumes = newAAMastersAAOliviaVolumes(); + + layerAAMastersAAOliviaVolumes.container.displacement.parentDisplacement = timelineChart.container.displacement; + layerAAMastersAAOliviaVolumes.container.zoom.parentZoom = timelineChart.container.zoom; + layerAAMastersAAOliviaVolumes.container.frame.parentFrame = timelineChart.container.frame; + + layerAAMastersAAOliviaVolumes.container.parentContainer = timelineChart.container; + + layerAAMastersAAOliviaVolumes.container.frame.width = timelineChart.container.frame.width * 1; + layerAAMastersAAOliviaVolumes.container.frame.height = timelineChart.container.frame.height * 1; + + layerAAMastersAAOliviaVolumes.container.frame.position.x = timelineChart.container.frame.width / 2 - layerAAMastersAAOliviaVolumes.container.frame.width / 2; + layerAAMastersAAOliviaVolumes.container.frame.position.y = timelineChart.container.frame.height / 2 - layerAAMastersAAOliviaVolumes.container.frame.height / 2; + + layerStatus = chartLayersPanel.getLayerStatus(chartLayersPanel.layerNames.OLIVIA_VOLUMES); + + layerAAMastersAAOliviaVolumes.initialize(DEFAULT_EXCHANGE, DEFAULT_MARKET, INITIAL_DATE, INITIAL_TIME_PERIOD, layerStatus, onOliviaVolumesInitialized); + + function onOliviaVolumesInitialized() { + + // nothing to do here... + + } + + /* AAMasters AATom CandleStairs */ + + var layerAAMastersAATomCandleStairs = newAAMastersAATomCandleStairs(); + + layerAAMastersAATomCandleStairs.container.displacement.parentDisplacement = timelineChart.container.displacement; + layerAAMastersAATomCandleStairs.container.zoom.parentZoom = timelineChart.container.zoom; + layerAAMastersAATomCandleStairs.container.frame.parentFrame = timelineChart.container.frame; + + layerAAMastersAATomCandleStairs.container.parentContainer = timelineChart.container; + + layerAAMastersAATomCandleStairs.container.frame.width = timelineChart.container.frame.width * 1; + layerAAMastersAATomCandleStairs.container.frame.height = timelineChart.container.frame.height * 1; + + layerAAMastersAATomCandleStairs.container.frame.position.x = timelineChart.container.frame.width / 2 - layerAAMastersAATomCandleStairs.container.frame.width / 2; + layerAAMastersAATomCandleStairs.container.frame.position.y = timelineChart.container.frame.height / 2 - layerAAMastersAATomCandleStairs.container.frame.height / 2; + + layerStatus = chartLayersPanel.getLayerStatus(chartLayersPanel.layerNames.OLIVIA_CANDLES); + + layerAAMastersAATomCandleStairs.initialize(DEFAULT_EXCHANGE, DEFAULT_MARKET, INITIAL_DATE, INITIAL_TIME_PERIOD, layerStatus, onOliviaCandlesInitialized); + + function onOliviaCandlesInitialized() { + + // nothing to do here... + + } + + /* AAMasters AATom VolumeStairs */ + + var layerAAMastersAATomVolumeStairs = newAAMastersAATomVolumeStairs(); + + layerAAMastersAATomVolumeStairs.container.displacement.parentDisplacement = timelineChart.container.displacement; + layerAAMastersAATomVolumeStairs.container.zoom.parentZoom = timelineChart.container.zoom; + layerAAMastersAATomVolumeStairs.container.frame.parentFrame = timelineChart.container.frame; + + layerAAMastersAATomVolumeStairs.container.parentContainer = timelineChart.container; + + layerAAMastersAATomVolumeStairs.container.frame.width = timelineChart.container.frame.width * 1; + layerAAMastersAATomVolumeStairs.container.frame.height = timelineChart.container.frame.height * 1; + + layerAAMastersAATomVolumeStairs.container.frame.position.x = timelineChart.container.frame.width / 2 - layerAAMastersAATomVolumeStairs.container.frame.width / 2; + layerAAMastersAATomVolumeStairs.container.frame.position.y = timelineChart.container.frame.height / 2 - layerAAMastersAATomVolumeStairs.container.frame.height / 2; + + layerStatus = chartLayersPanel.getLayerStatus(chartLayersPanel.layerNames.OLIVIA_VOLUMES); + + layerAAMastersAATomVolumeStairs.initialize(DEFAULT_EXCHANGE, DEFAULT_MARKET, INITIAL_DATE, INITIAL_TIME_PERIOD, layerStatus, onOliviaVolumeStairsInitialized); + + function onOliviaVolumeStairsInitialized() { + + // nothing to do here... + + } + + + + /* All Time Layer */ + /* var allTimeChartLayer = newAllTimeChartLayer(); allTimeChartLayer.container.displacement.parentDisplacement = timelineChart.container.displacement; @@ -136,7 +234,7 @@ function newTimelineChart() { allTimeChartLayer.initialize(exchangeId, marketId, marketIndex, chartLayersPanel); /* Orderbook Resistances Layer */ - + /* var orderBooksChartLayer = newOrderBooksChartLayer(); orderBooksChartLayer.container.displacement.parentDisplacement = timelineChart.container.displacement; @@ -155,7 +253,7 @@ function newTimelineChart() { /* Candle Technical Analisys Layer */ - + /* var candleTechnicalAnalisysChartLayer = newCandleTechnicalAnalisysChartLayer(); candleTechnicalAnalisysChartLayer.container.displacement.parentDisplacement = timelineChart.container.displacement; @@ -174,7 +272,7 @@ function newTimelineChart() { /* Volume Technical Analisys Layer */ - + /* var volumeTechnicalAnalisysChartLayer = newVolumeTechnicalAnalisysChartLayer(); volumeTechnicalAnalisysChartLayer.container.displacement.parentDisplacement = timelineChart.container.displacement; @@ -193,7 +291,7 @@ function newTimelineChart() { /* Sopport Resistance Layer */ - + /* var supportResistanceChartLayer = newSupportResistanceChartLayer(); supportResistanceChartLayer.container.displacement.parentDisplacement = timelineChart.container.displacement; @@ -212,7 +310,7 @@ function newTimelineChart() { /* High Low Layer */ - + /* var highLowChartLayer = newHighLowChartLayer(); highLowChartLayer.container.displacement.parentDisplacement = timelineChart.container.displacement; @@ -230,47 +328,14 @@ function newTimelineChart() { highLowChartLayer.initialize(exchangeId, marketId, marketIndex, dailyFilesCursor, chartLayersPanel); - /* Candles Layer */ - - var candleStickChartLayer = newCandleStickChartLayer(); - - candleStickChartLayer.container.displacement.parentDisplacement = timelineChart.container.displacement; - candleStickChartLayer.container.zoom.parentZoom = timelineChart.container.zoom; - candleStickChartLayer.container.frame.parentFrame = timelineChart.container.frame; - - candleStickChartLayer.container.parentContainer = timelineChart.container; - - candleStickChartLayer.container.frame.width = timelineChart.container.frame.width * 1; - candleStickChartLayer.container.frame.height = timelineChart.container.frame.height * 1; - - candleStickChartLayer.container.frame.position.x = timelineChart.container.frame.width / 2 - candleStickChartLayer.container.frame.width / 2; - candleStickChartLayer.container.frame.position.y = timelineChart.container.frame.height / 2 - candleStickChartLayer.container.frame.height / 2; - - candleStickChartLayer.initialize(exchangeId, marketId, marketIndex, dailyFilesCursor, chartLayersPanel, chartLayersPanel); - /* Volume Layer */ - var volumeChartLayer = newVolumeChartLayer(); - - volumeChartLayer.container.displacement.parentDisplacement = timelineChart.container.displacement; - volumeChartLayer.container.zoom.parentZoom = timelineChart.container.zoom; - volumeChartLayer.container.frame.parentFrame = timelineChart.container.frame; - - volumeChartLayer.container.parentContainer = timelineChart.container; - - volumeChartLayer.container.frame.width = timelineChart.container.frame.width * 1; - volumeChartLayer.container.frame.height = timelineChart.container.frame.height * 1; - - volumeChartLayer.container.frame.position.x = timelineChart.container.frame.width / 2 - volumeChartLayer.container.frame.width / 2; - volumeChartLayer.container.frame.position.y = timelineChart.container.frame.height / 2 - volumeChartLayer.container.frame.height / 2; - - volumeChartLayer.initialize(exchangeId, marketId, marketIndex, dailyFilesCursor, chartLayersPanel, chartLayersPanel); /* Accumulated Volume Volume Layer */ - + /* var accumulatedVolumeChartLayer = newAccumulatedVolumeChartLayer(); accumulatedVolumeChartLayer.container.displacement.parentDisplacement = timelineChart.container.displacement; @@ -290,7 +355,7 @@ function newTimelineChart() { /* Forecast Layer */ - + /* var forecastChartLayer = newForecastChartLayer(); forecastChartLayer.container.displacement.parentDisplacement = timelineChart.container.displacement; @@ -307,13 +372,13 @@ function newTimelineChart() { forecastChartLayer.initialize(exchangeId, marketId, marketIndex, dailyFilesCursor, chartLayersPanel); - candleStickChartLayer.container.eventHandler.listenToEvent("Current Candle Changed", forecastChartLayer.setCurrentCandle); - forecastChartLayer.setCurrentCandle(candleStickChartLayer.currentCandle); + // candleStickChartLayer.container.eventHandler.listenToEvent("Current Candle Changed", forecastChartLayer.setCurrentCandle); + // forecastChartLayer.setCurrentCandle(candleStickChartLayer.currentCandle); /* Linear Regression Curve Layer */ - + /* var linearRegressionCurveChartLayer = newLinearRegressionCurve(); linearRegressionCurveChartLayer.container.displacement.parentDisplacement = timelineChart.container.displacement; @@ -329,12 +394,19 @@ function newTimelineChart() { linearRegressionCurveChartLayer.container.frame.position.y = timelineChart.container.frame.height / 2 - candleTechnicalAnalisysChartLayer.container.frame.height / 2; linearRegressionCurveChartLayer.initialize(exchangeId, marketId, marketIndex, dailyFilesCursor, chartLayersPanel); - - + */ /* Add all layers to the internal array */ - timelineChart.layers.push(layerAAMastersAAOliviaCandlesticks); + timelineChart.layers.push(layerAAMastersAATomCandleStairs); // This looks better if it goes below the candles layer. + timelineChart.layers.push(layerAAMastersAATomVolumeStairs); + + + timelineChart.layers.push(layerAAMastersAAOliviaCandlesticks); + timelineChart.layers.push(layerAAMastersAAOliviaVolumes); + + + /* timelineChart.layers.push(allTimeChartLayer); timelineChart.layers.push(orderBooksChartLayer); timelineChart.layers.push(forecastChartLayer); @@ -342,40 +414,38 @@ function newTimelineChart() { timelineChart.layers.push(highLowChartLayer); timelineChart.layers.push(candleTechnicalAnalisysChartLayer); timelineChart.layers.push(volumeTechnicalAnalisysChartLayer); - timelineChart.layers.push(candleStickChartLayer); - timelineChart.layers.push(volumeChartLayer); + timelineChart.layers.push(accumulatedVolumeChartLayer); timelineChart.layers.push(linearRegressionCurveChartLayer); /* Wiring some charts with others using events */ - candleStickChartLayer.container.eventHandler.listenToEvent("Candles Changed", candleTechnicalAnalisysChartLayer.onCandlesChanged); - candleStickChartLayer.container.eventHandler.listenToEvent("Candles Changed", highLowChartLayer.onCandlesChanged); - candleStickChartLayer.container.eventHandler.listenToEvent("Candles Changed", supportResistanceChartLayer.onCandlesChanged); - candleStickChartLayer.container.eventHandler.listenToEvent("Current Candle Info Changed", currentCandlePanel.onCurrentCandleChanged); - candleStickChartLayer.container.eventHandler.listenToEvent("Candles Changed", linearRegressionCurveChartLayer.onCandlesChanged); - volumeChartLayer.container.eventHandler.listenToEvent("Current Volume Info Changed", currentVolumePanel.onCurrentVolumeChanged); - volumeChartLayer.container.eventHandler.listenToEvent("Volumes Changed", volumeTechnicalAnalisysChartLayer.onVolumesChanged); - orderBooksChartLayer.container.eventHandler.listenToEvent("Current Order Book Changed", orderBookPanel.onCurrentOrderBookChanged); + + //orderBooksChartLayer.container.eventHandler.listenToEvent("Current Order Book Changed", orderBookPanel.onCurrentOrderBookChanged); /* Connecting all layers to the panel that provides a user interface to turn them on - visible - off */ chartLayersPanel.container.eventHandler.listenToEvent("Layer Status Changed", layerAAMastersAAOliviaCandlesticks.onLayerStatusChanged); + chartLayersPanel.container.eventHandler.listenToEvent("Layer Status Changed", layerAAMastersAAOliviaVolumes.onLayerStatusChanged); + chartLayersPanel.container.eventHandler.listenToEvent("Layer Status Changed", layerAAMastersAATomCandleStairs.onLayerStatusChanged); + chartLayersPanel.container.eventHandler.listenToEvent("Layer Status Changed", layerAAMastersAATomVolumeStairs.onLayerStatusChanged); + + /* chartLayersPanel.container.eventHandler.listenToEvent("Layer Status Changed", accumulatedVolumeChartLayer.onLayerStatusChanged); - chartLayersPanel.container.eventHandler.listenToEvent("Layer Status Changed", candleStickChartLayer.onLayerStatusChanged); + chartLayersPanel.container.eventHandler.listenToEvent("Layer Status Changed", candleTechnicalAnalisysChartLayer.onLayerStatusChanged); chartLayersPanel.container.eventHandler.listenToEvent("Layer Status Changed", highLowChartLayer.onLayerStatusChanged); - chartLayersPanel.container.eventHandler.listenToEvent("Layer Status Changed", volumeChartLayer.onLayerStatusChanged); + chartLayersPanel.container.eventHandler.listenToEvent("Layer Status Changed", volumeTechnicalAnalisysChartLayer.onLayerStatusChanged); chartLayersPanel.container.eventHandler.listenToEvent("Layer Status Changed", allTimeChartLayer.onLayerStatusChanged); chartLayersPanel.container.eventHandler.listenToEvent("Layer Status Changed", forecastChartLayer.onLayerStatusChanged); chartLayersPanel.container.eventHandler.listenToEvent("Layer Status Changed", orderBooksChartLayer.onLayerStatusChanged); chartLayersPanel.container.eventHandler.listenToEvent("Layer Status Changed", linearRegressionCurveChartLayer.onLayerStatusChanged); - + */ } diff --git a/ViewPort.js b/ViewPort.js index d0e6d3702..96f98cb99 100644 --- a/ViewPort.js +++ b/ViewPort.js @@ -10,7 +10,7 @@ function newViewPort() { let viewPort = { visibleArea: undefined, eventHandler: undefined, - zoomLevel: 0, + zoomLevel: INITIAL_ZOOM_LEVEL, mousePosition: undefined, applyZoom: applyZoom, zoomFontSize: zoomFontSize, @@ -25,7 +25,7 @@ function newViewPort() { initialize: initialize }; - targetLevel = 0; + zoomTargetLevel = INITIAL_ZOOM_LEVEL; let increment = 0.035; @@ -66,17 +66,17 @@ function newViewPort() { function animate() { - if (viewPort.zoomLevel < targetLevel) { - if (targetLevel - viewPort.zoomLevel < ANIMATION_INCREMENT) { - ANIMATION_INCREMENT = Math.abs(targetLevel - viewPort.zoomLevel); + if (viewPort.zoomLevel < zoomTargetLevel) { + if (zoomTargetLevel - viewPort.zoomLevel < ANIMATION_INCREMENT) { + ANIMATION_INCREMENT = Math.abs(zoomTargetLevel - viewPort.zoomLevel); } viewPort.zoomLevel = viewPort.zoomLevel + ANIMATION_INCREMENT; changeZoom(viewPort.zoomLevel - ANIMATION_INCREMENT, viewPort.zoomLevel); } - if (viewPort.zoomLevel > targetLevel) { - if (viewPort.zoomLevel - targetLevel < ANIMATION_INCREMENT) { - ANIMATION_INCREMENT = Math.abs(targetLevel - viewPort.zoomLevel); + if (viewPort.zoomLevel > zoomTargetLevel) { + if (viewPort.zoomLevel - zoomTargetLevel < ANIMATION_INCREMENT) { + ANIMATION_INCREMENT = Math.abs(zoomTargetLevel - viewPort.zoomLevel); } viewPort.zoomLevel = viewPort.zoomLevel - ANIMATION_INCREMENT; changeZoom(viewPort.zoomLevel + ANIMATION_INCREMENT, viewPort.zoomLevel); @@ -97,6 +97,9 @@ function newViewPort() { if (Math.trunc(Math.abs(targetOffset.y - offset.y) * 1000) >= Math.trunc(Math.abs(offsetIncrement.y) * 1000)) { offset.y = offset.y + offsetIncrement.y; + + //console.log("offset.y changed to " + offset.y) + } else { offsetIncrement.y = 0; } @@ -116,6 +119,8 @@ function newViewPort() { viewPort.eventHandler.raiseEvent("Offset Changed", event); + //console.log("displace produced new Offset x = " + offset.x + " y = " + offset.y); + } function displaceTarget(displaceVector) { @@ -129,67 +134,68 @@ function newViewPort() { x: (targetOffset.x - offset.x) / 10, y: (targetOffset.y - offset.y) / 10 }; - + + //console.log("displaceTarget x = " + targetOffset.x + " y = " + targetOffset.y); } function applyZoom(amount) { - + //console.log("applyZoom amount: " + amount); if (amount > 0) { - if (targetLevel > -5) { + if (zoomTargetLevel > -5) { amount = amount * 2; } - if (targetLevel > 10) { + if (zoomTargetLevel > 10) { amount = amount * 3; } - if (targetLevel > 15) { + if (zoomTargetLevel > 15) { amount = amount * 4; } } if (amount < 0) { - if (targetLevel > -4) { + if (zoomTargetLevel > -4) { amount = amount * 2; } - if (targetLevel > 13) { + if (zoomTargetLevel > 13) { amount = amount * 3; } - if (targetLevel > 19) { + if (zoomTargetLevel > 19) { amount = amount * 4; } } - if (targetLevel + amount > 1000) { + if (zoomTargetLevel + amount > 1000) { return false; } - if (targetLevel <= -27 && amount < 0) { + if (zoomTargetLevel <= -27 && amount < 0) { amount = amount / 4; } - if (targetLevel < -27 && amount > 0) { + if (zoomTargetLevel < -27 && amount > 0) { amount = amount / 4; } - if (targetLevel + amount < -28.25) { + if (zoomTargetLevel + amount < -28.25) { return false; } - targetLevel = targetLevel + amount; + zoomTargetLevel = zoomTargetLevel + amount; - ANIMATION_INCREMENT = Math.abs(targetLevel - viewPort.zoomLevel) / 3; + ANIMATION_INCREMENT = Math.abs(zoomTargetLevel - viewPort.zoomLevel) / 3; let event = { - newLevel: targetLevel, + newLevel: zoomTargetLevel, newOffset: offset, type: undefined }; @@ -200,7 +206,7 @@ function newViewPort() { event.type = "Zoom Out"; } - console.log("Zoom Changed > " + event.newLevel); + //console.log("Zoom Changed > " + event.newLevel); viewPort.eventHandler.raiseEvent("Zoom Changed", event); return true; @@ -215,6 +221,8 @@ function newViewPort() { offset.x = offset.x - newMouse.x + viewPort.mousePosition.x; offset.y = offset.y - newMouse.y + viewPort.mousePosition.y; + //console.log("changeZoom produced new Offset x = " + offset.x + " y = " + offset.y); + targetOffset.x = offset.x targetOffset.y = offset.y ; diff --git a/index.html b/index.html index 41eefd8bd..de53c2552 100644 --- a/index.html +++ b/index.html @@ -3,6 +3,13 @@ Advanced Algos + + + + + + + @@ -51,7 +58,7 @@ - + diff --git a/server.js b/server.js index b7d5531a3..ea39703c4 100644 --- a/server.js +++ b/server.js @@ -48,17 +48,17 @@ function onRequestReceivedFromBrowser(request, response) { case "AAMasters": { - + /* const octokit = require('@octokit/rest')() global.atob = require("atob"); - let owner = "AAMasters"; - let repo = "AAOlivia-Plotter"; + let owner = requestParameters[1]; + let repo = requestParameters[2] + "-Plotter"; let branch = "master"; let page = 1; let per_page = 100; let ref = "master"; - let path = "Candlestick.js"; + let path = requestParameters[3]; octokit.repos.getContent({ owner, repo, path, ref }, onContent); @@ -66,13 +66,14 @@ function onRequestReceivedFromBrowser(request, response) { let decoded = atob(result.data.content); - //console.log(decoded); - - //console.log(result); - respondWithContent(decoded.substring(3), response); // Eliminate first 2 bytes of noise. - } + } + */ + + + respondWithFile('../' + requestParameters[2] + "-Plotter" + '/' + requestParameters[3], response); + } break;