From 5fff4f93f985a983f434c5e37babebe29f015810 Mon Sep 17 00:00:00 2001 From: Luis Fernando Molina Date: Fri, 3 May 2019 10:19:30 +0200 Subject: [PATCH] Adjustments to doble the value --- TradingSimulation.js | 75 ++++----------------- TradingSimulationPanel.js | 134 +++++++++++++++++++++++--------------- 2 files changed, 96 insertions(+), 113 deletions(-) diff --git a/TradingSimulation.js b/TradingSimulation.js index e61f1d813..2b6a9aec2 100644 --- a/TradingSimulation.js +++ b/TradingSimulation.js @@ -324,33 +324,7 @@ for (let i = 0; i < dailyFile.length; i++) { - let record = { - begin: undefined, - end: undefined, - type: undefined, - rate: undefined, - amount: undefined, - balanceA: undefined, - balanceB: undefined, - profit: undefined, - lastProfit: undefined, - stopLoss: undefined, - roundtrips: undefined, - hits: undefined, - fails: undefined, - hitRatio: undefined, - ROI: undefined, - periods: undefined, - days: undefined, - anualizedRateOfReturn: undefined, - sellRate: undefined, - lastProfitPercent: undefined, - strategy: undefined, - strategyPhase: undefined, - buyOrder: undefined, - stopLossPhase: undefined, - buyOrderPhase: undefined - }; + let record = {}; record.begin = dailyFile[i][0]; record.end = dailyFile[i][1]; @@ -377,6 +351,7 @@ record.buyOrder = dailyFile[i][22]; record.stopLossPhase = dailyFile[i][23]; record.buyOrderPhase = dailyFile[i][24]; + record.sellAmount = dailyFile[i][26]; // 25 is the message for the executor if (record.begin >= farLeftDate.valueOf() && record.end <= farRightDate.valueOf()) { @@ -439,33 +414,7 @@ for (let i = 0; i < marketFile.length; i++) { - let record = { - begin: undefined, - end: undefined, - type: undefined, - rate: undefined, - amount: undefined, - balanceA: undefined, - balanceB: undefined, - profit: undefined, - lastProfit: undefined, - stopLoss: undefined, - roundtrips: undefined, - hits: undefined, - fails: undefined, - hitRatio: undefined, - ROI: undefined, - periods: undefined, - days: undefined, - anualizedRateOfReturn: undefined, - sellRate: undefined, - lastProfitPercent: undefined, - strategy: undefined, - strategyPhase: undefined, - buyOrder: undefined, - stopLossPhase: undefined, - buyOrderPhase: undefined - }; + let record = {}; record.begin = marketFile[i][0]; record.end = marketFile[i][1]; @@ -492,6 +441,7 @@ record.buyOrder = marketFile[i][22]; record.stopLossPhase = marketFile[i][23]; record.buyOrderPhase = marketFile[i][24]; + record.sellAmount = marketFile[i][26]; // 25 is the message for the executor if (record.begin >= leftDate.valueOf() && record.end <= rightDate.valueOf()) { @@ -554,7 +504,7 @@ /* Now we calculate and plot the records */ - for (let i = 1; i < records.length; i++) { // We do not start in 0 so as to be able to read the previous record i - 1 + for (let i = 0; i < records.length; i++) { // We do not start in 0 so as to be able to read the previous record i - 1 record = records[i]; @@ -567,16 +517,18 @@ }; thisObject.container.eventHandler.raiseEvent("Current Record Changed", currentRecord); } - + let stopLossPhase = 0; let buyOrderPhase = 0; - if (record.stopLossPhase !== records[i - 1].stopLossPhase) { - stopLossPhase = record.stopLossPhase; - } + if (i > 0) { + if (record.stopLossPhase !== records[i - 1].stopLossPhase) { + stopLossPhase = record.stopLossPhase; + } - if (record.buyOrderPhase !== records[i - 1].buyOrderPhase) { - buyOrderPhase = record.buyOrderPhase; + if (record.buyOrderPhase !== records[i - 1].buyOrderPhase) { + buyOrderPhase = record.buyOrderPhase; + } } let recordPoint4 = { @@ -811,5 +763,6 @@ + diff --git a/TradingSimulationPanel.js b/TradingSimulationPanel.js index 0d1bd24f1..a6fffcdf8 100644 --- a/TradingSimulationPanel.js +++ b/TradingSimulationPanel.js @@ -6,7 +6,8 @@ function newAAMastersPlottersTradingSimulationTradingSimulationTradingSimulation container: undefined, draw: draw, getContainer: getContainer, - initialize: initialize + initialize: initialize, + finalize: finalize }; let container = newContainer(); @@ -39,6 +40,13 @@ function newAAMastersPlottersTradingSimulationTradingSimulationTradingSimulation } + function finalize() { + + canvas.bottomSpace.destroyControl(controlHandler) + controlHandler = undefined + + } + function getContainer(point) { var container; @@ -202,8 +210,9 @@ function newAAMastersPlottersTradingSimulationTradingSimulationTradingSimulation params = {} params.VALUE = currentRecord.innerRecord.balanceA; + params.INIT_VALUE = 1 params.MIN_VALUE = 0.5 - params.MAX_VALUE = 1 + params.MAX_VALUE = 2 params.ASSET_LABEL = 'Asset A' params.ASSET_NAME = DEFAULT_MARKET.assetB + ' ' params.LEFT_OFFSET = 100 @@ -213,7 +222,8 @@ function newAAMastersPlottersTradingSimulationTradingSimulationTradingSimulation params = {} params.VALUE = currentRecord.innerRecord.balanceB; params.MIN_VALUE = 0 - params.MAX_VALUE = 6000 + params.INIT_VALUE = currentRecord.innerRecord.rate * currentRecord.innerRecord.sellAmount; + params.MAX_VALUE = params.INIT_VALUE * 2; params.ASSET_LABEL = 'Asset B' params.ASSET_NAME = DEFAULT_MARKET.assetA + ' ' params.LEFT_OFFSET = 220 @@ -241,7 +251,7 @@ function newAAMastersPlottersTradingSimulationTradingSimulationTradingSimulation fontSize = 15; - browserCanvasContext.font = "bold " + fontSize + 'px ' + UI_FONT.WHITE + ' Saira'; + browserCanvasContext.font = "bold " + fontSize + 'px ' + UI_FONT.PRIMARY label = 'ASSET BALANCES' @@ -290,34 +300,58 @@ function newAAMastersPlottersTradingSimulationTradingSimulationTradingSimulation const DEFAULT_THICKNESS = 2; const VALUE_THICKNESS = 4; + const VALUE_BG_THICKNESS = 1; const BAR_RADIOUS = RADIOUS * 0.9; - const BAR_START_ANGLE = 0.9 * Math.PI; - const BAR_END_ANGLE = 2.1 * Math.PI; - const CURRENT_VALUE_ANGLE = params.VALUE * (BAR_END_ANGLE - BAR_START_ANGLE) / params.MAX_VALUE + BAR_START_ANGLE - const MIN_VALUE_ANGLE = params.MIN_VALUE * (BAR_END_ANGLE - BAR_START_ANGLE) / params.MAX_VALUE + BAR_START_ANGLE - let PROFIT_VALUE_ANGLE = (params.VALUE - params.MAX_VALUE) * (BAR_END_ANGLE - BAR_START_ANGLE) / params.MAX_VALUE + BAR_START_ANGLE - if (PROFIT_VALUE_ANGLE > BAR_END_ANGLE) { PROFIT_VALUE_ANGLE = BAR_END_ANGLE } + let BAR_START_ANGLE = 0.9 * Math.PI; + let BAR_END_ANGLE = 2.1 * Math.PI; + let CURRENT_VALUE_ANGLE = params.VALUE * (BAR_END_ANGLE - BAR_START_ANGLE) / params.MAX_VALUE + BAR_START_ANGLE + let MIN_VALUE_ANGLE = params.MIN_VALUE * (BAR_END_ANGLE - BAR_START_ANGLE) / params.MAX_VALUE + BAR_START_ANGLE + let INIT_VALUE_ANGLE = params.INIT_VALUE * (BAR_END_ANGLE - BAR_START_ANGLE) / params.MAX_VALUE + BAR_START_ANGLE + let PROFIT_VALUE_ANGLE = CURRENT_VALUE_ANGLE - browserCanvasContext.setLineDash([0, 0]) + if (CURRENT_VALUE_ANGLE > INIT_VALUE_ANGLE) { CURRENT_VALUE_ANGLE = INIT_VALUE_ANGLE } - browserCanvasContext.beginPath(); - browserCanvasContext.arc(centerPoint.x, centerPoint.y, BAR_RADIOUS, BAR_START_ANGLE, MIN_VALUE_ANGLE) + if (params.VALUE > 0) { - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', ' + OPACITY + ')' - browserCanvasContext.lineWidth = DEFAULT_THICKNESS - browserCanvasContext.stroke() - browserCanvasContext.closePath(); + browserCanvasContext.setLineDash([0, 0]) - browserCanvasContext.beginPath(); - browserCanvasContext.arc(centerPoint.x, centerPoint.y, BAR_RADIOUS, MIN_VALUE_ANGLE, BAR_END_ANGLE) + browserCanvasContext.beginPath(); + browserCanvasContext.arc(centerPoint.x, centerPoint.y, BAR_RADIOUS, BAR_START_ANGLE, MIN_VALUE_ANGLE) - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.WHITE + ', ' + OPACITY + ')' - browserCanvasContext.lineWidth = DEFAULT_THICKNESS - browserCanvasContext.stroke() - browserCanvasContext.closePath(); + browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.TITANIUM_YELLOW + ', ' + OPACITY + ')' + browserCanvasContext.lineWidth = VALUE_BG_THICKNESS + browserCanvasContext.stroke() + browserCanvasContext.closePath(); - if (params.VALUE > 0 && params.VALUE <= params.MAX_VALUE) { + browserCanvasContext.beginPath(); + browserCanvasContext.arc(centerPoint.x, centerPoint.y, BAR_RADIOUS, MIN_VALUE_ANGLE, CURRENT_VALUE_ANGLE) + + browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.WHITE + ', ' + OPACITY + ')' + browserCanvasContext.lineWidth = VALUE_BG_THICKNESS + browserCanvasContext.stroke() + browserCanvasContext.closePath(); + + browserCanvasContext.beginPath(); + browserCanvasContext.arc(centerPoint.x, centerPoint.y, BAR_RADIOUS, CURRENT_VALUE_ANGLE, INIT_VALUE_ANGLE) + + browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.RED + ', ' + OPACITY + ')' + browserCanvasContext.lineWidth = VALUE_BG_THICKNESS + browserCanvasContext.stroke() + browserCanvasContext.closePath(); + + if (PROFIT_VALUE_ANGLE > INIT_VALUE_ANGLE) { + + browserCanvasContext.beginPath(); + browserCanvasContext.arc(centerPoint.x, centerPoint.y, BAR_RADIOUS, INIT_VALUE_ANGLE, PROFIT_VALUE_ANGLE) + + browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.GREEN + ', ' + OPACITY + ')' + browserCanvasContext.lineWidth = VALUE_BG_THICKNESS + browserCanvasContext.stroke() + browserCanvasContext.closePath(); + } + + browserCanvasContext.setLineDash([2, 3]) browserCanvasContext.beginPath(); browserCanvasContext.arc(centerPoint.x, centerPoint.y, BAR_RADIOUS, BAR_START_ANGLE, MIN_VALUE_ANGLE) @@ -336,33 +370,23 @@ function newAAMastersPlottersTradingSimulationTradingSimulationTradingSimulation browserCanvasContext.closePath(); browserCanvasContext.beginPath(); - browserCanvasContext.arc(centerPoint.x, centerPoint.y, BAR_RADIOUS, CURRENT_VALUE_ANGLE, BAR_END_ANGLE) + browserCanvasContext.arc(centerPoint.x, centerPoint.y, BAR_RADIOUS, CURRENT_VALUE_ANGLE, INIT_VALUE_ANGLE) browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.RED + ', ' + OPACITY + ')' - browserCanvasContext.lineWidth = DEFAULT_THICKNESS - browserCanvasContext.stroke() - browserCanvasContext.closePath(); - - } - - if (params.VALUE > params.MAX_VALUE) { - - browserCanvasContext.beginPath(); - browserCanvasContext.arc(centerPoint.x, centerPoint.y, BAR_RADIOUS, BAR_START_ANGLE, BAR_END_ANGLE) - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.WHITE + ', ' + OPACITY + ')' - browserCanvasContext.lineWidth = DEFAULT_THICKNESS - browserCanvasContext.stroke() - browserCanvasContext.closePath(); - - browserCanvasContext.beginPath(); - browserCanvasContext.arc(centerPoint.x, centerPoint.y, BAR_RADIOUS, BAR_START_ANGLE, PROFIT_VALUE_ANGLE) - - browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.GREEN + ', ' + OPACITY + ')' browserCanvasContext.lineWidth = VALUE_THICKNESS browserCanvasContext.stroke() browserCanvasContext.closePath(); + if (PROFIT_VALUE_ANGLE > INIT_VALUE_ANGLE) { + + browserCanvasContext.beginPath(); + browserCanvasContext.arc(centerPoint.x, centerPoint.y, BAR_RADIOUS, INIT_VALUE_ANGLE, PROFIT_VALUE_ANGLE) + + browserCanvasContext.strokeStyle = 'rgba(' + UI_COLOR.GREEN + ', ' + OPACITY + ')' + browserCanvasContext.lineWidth = VALUE_THICKNESS + browserCanvasContext.stroke() + browserCanvasContext.closePath(); + } } /* Common Variables */ @@ -376,18 +400,18 @@ function newAAMastersPlottersTradingSimulationTradingSimulationTradingSimulation fontSize = 25; - browserCanvasContext.font = "bold " + fontSize + 'px ' + UI_FONT.WHITE + ' Saira'; + browserCanvasContext.font = "bold " + fontSize + 'px ' + UI_FONT.PRIMARY label = params.VALUE; if (isNaN(label) === false) { label = Number(label); - label = label.toLocaleString(); + if (label === 0) { label = label.toFixed(2) } else { label = label.toLocaleString() } } label = label.substring(0, 5); - xOffset = label.length / 2 * fontSize * FONT_ASPECT_RATIO; + xOffset = label.length / 2 * fontSize * FONT_ASPECT_RATIO + 10; labelPoint = { x: centerPoint.x - xOffset, @@ -401,11 +425,11 @@ function newAAMastersPlottersTradingSimulationTradingSimulationTradingSimulation fontSize = 15; - browserCanvasContext.font = "bold " + fontSize + 'px ' + UI_FONT.WHITE + ' Saira'; + browserCanvasContext.font = "bold " + fontSize + 'px ' + UI_FONT.PRIMARY label = params.ASSET_LABEL; - xOffset = label.length / 2 * fontSize * FONT_ASPECT_RATIO; + xOffset = label.length / 2 * fontSize * FONT_ASPECT_RATIO + 7; yOffset = 22 labelPoint = { @@ -420,11 +444,11 @@ function newAAMastersPlottersTradingSimulationTradingSimulationTradingSimulation fontSize = 15; - browserCanvasContext.font = "bold " + fontSize + 'px ' + UI_FONT.WHITE + ' Saira'; + browserCanvasContext.font = "bold " + fontSize + 'px ' + UI_FONT.PRIMARY label = params.ASSET_NAME; - xOffset = label.length / 2 * fontSize * FONT_ASPECT_RATIO; + xOffset = label.length / 2 * fontSize * FONT_ASPECT_RATIO + 5; yOffset = - 15 labelPoint = { @@ -447,3 +471,9 @@ function newAAMastersPlottersTradingSimulationTradingSimulationTradingSimulation + + + + + +