Olivia and Tom working

This commit is contained in:
Luis Fernando Molina committed 2018-02-23 18:18:11 +01:00
1 parent 42d9557a56
commit b041c94eba
13 files changed
+375 -151

No files matched your search

Binary file not shown.
+1 -1
View File
@@ -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;
+10 -4
View File
@@ -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);
+165 -35
View File
@@ -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'
}
}
]
}
+1 -1
View File
@@ -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) {
+8 -8
View File
@@ -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;
+2 -1
View File
@@ -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);
+4 -3
View File
@@ -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 = [];
+1 -1
View File
@@ -102,7 +102,7 @@ function newControlPanel() {
viewPort.eventHandler.listenToEvent("Zoom Changed", onZoomChanged);
PLAY_STEP = recalculatePeriod(viewPort.zoomLevel);
PLAY_STEP = INITIAL_TIME_PERIOD;
}
+133 -63
View File
@@ -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);
*/
}
+32 -24
View File
@@ -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 ;
+8 -1
View File
@@ -3,6 +3,13 @@
<head>
<meta charset="utf-8" />
<title>Advanced Algos</title>
<script type="text/javascript" src="AAMasters/AAOlivia/Candles.js"></script>
<script type="text/javascript" src="AAMasters/AAOlivia/Volumes.js"></script>
<script type="text/javascript" src="AAMasters/AATom/CandleStairs.js"></script>
<script type="text/javascript" src="AAMasters/AATom/VolumeStairs.js"></script>
<script type="text/javascript" src="Ecosystem.js"></script>
<script type="text/javascript" src="FileServer.js"></script>
<script type="text/javascript" src="FileCloud.js"></script>
@@ -51,7 +58,7 @@
<script type="text/javascript" src="Dashboard.js"></script>
<script type="text/javascript" src="AccumulatedVolumeBar.js"></script>
<script type="text/javascript" src="AAMasters/AAOlivia/Candlestick.js"></script>
<script type="text/javascript" src="Azure/azure-storage.common.js"></script>
<script type="text/javascript" src="Azure/azure-storage.file.js"></script>
+10 -9
View File
@@ -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;