function newEcosystem() { let ecosystem = { getTeam: getTeam, getBot: getBot, getProduct: getProduct, getLayer: getLayer, getExchange: getExchange, initialize: initialize } return ecosystem; const ECOSYSTEM = { consortium: { organization: { name: "AAConsortium", type: "Non-For-Profit", displayName: "Advanced Algos Consortium", location: "Switzerland", leader: "Luis Molina", logo: "AAConsortium.jpg" }, web: "www.AdvancedAlgos.org", github: { org: "Advanced Algos", repos: { repo: { name: "AAWebSite", description: "AA Consortium Web Site.", openIssues: 0, openPullRequests: 0, contributors: 1 }, repo: { name: "AAWebPlatform", description: "The part of the AA Platform that runs on web browsers.", openIssues: 0, openPullRequests: 0, contributors: 1 }, repo: { name: "AACloudPlatform", description: "The part of the AA Platform that runs on the cloud.", openIssues: 0, openPullRequests: 0, contributors: 1 } } }, members: { member: { organizationName: "AAMasters", type: "devTeam", delegate: "Luis Molina", votes: 1 }, member: { organizationName: "AAOrion LLC", type: "cloudHosting", delegate: "Luis Molina", votes: 5 }, member: { organizationName: "AAExchange Masters", type: "exchangeWrapper", delegate: "Luis Molina", votes: 1 } } }, devTeams: { team: { codeName: "AAMasters", organization: { name: "AAMasters", type: "Open Source Community", displayName: "AA Masters", location: "Global", leader: "Luis Molina", logo: "AAMasters.jpg" }, teamMembers: { member: { displayName: "Luis Molina", githubUsername: "Luis-Fernando-Molina", profilePicture: "Luis.jpg", tokens: { percentDistribution: 100, totalCollected: 121.45 } } }, bots: { bot: { codeName: "AACharly", displayName: "Charly", type: "Extract", version: { number: "1.0.0", status: "Mantained", // Discontinued }, products: { product: { codeName: "Trades", displayName: "Trades", description: "Each file contains trades records of one market at one exchange in a period of time of one minute.", storageAccount: "aacharly", filePath: "@Exchange/Output/Trades/@Year/@Month/@Date/@Hour/@Minute", 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: "Trades", displayName: "Trades", exchangeList: ["Poloniex"], validPeriods: ["01-min"], plotter: { devTeam: "AAMasters", repo: "AACharly-Plotter", moduleName: "TradeList", target: "Timeline" } } } } }, processes: { process: { name: "Poloniex-Live-Trades", description: "Retrieves the trades done at the current minute and the previous minute and saves them at the storage account." }, process: { name: "Poloniex-Historic-Trades", description: "Retrieves and saves the historical trades in batches going backwards from the current time until reaching the begining of the market." }, process: { name: "Poloniex-Hole-Fixing", description: "Scans the trades saved by the Live Trades and Historic Trades processes searching for missing records. Once a hole is found on the data set, it patches it by retrieving the missing records from the exchange." } }, directDependencies: {}, directDependents: { bot: { devTeam: "AAMasters", codeName: "AABruce" }, bot: { devTeam: "AAMasters", codeName: "AAOlivia" } }, collaboratorsList: [], github: { org: "AAMasters", repos: { repo: { name: "AACharly-Bot", description: "Produces a data-set of all trades of every market in multiple exchanges.", openIssues: 0, openPullRequests: 0, contributors: 1 }, repo: { name: "AACharly-Plotter", description: "Plotters plug-ins to browse trades at the AA Web Platform.", openIssues: 0, openPullRequests: 0, contributors: 1 } } }, storage: { sas: '?sv=2017-04-17&ss=f&srt=sco&sp=rc&se=2018-12-31T02:33:36Z&st=2018-02-01T18:33:36Z&spr=https&sig=xFTcopdKq0f60wl2iuukbtIpcLwxZVKzlw5BzpJfo5g%3D', fileUri: 'https://' + 'aacharly' + '.file.core.windows.net' } }, bot: { codeName: "AACarol", displayName: "Carol", type: "Extract", version: { number: "1.0.0", status: "Mantained", // Discontinued }, products: { product: { codeName: "Order Book", displayName: "Order Book", description: "Each file contains the bids and asks positions at each market at a certain moment in time.", storageAccount: "aacarol", filePath: "@Exchange/Output/Order-Books/@Year/@Month/@Date/@Hour/@Minute", 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: "Order Book", displayName: "Order Book", exchangeList: ["Poloniex"], validPeriods: ["06-hs", "03-hs", "01-hs", "30-min", "10-min", "05-min", "01-min"], plotter: { devTeam: "AAMasters", repo: "AACarol-Plotter", moduleName: "OrderBook", target: "Panel" } } } }, product: { codeName: "Order Books", displayName: "Order Books", description: "Each file contains the sumarized bids and asks positions at each market at a certain moment in time. Agreggation makes the dataset optimal for different time periods.", storageAccount: "aacarol", filePath: "@Exchange/Output/Aggregated-Order-Books/@Period/@Year/@Month/@Date/@Hour/@Minute", 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: "Order Books", displayName: "Order Books", exchangeList: ["Poloniex"], validPeriods: ["06-hs", "03-hs", "01-hs", "30-min", "10-min", "05-min", "01-min"], plotter: { devTeam: "AAMasters", repo: "AACarol-Plotter", moduleName: "OrderBooks", target: "Timeline" } } } } }, processes: { process: { name: "Poloniex-Order-Books", description: "Retrieves the order books at the current minute and saves them at the storage account." }, process: { name: "Aggregated-Order-Books", description: "Aggregates the order books information to be viewed at different time periods." }, }, directDependencies: {}, directDependents: {}, collaboratorsList: [], github: { org: "AAMasters", repos: { repo: { name: "AACarol", description: "Produces a data-set with a snapshot of all markets order books every minute.", openIssues: 0, openPullRequests: 0, contributors: 1 } } }, storage: { sas: '?sv=2017-04-17&ss=f&srt=sco&sp=r&se=2018-12-01T00:09:44Z&st=2017-12-01T13:09:44Z&spr=https,http&sig=J60UlQuUqh9Hd1Pm0PqIF6yari3D3TkGEz1fSNQJWks%3D', fileUri: 'https://' + 'aadata' + '.file.core.windows.net' } }, bot: { codeName: "AABruce", displayName: "Bruce", type: "Indicator", version: { number: "1.0.0", status: "Mantained", // Discontinued }, products: { product: { codeName: "Candles", displayName: "One Minute Candles in Daily Files", description: "Each file contains the candles of one whole day on a one minute time period.", storageAccount: "aabruce", filePath: "@Exchange/Output/Candles/One-Min/@Year/@Month/@Date", 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: "Candles", displayName: "Candlesticks", exchangeList: ["Poloniex"], validPeriods: ["30-min", "10-min", "05-min", "01-min"], plotter: { devTeam: "AAMasters", repo: "AABruce-Plotter", moduleName: "Candlesticks", target: "Timeline", dependencies: { dependency: { devTeam: "AAMasters", repo: "Plotters-Utilities", moduleName: "Candlesticks" } } } } } }, product: { codeName: "Volumes", displayName: "One Minute Volumes in Daily Files", description: "Each file contains the volumes of one whole day on a one minute time period.", storageAccount: "aabruce", filePath: "@Exchange/Output/Volumes/One-Min/@Year/@Month/@Date", 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: "Volumes", displayName: "Sell and Buy Volumes", exchangeList: ["Poloniex"], validPeriods: ["06-hs", "03-hs", "01-hs", "30-min", "10-min", "05-min", "01-min"], plotter: { devTeam: "AAMasters", repo: "AABruce-Plotter", moduleName: "Volumes", target: "Timeline", dependencies: { dependency: { devTeam: "AAMasters", repo: "Plotters-Utilities", moduleName: "Volumes" } } } } } } }, 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-31T02:32:04Z&st=2018-02-01T18:32:04Z&spr=https&sig=SbZI6bvAE1MBxna2NOvfgMroPFZNjAyaHUsAPvh11hg%3D', fileUri: 'https://' + 'aabruce' + '.file.core.windows.net' } }, bot: { codeName: "AAOlivia", displayName: "Olivia", type: "Indicator", version: { number: "1.0.0", status: "Mantained", // Discontinued }, products: { product: { codeName: "Candles", displayName: "Market Candles per Period", description: "A set of files per period that contains all candles of one whole market.", storageAccount: "aaolivia", filePath: "@Exchange/Output/Candles/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: "Candlesticks", displayName: "Candlesticks", exchangeList: ["Poloniex"], validPeriods: ["24-hs", "12-hs", "06-hs", "03-hs", "01-hs"], plotter: { devTeam: "AAMasters", repo: "AAOlivia-Plotter", moduleName: "Candlesticks", target: "Timeline", dependencies: { dependency: { devTeam: "AAMasters", repo: "Plotters-Utilities", moduleName: "Candlesticks" } } } } } }, product: { codeName: "Volumes", 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", 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: "Volumes", displayName: "Volumes", exchangeList: ["Poloniex"], validPeriods: ["24-hs", "12-hs", "06-hs", "03-hs", "01-hs"], plotter: { devTeam: "AAMasters", repo: "AAOlivia-Plotter", moduleName: "Volumes", target: "Timeline", dependencies: { dependency: { devTeam: "AAMasters", repo: "Plotters-Utilities", moduleName: "Volumes" } } } } } } }, 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=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' } } } } }, clouds: { cloudHosting: { codeName: "AAOrion", organization: { name: "AAOrion LLC", type: "Company", displayName: "Orion", location: "USA", leader: "Luis Molina", logo: "AAOrion.jpg" }, github: { org: "AAOrion", repos: { repo: { name: "AzureAAHosting", description: "AA Azure Hosting Web Site", openIssues: 0, openPullRequests: 0, contributors: 1 } } }, underlayingCloud: "Azure", botsRunning: { bot: { devTeam: "AAMasters", codeName: "AACharly", version: "1.0.0", status: "Alive", stats: { tokens: { totalCollected: 532.2442, totalSpent: 323.455, currentBalance: 142, expensesPerHour: 1.44, maxBalance: 177, minBalance: 22.44 }, life: { born: "2015-02-19 19:15:00.000 GMT+0000", died: undefined, expectedToRetire: "2019-02-19 19:15:00.000 GMT+0000", expectedToDie: "2019-03-19 19:15:00.000 GMT+0000" } } }, bot: { devTeam: "AAMasters", codeName: "AACarol", version: "1.0.0", status: "Alive", stats: { tokens: { totalCollected: 532.2442, totalSpent: 323.455, currentBalance: 142, expensesPerHour: 1.44, maxBalance: 177, minBalance: 22.44 }, life: { born: "2015-02-19 19:15:00.000 GMT+0000", died: undefined, expectedToRetire: "2019-02-19 19:15:00.000 GMT+0000", expectedToDie: "2019-03-19 19:15:00.000 GMT+0000" } } } }, stats: { extractionBots: 2, indicatorsBots: 24, tradingBots: 12, suscribers: 230, apps: 1 } } }, exchanges: { exchangeWrapper: { codeName: "AAExchange-Masters", organization: { name: "AAExchange Masters", type: "Open Source Project", displayName: "Exchange Masters", location: "Global", leader: "Luis Molina", logo: "AAExchange-Masters.jpg" }, exchangesServed: { exchange: { name: "Poloniex", github: { org: "AAExchange Masters", repo: { name: "AAPoloniexWrapper", description: "Wrapps Poloniex Exchange to be acceced from within the Advanced Algos Ecosystem.", openIssues: 0, openPullRequests: 0, contributors: 1 } } }, exchange: { name: "Binance", github: { org: "AAExchange Masters", repo: { name: "AABinanceWrapper", description: "Wrapps Binance Exchange to be acceced from within the Advanced Algos Ecosystem.", openIssues: 0, openPullRequests: 0, contributors: 1 } } } } } }, apps: { app: { organization: { name: "AAApps Masters", type: "Open Source Project", displayName: "Global Ranking", location: "Global", leader: "Luis Molina", logo: "AAApps-Masters.jpg" }, github: { org: "AAApps Masters", repo: { name: "AAGlobalRanking", description: "Global Ranking Web Site", openIssues: 0, openPullRequests: 0, contributors: 1 } }, web: "www.AAGlobalRanking.org", tradingBots: { bot: { devTeam: "AAMasters", codeName: "AAMichael", version: "1.0.0", cloudHosting: "AAOrion", suscribers: { subscriber: { userName: "Trader 007", subscription: { type: "Trade-For-Me", tokensPaid: 20, expirationDatetime: "2019-03-19 19:15:00.000 GMT+0000" } }, subscriber: { userName: "EliasYofre1", subscription: { type: "Buy-Sell-Signals", tokensPaid: 1, expirationDatetime: "2019-03-19 19:15:00.000 GMT+0000" } } } } } } } }; function initialize() { } function getTeam(pTeamCodeName) { for (var team in ECOSYSTEM.devTeams) { if (team.codeName === pTeamCodeName) { return team; } } } function getBot(pTeam, pBotCodeName) { for (var bot in pTeam.bots) { if (bot.codeName === pBotCodeName) { return bot; } } } function getProduct(pBot, pProductCodeName) { for (var product in pBot.products) { if (bot.codeName === pProductCodeName) { return product; } } } function getLayer(pProduct, pLayerCodeName) { for (var layer in pProduct.layers) { if (layer.codeName === pLayerCodeName) { return layer; } } } function getExchange(pProduct, pName) { for (var exchange in pProduct.exchangeList) { if (exchange.name === pName) { return exchange; } } } }