From 1a6f6809ab2f5e609340fc8b818bc04ee110e161 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Thu, 3 May 2018 20:54:49 +0200 Subject: [PATCH] Bubbles Support --- .vs/Plotters-Trading/v15/.suo | Bin 26112 -> 27136 bytes History.js | 304 +++++++++++++++++++++------------- 2 files changed, 188 insertions(+), 116 deletions(-) diff --git a/.vs/Plotters-Trading/v15/.suo b/.vs/Plotters-Trading/v15/.suo index 4eb066d87f5e73b31b769ee5bdf896b031ae38e7..66b6f607e074b466776bb22996f226aa8dd33e3b 100644 GIT binary patch literal 27136 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 G4F3W38kvd! diff --git a/History.js b/History.js index 7793b13bb..b8305292c 100644 --- a/History.js +++ b/History.js @@ -16,7 +16,8 @@ y: 0 }, visible: false - } + }, + bubbles: undefined }; /* this is part of the module template */ @@ -35,6 +36,7 @@ let fileSequence; let plotElements = []; // This is where the elements to be plotted are stored before plotting. let plotLines = []; // Here we store the lines of open positions. + let bubbles = []; // Here we store the bubbles with messages from the bot. return thisObject; @@ -103,6 +105,7 @@ plotElements = []; plotLines = []; + bubbles = []; let lastSellRate; let lastSellDate; @@ -144,12 +147,16 @@ profitsAssetA: file[i][11], profitsAssetB: file[i][12], combinedProfitsA: file[i][13], - combinedProfitsB: file[i][14] + combinedProfitsB: file[i][14], + + messageRelevance: file[i][15], + messageTitle: file[i][16], + messageBody: file[i][17] }; history.push(newHistoryRecord); - if (timePeriod === 60000) { + if (timePeriod <= 1 * 60 * 1000) { /* Here we build the lines. */ @@ -195,6 +202,32 @@ } } + + /* Finally we process the text on the file. */ + + /* + if (newHistoryRecord.messageTitle !== "" && newHistoryRecord.messageBody !== "") { + + if (newHistoryRecord.messageRelevance >= 0 && newHistoryRecord.messageRelevance <= 10) { + + if (timePeriod <= dailyFilePeriods[newHistoryRecord.messageRelevance][0]) { + + let bubble = { + title: newHistoryRecord.messageTitle, + body: newHistoryRecord.messageBody, + date: newHistoryRecord.date, + rate: newHistoryRecord.marketRate, + position: { + x: 0, + y: 0 + } + }; + + bubbles.push(bubble); + } + } + } + */ } plotElements.push(history); @@ -218,7 +251,7 @@ let maxValue = { x: MAX_PLOTABLE_DATE.valueOf(), - y: nextPorwerOf10(getMaxRate()) + y: nextPorwerOf10(USDT_BTC_HTH) }; @@ -319,7 +352,7 @@ if (record.sellExecRate > 0) { - opacity = '1'; + opacity = '0.3'; let point1 = { x: record.date, @@ -364,114 +397,6 @@ browserCanvasContext.closePath(); - browserCanvasContext.strokeStyle = 'rgba(130, 9, 9, ' + opacity + ')'; - browserCanvasContext.stroke(); - - } - - /* Draw a green triangle on exec buy */ - - if (record.buyExecRate > 0) { - - opacity = '1'; - - let point1 = { - x: record.date, - y: record.buyExecRate - }; - - let point2 = { - x: record.date + timePeriod / 7 * 2, - y: record.buyExecRate - }; - - let point3 = { - x: record.date - timePeriod / 7 * 2, - y: record.buyExecRate - }; - - point1 = timeLineCoordinateSystem.transformThisPoint(point1); - point1 = transformThisPoint(point1, thisObject.container); - point1 = viewPort.fitIntoVisibleArea(point1); - - point2 = timeLineCoordinateSystem.transformThisPoint(point2); - point2 = transformThisPoint(point2, thisObject.container); - point2 = viewPort.fitIntoVisibleArea(point2); - - point3 = timeLineCoordinateSystem.transformThisPoint(point3); - point3 = transformThisPoint(point3, thisObject.container); - point3 = viewPort.fitIntoVisibleArea(point3); - - let diff = point2.x - point3.x; - point2.y = point2.y + diff; - point3.y = point3.y + diff; - - point2 = viewPort.fitIntoVisibleArea(point2); - point3 = viewPort.fitIntoVisibleArea(point3); - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(point1.x, point1.y); - browserCanvasContext.lineTo(point2.x, point2.y); - browserCanvasContext.lineTo(point3.x, point3.y); - browserCanvasContext.lineTo(point1.x, point1.y); - - browserCanvasContext.closePath(); - - browserCanvasContext.strokeStyle = 'rgba(27, 105, 7, ' + opacity + ')'; - browserCanvasContext.stroke(); - - } - - /* Draw a red inverted triangle on sell */ - - if (record.lastSellRate > 0) { - - opacity = '1'; - - let point1 = { - x: record.date, - y: record.lastSellRate - }; - - let point2 = { - x: record.date + timePeriod / 7 * 2, - y: record.lastSellRate - }; - - let point3 = { - x: record.date - timePeriod / 7 * 2, - y: record.lastSellRate - }; - - point1 = timeLineCoordinateSystem.transformThisPoint(point1); - point1 = transformThisPoint(point1, thisObject.container); - point1 = viewPort.fitIntoVisibleArea(point1); - - point2 = timeLineCoordinateSystem.transformThisPoint(point2); - point2 = transformThisPoint(point2, thisObject.container); - point2 = viewPort.fitIntoVisibleArea(point2); - - point3 = timeLineCoordinateSystem.transformThisPoint(point3); - point3 = transformThisPoint(point3, thisObject.container); - point3 = viewPort.fitIntoVisibleArea(point3); - - let diff = point2.x - point3.x; - point2.y = point2.y - diff; - point3.y = point3.y - diff; - - point2 = viewPort.fitIntoVisibleArea(point2); - point3 = viewPort.fitIntoVisibleArea(point3); - - browserCanvasContext.beginPath(); - - browserCanvasContext.moveTo(point1.x, point1.y); - browserCanvasContext.lineTo(point2.x, point2.y); - browserCanvasContext.lineTo(point3.x, point3.y); - browserCanvasContext.lineTo(point1.x, point1.y); - - browserCanvasContext.closePath(); - if (isCurrentRecord === false) { browserCanvasContext.fillStyle = 'rgba(219, 18, 18, ' + opacity + ')'; } else { @@ -485,11 +410,135 @@ } + /* Draw a green triangle on exec buy */ + + if (record.buyExecRate > 0) { + + opacity = '0.3'; + + let point1 = { + x: record.date, + y: record.buyExecRate + }; + + let point2 = { + x: record.date + timePeriod / 7 * 2, + y: record.buyExecRate + }; + + let point3 = { + x: record.date - timePeriod / 7 * 2, + y: record.buyExecRate + }; + + point1 = timeLineCoordinateSystem.transformThisPoint(point1); + point1 = transformThisPoint(point1, thisObject.container); + point1 = viewPort.fitIntoVisibleArea(point1); + + point2 = timeLineCoordinateSystem.transformThisPoint(point2); + point2 = transformThisPoint(point2, thisObject.container); + point2 = viewPort.fitIntoVisibleArea(point2); + + point3 = timeLineCoordinateSystem.transformThisPoint(point3); + point3 = transformThisPoint(point3, thisObject.container); + point3 = viewPort.fitIntoVisibleArea(point3); + + let diff = point2.x - point3.x; + point2.y = point2.y + diff; + point3.y = point3.y + diff; + + point2 = viewPort.fitIntoVisibleArea(point2); + point3 = viewPort.fitIntoVisibleArea(point3); + + browserCanvasContext.beginPath(); + + browserCanvasContext.moveTo(point1.x, point1.y); + browserCanvasContext.lineTo(point2.x, point2.y); + browserCanvasContext.lineTo(point3.x, point3.y); + browserCanvasContext.lineTo(point1.x, point1.y); + + browserCanvasContext.closePath(); + + if (isCurrentRecord === false) { + browserCanvasContext.fillStyle = 'rgba(64, 217, 26, ' + opacity + ')'; + } else { + browserCanvasContext.fillStyle = 'rgba(255, 233, 31, ' + opacity + ')'; /* highlight the current record */ + } + + browserCanvasContext.fill(); + + browserCanvasContext.strokeStyle = 'rgba(27, 105, 7, ' + opacity + ')'; + browserCanvasContext.stroke(); + + } + + /* Draw a red inverted triangle on sell */ + + if (record.lastSellRate > 0) { + + opacity = '0.3'; + + let point1 = { + x: record.date, + y: record.lastSellRate + }; + + let point2 = { + x: record.date + timePeriod / 7 * 2, + y: record.lastSellRate + }; + + let point3 = { + x: record.date - timePeriod / 7 * 2, + y: record.lastSellRate + }; + + point1 = timeLineCoordinateSystem.transformThisPoint(point1); + point1 = transformThisPoint(point1, thisObject.container); + point1 = viewPort.fitIntoVisibleArea(point1); + + point2 = timeLineCoordinateSystem.transformThisPoint(point2); + point2 = transformThisPoint(point2, thisObject.container); + point2 = viewPort.fitIntoVisibleArea(point2); + + point3 = timeLineCoordinateSystem.transformThisPoint(point3); + point3 = transformThisPoint(point3, thisObject.container); + point3 = viewPort.fitIntoVisibleArea(point3); + + let diff = point2.x - point3.x; + point2.y = point2.y - diff; + point3.y = point3.y - diff; + + point2 = viewPort.fitIntoVisibleArea(point2); + point3 = viewPort.fitIntoVisibleArea(point3); + + browserCanvasContext.beginPath(); + + browserCanvasContext.moveTo(point1.x, point1.y); + browserCanvasContext.lineTo(point2.x, point2.y); + browserCanvasContext.lineTo(point3.x, point3.y); + browserCanvasContext.lineTo(point1.x, point1.y); + + browserCanvasContext.closePath(); + + if (isCurrentRecord === false) { + browserCanvasContext.fillStyle = 'rgba(255, 255, 255, ' + opacity + ')'; + } else { + browserCanvasContext.fillStyle = 'rgba(255, 233, 31, ' + opacity + ')'; /* highlight the current record */ + } + + browserCanvasContext.fill(); + + browserCanvasContext.strokeStyle = 'rgba(130, 9, 9, ' + opacity + ')'; + browserCanvasContext.stroke(); + + } + /* Draw a green triangle on buy */ if (record.lastBuyRate > 0) { - opacity = '1'; + opacity = '0.3'; let point1 = { x: record.date, @@ -535,7 +584,7 @@ browserCanvasContext.closePath(); if (isCurrentRecord === false) { - browserCanvasContext.fillStyle = 'rgba(64, 217, 26, ' + opacity + ')'; + browserCanvasContext.fillStyle = 'rgba(255, 255, 255, ' + opacity + ')'; } else { browserCanvasContext.fillStyle = 'rgba(255, 233, 31, ' + opacity + ')'; /* highlight the current record */ } @@ -561,7 +610,7 @@ let line = lines[i]; - opacity = '0.5'; + opacity = '0.2'; let point1 = { x: line.x1, @@ -601,6 +650,29 @@ browserCanvasContext.stroke(); } + + /* Now we calculate the anchor position of bubbles. */ + + /* + for (let i = 0; i < bubbles.length; i++) { + + let bubble = bubbles[i]; + + opacity = '0.2'; + + bubble.position = { + x: bubble.date, + y: bubble.rate + }; + + bubble.position = timeLineCoordinateSystem.transformThisPoint(bubble.position); + bubble.position = transformThisPoint(bubble.position, thisObject.container); + bubble.position = viewPort.fitIntoVisibleArea(bubble.position); + + } + + thisObject.bubbles = bubbles; + */ } /*