AG-420 Improve React implementation
This commit is contained in:
9
src-trader-dashboard/actions/fxDataUpdated.js
Normal file
9
src-trader-dashboard/actions/fxDataUpdated.js
Normal file
@@ -0,0 +1,9 @@
|
||||
import cloneDeep from "lodash/cloneDeep";
|
||||
|
||||
export default function fxDataUpdatedAction(fxData) {
|
||||
return {
|
||||
type: 'FX_DATA_CHANGED',
|
||||
fxData: cloneDeep(fxData)
|
||||
};
|
||||
}
|
||||
|
||||
@@ -1,18 +1,22 @@
|
||||
import React, {Component} from "react";
|
||||
import {connect} from "react-redux";
|
||||
|
||||
import {AgGridReact} from "ag-grid-react";
|
||||
|
||||
import ExchangeService from "../services/ExchangeService.jsx";
|
||||
import assign from "lodash/assign";
|
||||
import uniq from "lodash/uniq";
|
||||
import cloneDeep from "lodash/cloneDeep";
|
||||
|
||||
import FxDataService from "../services/FxDataService.jsx";
|
||||
|
||||
class FxQuoteMatrix extends Component {
|
||||
constructor(props) {
|
||||
super(props);
|
||||
|
||||
this.exchangeService = new ExchangeService();
|
||||
this.fxDataService = new FxDataService();
|
||||
|
||||
this.state = {
|
||||
columnDefs: this.exchangeService.getFxMatrixHeaderNames(),
|
||||
// rowData: this.exchangeService.getFxMatrixSnapshot()
|
||||
columnDefs: this.fxDataService.getFxMatrixHeaderNames()
|
||||
};
|
||||
|
||||
// grid events
|
||||
@@ -24,56 +28,52 @@ class FxQuoteMatrix extends Component {
|
||||
this.columnApi = params.columnApi;
|
||||
}
|
||||
|
||||
|
||||
// componentWillUnmount() {
|
||||
// this.exchangeService.removeSubscribers();
|
||||
// }
|
||||
|
||||
componentWillReceiveProps(nextProps) {
|
||||
console.log(props);
|
||||
// if (nextProps.selectedExchange.supportedStocks !== this.props.selectedExchange.supportedStocks) {
|
||||
// if (!this.gridApi) {
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// const currentSymbols = this.props.selectedExchange.supportedStocks;
|
||||
// const nextSymbols = nextProps.selectedExchange.supportedStocks;
|
||||
//
|
||||
// // Unsubscribe to current ones that will be removed
|
||||
// const symbolsRemoved = difference(currentSymbols, nextSymbols);
|
||||
// forEach(symbolsRemoved, symbol => {
|
||||
// this.exchangeService.removeSubscriber(this.updateQuote, symbol);
|
||||
// });
|
||||
//
|
||||
// // Subscribe to new ones that need to be added
|
||||
// const symbolsAdded = difference(nextSymbols, currentSymbols);
|
||||
// forEach(symbolsAdded, symbol => {
|
||||
// this.exchangeService.addSubscriber(this.updateQuote, symbol);
|
||||
// });
|
||||
//
|
||||
// // Remove ag-grid nodes as necessary
|
||||
// const nodesToRemove = [];
|
||||
// this.gridApi.forEachNode(node => {
|
||||
// const {data} = node;
|
||||
// if (includes(symbolsRemoved, data.symbol)) {
|
||||
// nodesToRemove.push(node);
|
||||
// }
|
||||
// });
|
||||
// this.gridApi.removeItems(nodesToRemove);
|
||||
//
|
||||
// // Insert new ag-grid nodes as necessary
|
||||
// this.gridApi.addItems(map(symbolsAdded, symbol => this.exchangeService.getTicker(symbol)));
|
||||
// }
|
||||
if (!this.gridApi) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!this.props.rowData ||
|
||||
this.props.rowData.length === 0) {
|
||||
this.gridApi.setRowData(nextProps.rowData);
|
||||
} else {
|
||||
const newRowData = nextProps.rowData;
|
||||
|
||||
const updatedNodes = [];
|
||||
const updatedCols = [];
|
||||
|
||||
for (let i = 0; i < newRowData.length; i++) {
|
||||
// note that for this use case we assume the existing and new row data have the same
|
||||
// row and column order
|
||||
let node = this.gridApi.getModel().getRow(i);
|
||||
let newRow = newRowData[i];
|
||||
|
||||
const {data} = node;
|
||||
let updated = false;
|
||||
for (const def of this.state.columnDefs) {
|
||||
if (data[def.field] !== newRow[def.field]) {
|
||||
updatedCols.push(def.field);
|
||||
|
||||
updated = true;
|
||||
}
|
||||
}
|
||||
if(updated) {
|
||||
assign(data, newRow);
|
||||
updatedNodes.push(node);
|
||||
}
|
||||
}
|
||||
|
||||
this.gridApi.refreshCells(updatedNodes, uniq(updatedCols));
|
||||
}
|
||||
}
|
||||
|
||||
render() {
|
||||
return (
|
||||
<div style={{height: 500, width: "100%"}}
|
||||
<div style={{height: 410, width: "100%"}}
|
||||
className="ag-fresh">
|
||||
<AgGridReact
|
||||
// properties
|
||||
columnDefs={this.state.columnDefs}
|
||||
rowData={this.state.rowData}
|
||||
enableSorting="false"
|
||||
enableFilter="false"
|
||||
|
||||
@@ -88,7 +88,7 @@ class FxQuoteMatrix extends Component {
|
||||
export default connect(
|
||||
(state) => {
|
||||
return {
|
||||
rowData: state.fxRowData
|
||||
rowData: state.fxData
|
||||
}
|
||||
}
|
||||
)(FxQuoteMatrix);
|
||||
@@ -1,8 +1,5 @@
|
||||
import React, {Component} from "react";
|
||||
|
||||
// take this line out if you do not want to use ag-Grid-Enterprise
|
||||
import "ag-grid-enterprise";
|
||||
|
||||
import {AgGridReact} from "ag-grid-react";
|
||||
|
||||
import map from "lodash/map";
|
||||
@@ -61,10 +58,10 @@ export default class extends Component {
|
||||
|
||||
// grid events
|
||||
this.onGridReady = this.onGridReady.bind(this);
|
||||
this.onRowClicked = this.onRowClicked.bind(this);
|
||||
this.onSelectionChanged = this.onSelectionChanged.bind(this);
|
||||
|
||||
// component events
|
||||
this.updateQuote = this.updateQuote.bind(this);
|
||||
this.updateSymbol = this.updateSymbol.bind(this);
|
||||
}
|
||||
|
||||
numberFormatter(params) {
|
||||
@@ -83,16 +80,20 @@ export default class extends Component {
|
||||
let rowData = map(this.props.selectedExchange.supportedStocks, symbol => this.exchangeService.getTicker(symbol));
|
||||
this.gridApi.addItems(rowData);
|
||||
|
||||
// select the first symbol to show the chart
|
||||
this.gridApi.getModel().getRow(0).setSelected(true);
|
||||
|
||||
this.gridApi.sizeColumnsToFit();
|
||||
}
|
||||
|
||||
onRowClicked(params) {
|
||||
this.props.onRowClicked(params.data.symbol);
|
||||
onSelectionChanged() {
|
||||
let selectedNode = this.gridApi.getSelectedNodes()[0];
|
||||
this.props.onSelectionChanged(selectedNode ? selectedNode.data.symbol : null);
|
||||
}
|
||||
|
||||
componentWillMount() {
|
||||
this.props.selectedExchange.supportedStocks.forEach(symbol => {
|
||||
this.exchangeService.addSubscriber(this.updateQuote, symbol);
|
||||
this.exchangeService.addSubscriber(this.updateSymbol, symbol);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -105,6 +106,7 @@ export default class extends Component {
|
||||
if (!this.gridApi) {
|
||||
return;
|
||||
}
|
||||
this.gridApi.deselectAll();
|
||||
|
||||
const currentSymbols = this.props.selectedExchange.supportedStocks;
|
||||
const nextSymbols = nextProps.selectedExchange.supportedStocks;
|
||||
@@ -112,13 +114,13 @@ export default class extends Component {
|
||||
// Unsubscribe to current ones that will be removed
|
||||
const symbolsRemoved = difference(currentSymbols, nextSymbols);
|
||||
forEach(symbolsRemoved, symbol => {
|
||||
this.exchangeService.removeSubscriber(this.updateQuote, symbol);
|
||||
this.exchangeService.removeSubscriber(this.updateSymbol, symbol);
|
||||
});
|
||||
|
||||
// Subscribe to new ones that need to be added
|
||||
const symbolsAdded = difference(nextSymbols, currentSymbols);
|
||||
forEach(symbolsAdded, symbol => {
|
||||
this.exchangeService.addSubscriber(this.updateQuote, symbol);
|
||||
this.exchangeService.addSubscriber(this.updateSymbol, symbol);
|
||||
});
|
||||
|
||||
// Remove ag-grid nodes as necessary
|
||||
@@ -132,11 +134,15 @@ export default class extends Component {
|
||||
this.gridApi.removeItems(nodesToRemove);
|
||||
|
||||
// Insert new ag-grid nodes as necessary
|
||||
this.gridApi.addItems(map(symbolsAdded, symbol => this.exchangeService.getTicker(symbol)));
|
||||
let rowData = map(symbolsAdded, symbol => this.exchangeService.getTicker(symbol));
|
||||
this.gridApi.addItems(rowData);
|
||||
|
||||
// select the first symbol to show the chart
|
||||
this.gridApi.getModel().getRow(0).setSelected(true);
|
||||
}
|
||||
}
|
||||
|
||||
updateQuote(quote) {
|
||||
updateSymbol(symbol) {
|
||||
if (!this.gridApi) {
|
||||
// the grid isn't ready yet
|
||||
return;
|
||||
@@ -147,13 +153,13 @@ export default class extends Component {
|
||||
|
||||
this.gridApi.forEachNode(node => {
|
||||
const {data} = node;
|
||||
if (data.symbol === quote.symbol) {
|
||||
if (data.symbol === symbol.symbol) {
|
||||
for (const def of this.state.columnDefs) {
|
||||
if (data[def.field] !== quote[def.field]) {
|
||||
if (data[def.field] !== symbol[def.field]) {
|
||||
updatedCols.push(def.field);
|
||||
}
|
||||
}
|
||||
assign(data, quote);
|
||||
assign(data, symbol);
|
||||
updatedNodes.push(node);
|
||||
}
|
||||
});
|
||||
@@ -163,16 +169,17 @@ export default class extends Component {
|
||||
|
||||
render() {
|
||||
return (
|
||||
<div style={{height: 500, width: 800}}
|
||||
<div style={{height: 410, width: 800}}
|
||||
className="ag-fresh">
|
||||
<AgGridReact
|
||||
// properties
|
||||
columnDefs={this.state.columnDefs}
|
||||
enableSorting="true"
|
||||
rowSelection="single"
|
||||
|
||||
// events
|
||||
onGridReady={this.onGridReady}
|
||||
onRowClicked={this.onRowClicked}>
|
||||
onSelectionChanged={this.onSelectionChanged}>
|
||||
</AgGridReact>
|
||||
</div>
|
||||
);
|
||||
|
||||
@@ -29,7 +29,7 @@ export default class extends Component {
|
||||
|
||||
static get defaultProps() {
|
||||
return {
|
||||
graphHeight: 320,
|
||||
graphHeight: 230,
|
||||
graphWidth: 400
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@ export default class extends Component {
|
||||
selectedSymbol: null
|
||||
};
|
||||
|
||||
this.onRowClicked = this.onRowClicked.bind(this);
|
||||
this.onSelectionChanged = this.onSelectionChanged.bind(this);
|
||||
}
|
||||
|
||||
componentWillReceiveProps(nextProps) {
|
||||
@@ -28,7 +28,7 @@ export default class extends Component {
|
||||
nextState.selectedSymbol !== this.state.selectedSymbol;
|
||||
}
|
||||
|
||||
onRowClicked(selectedSymbol) {
|
||||
onSelectionChanged(selectedSymbol) {
|
||||
this.setState({
|
||||
selectedSymbol
|
||||
})
|
||||
@@ -37,16 +37,16 @@ export default class extends Component {
|
||||
render() {
|
||||
return (
|
||||
<div style={{width: 1250}}>
|
||||
{/*<div>*/}
|
||||
{/*<div style={{float: "left", marginRight: 25}}>*/}
|
||||
{/*<PriceChangesGrid selectedExchange={this.props.selectedExchange}*/}
|
||||
{/*onRowClicked={this.onRowClicked}/>*/}
|
||||
{/*</div>*/}
|
||||
{/*<div style={{float: "left"}}>*/}
|
||||
{/*<StockDetailPanel selectedSymbol={this.state.selectedSymbol}*/}
|
||||
{/*exchangeName={this.props.selectedExchange.name}/>*/}
|
||||
{/*</div>*/}
|
||||
{/*</div>*/}
|
||||
<div>
|
||||
<div style={{float: "left", marginRight: 25}}>
|
||||
<PriceChangesGrid selectedExchange={this.props.selectedExchange}
|
||||
onSelectionChanged={this.onSelectionChanged}/>
|
||||
</div>
|
||||
<div style={{float: "left"}}>
|
||||
<StockDetailPanel selectedSymbol={this.state.selectedSymbol}
|
||||
exchangeName={this.props.selectedExchange.name}/>
|
||||
</div>
|
||||
</div>
|
||||
<div style={{width: "100%", clear: "both", paddingTop: 25}}>
|
||||
<FxQuoteMatrix/>
|
||||
</div>
|
||||
|
||||
@@ -10,6 +10,10 @@
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
.ag-fresh .ag-value-change-value-highlight {
|
||||
background-color: #afbcff;
|
||||
}
|
||||
|
||||
.align-right {
|
||||
text-align: right
|
||||
}
|
||||
|
||||
@@ -4,16 +4,14 @@ import React from "react";
|
||||
import {render} from "react-dom";
|
||||
|
||||
import {Provider} from "react-redux";
|
||||
import {createStore} from "redux";
|
||||
|
||||
import TraderDashboard from "./components/TraderDashboard.jsx";
|
||||
|
||||
import "ag-grid-root/dist/styles/ag-grid.css";
|
||||
import "ag-grid-root/dist/styles/theme-fresh.css";
|
||||
|
||||
import fxData from "./reducers/fxData";
|
||||
import StoreService from './services/StoreService';
|
||||
import TraderDashboard from "./components/TraderDashboard.jsx";
|
||||
|
||||
let store = createStore(fxData);
|
||||
let store = StoreService.STORE;
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
render(
|
||||
|
||||
@@ -1,3 +1,10 @@
|
||||
export default (state = {fxRowData: []}, action) => {
|
||||
return state;
|
||||
export default (state = {fxData: []}, action) => {
|
||||
switch (action.type) {
|
||||
case 'FX_DATA_CHANGED':
|
||||
return {
|
||||
fxData: action.fxData.slice(0)
|
||||
};
|
||||
default:
|
||||
return state;
|
||||
}
|
||||
};
|
||||
@@ -190,33 +190,6 @@ export default class {
|
||||
|
||||
return historicalData;
|
||||
}
|
||||
|
||||
getFxMatrixHeaderNames() {
|
||||
return FX_DELTA_HEADERS;
|
||||
}
|
||||
|
||||
getFxMatrixSnapshot() {
|
||||
let columns = FX_CURRENCY_MATRIX[0];
|
||||
let data = FX_CURRENCY_MATRIX.slice(1);
|
||||
|
||||
let rowData = [];
|
||||
for (let i = 0; i < data.length; i++) {
|
||||
let currentRow = data[i];
|
||||
|
||||
let row = {};
|
||||
for (let j = 0; j < columns.length; j++) {
|
||||
row[columns[j]] = currentRow[j];
|
||||
}
|
||||
|
||||
// last, net and % change are different
|
||||
row['last'] = Math.floor(this.random(7000, 170000));
|
||||
row['net'] = this.random(-500, 500).toFixed(2);
|
||||
row['pct_net_change'] = this.random(-1, 1).toFixed(2);
|
||||
|
||||
rowData.push(row);
|
||||
}
|
||||
return rowData;
|
||||
}
|
||||
}
|
||||
|
||||
const NASDAQ_SYMBOLS = [
|
||||
@@ -353,350 +326,4 @@ const DE_SYMBOLS = [
|
||||
"STS.L",
|
||||
"BKIR.L",
|
||||
"AFMF.L",
|
||||
];
|
||||
|
||||
const FX_CURRENCY_SYMBOLS = ["USDGBP", "USDEUR", "USDAED", "USDJPY", "USDCAD", "USDCHF", "GBPUSD", "GBPEUR", "GBPAED", "GBPJPY", "GBPCAD", "GBPCHF", "EURUSD", "EURGBP", "EURAED", "EURJPY", "EURCAD", "EURCHF", "AEDUSD", "AEDGBP", "AEDEUR", "AEDJPY", "AEDCAD", "AEDCHF", "JPYUSD", "JPYGBP", "JPYEUR", "JPYAED", "JPYCAD", "JPYCHF", "CADUSD", "CADGBP", "CADEUR", "CADAED", "CADJPY", "CADCHF", "CHFUSD", "CHFGBP", "CHFEUR", "CHFAED", "CHFJPY", "CHFCAD"];
|
||||
const FX_DELTA_HEADERS = [
|
||||
{
|
||||
field: 'symbol',
|
||||
headerName: 'Symbol',
|
||||
width: 80
|
||||
},
|
||||
{
|
||||
field: 'last',
|
||||
headerName: 'Last',
|
||||
headerClass: 'align-right',
|
||||
cellRenderer: 'animateShowChange',
|
||||
cellClass: 'align-right',
|
||||
width: 70
|
||||
},
|
||||
{
|
||||
field: 'net',
|
||||
headerName: 'Net',
|
||||
headerClass: 'align-right',
|
||||
cellRenderer: 'animateShowChange',
|
||||
cellStyle: {'text-align': 'right'},
|
||||
width: 60
|
||||
},
|
||||
{
|
||||
field: 'pct_net_change',
|
||||
headerName: '% NC',
|
||||
headerClass: 'align-right',
|
||||
cellStyle: {'text-align': 'right'}, // to be removed once the component is in place
|
||||
// cellRendererFramework: HorizontalBarComponent,
|
||||
width: 67,
|
||||
cellClassRules: {
|
||||
'pct-change-green': 'x > 0',
|
||||
'pct-change-amber': 'x <= 0 && x >= -0.10',
|
||||
'pct-change-red': 'x < -0.10'
|
||||
}
|
||||
},
|
||||
].concat(FX_CURRENCY_SYMBOLS.map((symbol) => {
|
||||
"use strict";
|
||||
return {
|
||||
field: symbol,
|
||||
headerName: symbol,
|
||||
headerClass: 'align-right',
|
||||
width: 87,
|
||||
cellStyle: {'text-align': 'right'},
|
||||
cellClassRules: {
|
||||
'fx-postive': 'x > 0.8',
|
||||
'fx-null': 'x === null',
|
||||
'fx-negative': 'x < -0.8'
|
||||
}
|
||||
}
|
||||
}));
|
||||
|
||||
const FX_CURRENCY_MATRIX = [
|
||||
["symbol", ...FX_CURRENCY_SYMBOLS],
|
||||
["USDGBP", null, "0.89", "-0.01", "0.29", "0.28", "-0.04", "0.47", "0.17", "0.20", "0.11", "0.97", "0.07", "-0.20", "0.57", "0.54", "0.26", "0.33", "0.86", "0.95", "0.39", "0.21", "-0.49", "0.63", "-0.13", "-0.86", "0.18", "-0.84", "-0.89", "0.05", "-0.29", "0.34", "0.93", "0.41", "0.13", "-0.17", "0.70", "-0.17", "0.60", "0.00", "0.09", "-0.15", "0.10"],
|
||||
["USDEUR", "0.89", null, "0.25", "0.29", "0.86", "-0.93", "0.09", "0.63", "0.76", "0.10", "0.51", "-0.31", "-0.51", "0.20", "0.48", "-0.42", "0.73", "0.57", "0.65", "0.40", "0.12", "0.24", "0.42", "0.75", "0.13", "0.75", "0.42", "-0.80", "-0.26", "0.68", "0.68", "0.98", "0.87", "0.48", "0.52", "0.23", "0.61", "0.71", "-0.61", "0.40", "-0.80", "-0.89"],
|
||||
["USDAED", "0.90", "0.95", null, "0.71", "0.49", "0.50", "0.51", "0.07", "0.80", "-0.74", "0.54", "0.46", "-0.90", "-0.33", "0.75", "0.91", "0.84", "0.86", "0.89", "0.68", "0.71", "0.74", "0.58", "-0.24", "0.31", "0.85", "0.28", "0.44", "0.51", "-0.19", "0.71", "0.81", "0.85", "0.23", "0.09", "0.65", "-0.48", "0.43", "0.97", "0.11", "-0.81", "-0.69"],
|
||||
["USDJPY", "0.84", "0.92", "0.36", null, "0.79", "0.90", "0.86", "0.42", "0.14", "0.98", "0.47", "0.76", "0.60", "0.15", "0.04", "0.58", "0.13", "-0.16", "0.63", "0.86", "-0.63", "-0.95", "0.42", "0.08", "0.90", "-0.39", "-0.16", "0.66", "0.95", "0.31", "0.66", "-0.84", "0.06", "-0.60", "0.08", "0.57", "0.93", "0.78", "0.15", "0.36", "0.78", "0.34"],
|
||||
["USDCAD", "0.79", "-0.87", "0.93", "0.83", null, "0.10", "0.60", "0.34", "0.98", "0.70", "0.09", "0.46", "0.80", "0.10", "0.26", "-0.90", "0.69", "-0.22", "0.51", "-0.75", "-0.08", "0.07", "0.24", "0.68", "0.60", "0.37", "0.92", "0.02", "0.66", "0.16", "0.24", "-0.79", "0.19", "0.19", "0.08", "-0.97", "-0.93", "0.04", "-0.92", "0.86", "-0.36", "0.04"],
|
||||
["USDCHF", "0.94", "-0.02", "0.70", "0.82", "0.41", null, "0.76", "0.06", "0.46", "0.99", "0.07", "0.72", "0.14", "0.90", "0.23", "-0.54", "0.64", "0.80", "0.16", "0.23", "0.66", "-0.89", "-0.54", "-0.95", "0.27", "0.56", "0.42", "0.41", "0.88", "0.81", "0.37", "0.75", "0.06", "-0.75", "0.98", "0.21", "0.01", "0.03", "0.35", "-0.42", "0.55", "0.19"],
|
||||
["GBPUSD", "0.05", "-0.64", "0.47", "0.56", "0.51", "-0.47", null, "-0.15", "0.13", "0.55", "0.58", "0.57", "-0.49", "0.28", "0.86", "0.49", "0.12", "-0.91", "0.06", "0.12", "0.18", "-0.02", "-0.55", "0.18", "0.29", "0.76", "0.11", "0.04", "0.55", "0.16", "0.84", "0.83", "-0.94", "0.32", "0.07", "-0.33", "-0.29", "0.01", "-0.19", "0.01", "-0.60", "0.66"],
|
||||
["GBPEUR", "-0.32", "0.17", "0.60", "-0.52", "-0.52", "0.39", "-0.42", null, "0.07", "0.69", "0.67", "0.01", "0.72", "0.35", "0.66", "-0.66", "0.21", "0.12", "0.42", "-0.57", "-0.04", "0.48", "0.91", "0.72", "-0.16", "0.79", "0.03", "0.44", "0.17", "0.87", "-0.82", "0.20", "0.88", "0.48", "0.59", "-0.70", "0.12", "0.56", "-0.69", "0.10", "0.90", "1.00"],
|
||||
["GBPAED", "0.76", "0.05", "0.72", "-0.40", "0.93", "0.64", "0.90", "0.21", null, "0.91", "0.33", "-0.36", "0.28", "0.87", "0.25", "0.33", "0.44", "0.89", "0.17", "0.96", "0.86", "0.88", "0.03", "-0.25", "0.21", "0.98", "-0.60", "0.07", "0.90", "0.23", "0.41", "0.77", "0.83", "0.94", "0.12", "0.37", "0.58", "0.35", "-0.53", "0.49", "0.96", "-0.06"],
|
||||
["GBPJPY", "0.63", "0.72", "0.59", "0.89", "-0.54", "0.97", "0.61", "0.64", "0.85", null, "0.35", "0.57", "0.25", "0.85", "0.27", "-0.70", "-0.30", "-0.36", "0.29", "0.82", "0.26", "0.69", "0.46", "0.01", "0.09", "0.78", "0.95", "0.16", "0.07", "0.41", "0.99", "0.67", "0.34", "-0.89", "0.83", "0.32", "0.21", "-0.48", "-0.64", "0.65", "0.58", "0.69"],
|
||||
["GBPCAD", "0.78", "0.09", "0.33", "0.11", "0.95", "0.01", "0.96", "0.72", "0.13", "0.02", null, "0.44", "0.63", "-0.52", "0.08", "-0.85", "0.74", "0.41", "0.52", "0.15", "-0.97", "0.61", "0.58", "0.47", "0.56", "0.37", "0.54", "-0.65", "0.98", "0.44", "0.28", "0.70", "0.44", "0.34", "0.95", "0.82", "-0.09", "0.62", "0.87", "0.25", "-1.00", "0.99"],
|
||||
["GBPCHF", "-0.87", "0.68", "0.84", "0.83", "0.50", "0.74", "0.02", "0.11", "-0.12", "0.36", "0.71", null, "0.45", "0.02", "0.51", "0.50", "-0.03", "-0.94", "0.23", "0.38", "0.09", "0.26", "0.14", "0.39", "0.36", "0.01", "0.76", "0.21", "0.03", "0.97", "-0.89", "0.68", "0.43", "0.43", "0.26", "0.01", "0.60", "0.15", "0.77", "0.51", "-0.31", "0.37"],
|
||||
["EURUSD", "-0.45", "-0.05", "0.14", "-0.11", "0.36", "0.12", "0.76", "0.66", "0.50", "0.31", "0.28", "0.90", null, "-0.04", "0.73", "0.33", "0.27", "0.22", "0.86", "0.79", "-0.29", "0.30", "0.89", "0.73", "0.94", "0.24", "0.19", "0.81", "0.88", "0.46", "0.19", "0.79", "-0.16", "0.85", "0.84", "-0.57", "-0.87", "0.86", "0.69", "0.12", "0.64", "0.13"],
|
||||
["EURGBP", "0.06", "0.81", "0.54", "0.57", "0.57", "0.81", "0.38", "0.70", "0.37", "0.58", "-0.56", "0.77", "0.59", null, "0.98", "-0.48", "0.60", "0.78", "0.22", "0.20", "-0.62", "-0.97", "-0.55", "0.39", "0.88", "0.96", "0.32", "0.84", "0.26", "-0.47", "0.04", "0.34", "-0.24", "0.53", "-0.75", "-0.97", "0.47", "0.81", "0.49", "-0.84", "0.94", "0.09"],
|
||||
["EURAED", "0.61", "0.59", "0.11", "0.21", "0.41", "-0.45", "0.32", "0.90", "-0.98", "0.38", "0.27", "0.62", "0.67", "0.89", null, "0.27", "0.65", "0.72", "0.69", "0.66", "0.12", "0.32", "0.11", "-0.73", "-0.17", "0.74", "0.03", "0.96", "0.59", "-0.92", "-0.91", "-0.41", "0.09", "0.45", "0.90", "0.88", "0.96", "0.47", "0.95", "0.27", "-0.48", "0.71"],
|
||||
["EURJPY", "-0.01", "0.36", "0.28", "0.68", "0.50", "0.25", "0.81", "0.64", "0.12", "-0.73", "-0.47", "0.96", "-0.98", "-0.41", "0.78", null, "0.19", "-0.37", "0.24", "0.63", "0.74", "-0.24", "0.46", "0.63", "0.99", "0.65", "0.52", "0.11", "0.52", "0.39", "0.41", "0.51", "0.78", "1.00", "0.80", "-0.11", "0.90", "0.96", "0.66", "0.32", "0.02", "0.19"],
|
||||
["EURCAD", "-0.80", "0.40", "0.35", "0.45", "0.66", "0.21", "0.77", "0.58", "0.09", "1.00", "0.02", "-0.85", "0.89", "0.63", "-0.05", "0.46", null, "0.87", "0.96", "-0.48", "0.40", "0.18", "0.37", "0.81", "0.50", "-0.06", "-0.56", "0.38", "0.02", "0.83", "-0.93", "0.80", "0.31", "0.10", "0.70", "0.55", "0.47", "0.77", "0.98", "0.88", "0.19", "0.91"],
|
||||
["EURCHF", "-0.93", "0.01", "-0.29", "0.46", "-0.59", "-0.15", "0.58", "0.00", "-0.62", "0.36", "0.27", "-0.10", "-0.10", "0.57", "0.57", "0.75", "-0.10", null, "0.88", "0.21", "0.89", "0.85", "0.16", "0.93", "0.60", "0.59", "0.42", "0.70", "0.66", "0.80", "0.83", "0.52", "0.01", "0.41", "0.68", "0.94", "0.81", "0.40", "0.69", "0.04", "0.70", "0.61"],
|
||||
["AEDUSD", "0.10", "0.45", "0.06", "-0.37", "-0.14", "0.63", "0.10", "0.77", "0.95", "-0.12", "1.00", "-0.19", "-0.59", "0.78", "0.10", "0.76", "-0.45", "-0.99", null, "-0.46", "0.28", "0.31", "0.32", "0.42", "-0.00", "0.66", "0.24", "0.31", "0.10", "0.73", "0.02", "0.78", "0.07", "1.00", "0.43", "0.61", "0.53", "0.53", "0.41", "0.37", "0.97", "-0.19"],
|
||||
["AEDGBP", "0.70", "0.73", "0.34", "0.97", "0.84", "0.05", "0.21", "0.14", "0.45", "0.69", "0.41", "-0.53", "0.28", "0.13", "0.99", "0.97", "0.93", "0.62", "0.35", null, "0.18", "0.96", "0.58", "0.04", "0.00", "0.58", "-0.54", "0.35", "0.84", "0.83", "-0.20", "0.51", "0.32", "0.01", "0.95", "0.69", "-0.73", "0.36", "0.78", "0.02", "0.22", "0.39"],
|
||||
["AEDEUR", "0.18", "0.84", "-0.89", "0.90", "-0.25", "0.53", "0.71", "0.80", "0.60", "-0.98", "-0.81", "0.57", "0.72", "0.32", "-0.23", "0.98", "0.50", "0.93", "0.56", "0.26", null, "0.61", "0.47", "0.72", "0.58", "0.19", "0.94", "0.21", "0.47", "0.70", "0.67", "0.85", "0.98", "0.15", "0.21", "0.43", "0.03", "0.92", "0.91", "0.35", "0.70", "0.85"],
|
||||
["AEDJPY", "0.88", "0.62", "0.50", "0.27", "0.56", "0.61", "0.06", "-0.02", "0.42", "0.26", "0.23", "0.83", "-0.55", "0.94", "0.01", "0.72", "-0.43", "0.10", "0.01", "-0.20", "0.13", null, "0.70", "0.10", "0.05", "0.43", "-0.14", "-0.64", "0.80", "0.79", "0.57", "0.14", "0.14", "0.04", "-0.96", "0.59", "0.14", "0.51", "0.23", "0.57", "0.94", "0.88"],
|
||||
["AEDCAD", "0.75", "-0.99", "0.82", "-0.87", "0.79", "1.00", "0.21", "0.30", "-0.40", "0.34", "-0.85", "0.41", "0.79", "0.17", "0.58", "-0.24", "0.18", "0.15", "0.18", "0.44", "0.34", "0.90", null, "0.10", "0.34", "0.31", "0.34", "0.79", "-0.05", "0.19", "-0.86", "0.61", "-0.65", "0.23", "0.59", "0.69", "-0.65", "0.89", "0.97", "0.12", "0.63", "-0.24"],
|
||||
["AEDCHF", "0.67", "0.46", "0.92", "0.22", "0.91", "0.67", "0.81", "0.04", "0.29", "0.13", "0.80", "0.95", "0.29", "0.99", "-0.17", "0.58", "0.64", "0.68", "0.41", "0.69", "0.84", "0.01", "0.04", null, "0.07", "0.16", "0.26", "-0.43", "0.08", "0.58", "0.33", "-0.28", "0.03", "-0.08", "0.54", "-0.91", "0.78", "-0.10", "-0.13", "0.15", "0.62", "-0.13"],
|
||||
["JPYUSD", "-0.67", "0.90", "0.84", "0.10", "0.77", "0.43", "0.59", "0.69", "0.63", "0.82", "-0.61", "0.41", "0.07", "0.48", "1.00", "-0.52", "0.22", "0.89", "0.43", "0.54", "0.56", "-0.43", "0.78", "0.67", null, "0.06", "0.28", "0.04", "0.62", "0.18", "0.77", "0.63", "0.05", "0.87", "0.22", "0.21", "0.07", "0.25", "-0.55", "0.67", "0.10", "-0.67"],
|
||||
["JPYGBP", "0.21", "0.46", "0.23", "0.53", "-0.97", "0.78", "0.43", "0.74", "-0.95", "0.98", "0.49", "0.66", "0.18", "0.55", "-0.33", "0.67", "0.65", "0.23", "-0.07", "-0.67", "0.56", "0.74", "-0.38", "-0.83", "-0.51", null, "-0.26", "-0.79", "0.73", "-0.78", "-0.09", "0.19", "0.48", "0.97", "0.11", "0.19", "0.51", "0.32", "0.81", "-0.02", "0.17", "0.48"],
|
||||
["JPYEUR", "0.83", "0.86", "0.62", "-0.92", "0.64", "0.58", "0.55", "0.07", "0.81", "0.32", "0.33", "0.96", "0.48", "0.57", "0.25", "0.56", "0.33", "0.02", "-0.79", "0.44", "0.95", "0.35", "0.41", "0.06", "0.28", "0.77", null, "0.64", "0.79", "0.74", "0.67", "-0.97", "0.47", "-0.11", "0.03", "0.39", "-0.37", "0.06", "0.09", "0.13", "0.20", "0.87"],
|
||||
["JPYAED", "0.69", "0.80", "0.90", "0.06", "0.55", "0.90", "-0.09", "0.05", "-0.10", "0.31", "0.57", "0.69", "-0.78", "0.42", "0.64", "0.96", "0.08", "-0.76", "0.59", "0.00", "0.40", "-0.88", "0.69", "0.17", "-0.16", "0.57", "0.86", null, "-0.61", "-0.14", "0.41", "-0.16", "0.36", "0.95", "0.44", "0.41", "0.35", "-0.56", "0.25", "0.66", "0.90", "0.82"],
|
||||
["JPYCAD", "0.33", "0.27", "0.61", "0.01", "-0.16", "0.21", "0.57", "-0.41", "-0.56", "0.55", "0.13", "-0.87", "0.19", "0.64", "-0.38", "-0.80", "-0.10", "0.44", "0.72", "-0.72", "0.48", "0.42", "0.84", "0.73", "0.35", "0.68", "0.01", "0.09", null, "0.87", "0.17", "0.45", "0.02", "0.01", "0.77", "0.24", "0.62", "0.39", "-0.73", "0.21", "-0.08", "0.42"],
|
||||
["JPYCHF", "-0.45", "0.52", "0.34", "0.85", "0.16", "0.96", "0.53", "0.62", "0.46", "0.94", "0.08", "-0.68", "0.81", "0.44", "0.27", "0.75", "-0.84", "0.69", "-0.99", "0.41", "0.66", "-0.94", "0.21", "0.85", "-0.08", "0.36", "0.62", "0.25", "-0.48", null, "0.51", "-0.39", "0.60", "0.63", "0.68", "0.10", "0.62", "0.68", "0.00", "0.24", "0.61", "0.23"],
|
||||
["CADUSD", "-0.65", "0.73", "0.93", "0.27", "-0.00", "-0.46", "0.53", "0.36", "0.83", "0.58", "0.40", "0.03", "0.32", "0.38", "-0.53", "0.86", "0.42", "0.90", "0.83", "0.94", "0.34", "-0.56", "0.46", "-0.72", "0.13", "0.08", "0.25", "0.59", "0.75", "0.72", null, "0.62", "0.73", "0.52", "0.28", "0.03", "-0.54", "0.50", "0.76", "-0.28", "0.89", "0.97"],
|
||||
["CADGBP", "0.74", "0.58", "0.55", "0.01", "0.33", "0.61", "0.75", "0.86", "-0.87", "0.50", "0.57", "0.84", "-0.34", "1.00", "0.77", "0.75", "0.40", "0.12", "-0.57", "-0.16", "-0.91", "0.06", "0.67", "-0.55", "0.02", "0.78", "0.57", "0.70", "0.21", "0.95", "-0.91", null, "-0.82", "0.71", "0.36", "0.46", "0.46", "0.24", "0.15", "0.54", "0.15", "0.83"],
|
||||
["CADEUR", "-0.58", "0.29", "0.03", "0.70", "0.77", "0.80", "0.52", "0.04", "0.11", "0.86", "-0.98", "0.02", "0.01", "-0.19", "-0.48", "0.80", "0.90", "0.10", "0.28", "0.88", "0.98", "0.43", "0.47", "-0.41", "-0.92", "0.49", "0.64", "-0.60", "0.11", "0.61", "0.19", "-0.39", null, "-0.21", "0.56", "-0.45", "-0.48", "0.51", "0.04", "-0.44", "-0.22", "-0.29"],
|
||||
["CADAED", "0.07", "0.55", "0.99", "-0.41", "0.65", "0.75", "0.97", "0.74", "0.65", "0.37", "-0.04", "0.85", "0.83", "0.25", "0.14", "-0.00", "0.80", "0.78", "-0.42", "0.54", "-0.42", "-0.07", "-0.62", "0.56", "0.89", "0.92", "0.19", "0.64", "0.45", "0.24", "0.97", "0.41", "0.36", null, "-0.54", "-0.85", "-0.68", "0.48", "0.13", "0.61", "0.75", "0.21"],
|
||||
["CADJPY", "-0.84", "0.71", "0.59", "-0.78", "0.92", "0.93", "0.03", "0.27", "0.22", "0.71", "-0.79", "0.72", "0.27", "0.29", "0.40", "0.66", "0.44", "-0.33", "0.24", "0.99", "-0.95", "0.74", "0.42", "0.45", "0.08", "0.46", "0.22", "0.70", "0.80", "0.36", "0.36", "0.94", "0.75", "0.51", null, "0.10", "0.31", "0.54", "1.00", "0.78", "0.17", "0.32"],
|
||||
["CADCHF", "0.19", "0.00", "0.62", "-0.63", "0.75", "0.57", "0.28", "-0.98", "0.17", "-0.63", "0.09", "0.10", "-0.09", "0.22", "0.65", "0.20", "0.27", "-0.66", "-0.70", "0.72", "0.40", "0.96", "0.52", "0.38", "0.96", "0.90", "0.35", "-0.70", "0.37", "0.94", "0.20", "0.78", "0.34", "0.24", "-0.18", null, "0.05", "0.71", "0.05", "0.38", "0.02", "0.60"],
|
||||
["CHFUSD", "0.42", "0.61", "-0.30", "-0.27", "0.46", "0.63", "0.64", "0.33", "0.18", "0.88", "0.99", "0.73", "0.85", "0.07", "0.53", "0.31", "-0.63", "0.56", "-0.04", "-0.68", "0.43", "-0.96", "0.45", "0.45", "0.50", "0.17", "0.82", "0.34", "0.26", "0.16", "0.71", "0.35", "0.57", "0.79", "0.56", "0.55", null, "0.02", "-0.90", "0.84", "0.33", "0.18"],
|
||||
["CHFGBP", "-0.38", "0.73", "0.25", "0.64", "0.41", "-0.48", "0.75", "-0.40", "0.37", "0.62", "0.30", "0.06", "0.54", "0.15", "0.51", "0.33", "-0.79", "-0.05", "-0.54", "0.21", "0.40", "0.86", "0.96", "0.94", "0.52", "0.07", "0.71", "-0.80", "-0.40", "0.71", "0.71", "0.89", "0.43", "-0.68", "0.93", "0.05", "0.42", null, "0.59", "-0.67", "0.03", "0.17"],
|
||||
["CHFEUR", "-0.64", "0.96", "-0.34", "0.71", "0.53", "0.44", "0.27", "0.56", "0.96", "0.40", "0.86", "0.65", "0.82", "0.89", "-0.75", "0.29", "0.06", "0.70", "0.23", "0.68", "0.79", "0.21", "0.50", "0.14", "-0.27", "-0.83", "-0.22", "0.59", "0.40", "0.10", "0.88", "0.99", "0.21", "-0.36", "0.00", "0.53", "0.08", "0.08", null, "0.53", "-0.51", "0.03"],
|
||||
["CHFAED", "-0.99", "0.71", "0.51", "0.58", "0.57", "0.73", "0.60", "0.23", "0.02", "0.84", "0.90", "0.56", "0.03", "-0.93", "0.59", "0.24", "-0.67", "0.13", "0.99", "0.28", "0.72", "0.79", "-0.83", "-0.30", "0.73", "0.08", "-0.02", "0.85", "0.33", "0.57", "0.09", "0.26", "0.16", "0.80", "0.65", "-0.19", "-0.38", "-0.61", "-0.98", null, "0.57", "-0.81"],
|
||||
["CHFJPY", "0.60", "0.96", "0.22", "0.52", "0.63", "0.24", "0.76", "0.91", "0.80", "-0.14", "0.59", "-0.01", "0.60", "-0.08", "0.63", "0.39", "0.30", "-0.71", "0.18", "0.94", "-0.30", "0.28", "0.87", "0.92", "-0.19", "0.18", "-0.40", "0.44", "0.88", "0.52", "0.50", "0.44", "0.84", "0.24", "0.09", "0.15", "0.10", "0.30", "-0.05", "0.79", null, "0.99"],
|
||||
["CHFCAD", "0.93", "0.24", "0.05", "0.40", "0.75", "0.12", "0.90", "0.56", "0.46", "0.62", "0.71", "0.01", "0.04", "0.02", "0.49", "0.51", "-0.94", "0.93", "0.80", "-0.40", "0.79", "0.82", "-0.04", "0.38", "-0.24", "-0.17", "0.78", "-0.42", "0.92", "-0.83", "-0.01", "0.54", "0.73", "0.52", "0.95", "0.44", "0.90", "0.81", "0.42", "0.26", "0.36", null]
|
||||
];
|
||||
|
||||
// for (i = 0; i < MAJOR_CURRENCIES.length; i++) {
|
||||
// for (j = 0; j < MAJOR_CURRENCIES.length; j++) {
|
||||
// if (i === j) {
|
||||
// continue;
|
||||
// }
|
||||
// console.log(`${MAJOR_CURRENCIES[i] + MAJOR_CURRENCIES[j]}`);
|
||||
// }
|
||||
// }
|
||||
|
||||
// let rows = [];
|
||||
// let row = ['Symbol'];
|
||||
//
|
||||
// rows = [];
|
||||
// for (j = 0; j < FX_CURRENCY_CODE.length; j++) {
|
||||
// row.push(FX_CURRENCY_CODE[j]);
|
||||
// }
|
||||
// rows.push(row);
|
||||
//
|
||||
// for (i = 0; i < FX_CURRENCY_CODE.length; i++) {
|
||||
// let row = [];
|
||||
// row.push(FX_CURRENCY_CODE[i]);
|
||||
//
|
||||
// for (j = 0; j < FX_CURRENCY_CODE.length; j++) {
|
||||
// if (i === j) {
|
||||
// row.push(null);
|
||||
// } else {
|
||||
// var mutliplier = ((Math.random() * 10) > 8) ? -1 : 1;
|
||||
// row.push((mutliplier * Math.random()).toFixed(2))
|
||||
// // row.push(`${FX_CURRENCY_CODE[j]} value`)
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// rows.push(row);
|
||||
// }
|
||||
//
|
||||
// JSON.stringify(rows);
|
||||
|
||||
const FX_CURRENCY_CODE = [
|
||||
'USDGBP',
|
||||
'USDEUR',
|
||||
'USDAED',
|
||||
'USDJPY',
|
||||
'USDCAD',
|
||||
'USDCHF',
|
||||
'GBPUSD',
|
||||
'GBPEUR',
|
||||
'GBPAED',
|
||||
'GBPJPY',
|
||||
'GBPCAD',
|
||||
'GBPCHF',
|
||||
'EURUSD',
|
||||
'EURGBP',
|
||||
'EURAED',
|
||||
'EURJPY',
|
||||
'EURCAD',
|
||||
'EURCHF',
|
||||
'AEDUSD',
|
||||
'AEDGBP',
|
||||
'AEDEUR',
|
||||
'AEDJPY',
|
||||
'AEDCAD',
|
||||
'AEDCHF',
|
||||
'JPYUSD',
|
||||
'JPYGBP',
|
||||
'JPYEUR',
|
||||
'JPYAED',
|
||||
'JPYCAD',
|
||||
'JPYCHF',
|
||||
'CADUSD',
|
||||
'CADGBP',
|
||||
'CADEUR',
|
||||
'CADAED',
|
||||
'CADJPY',
|
||||
'CADCHF',
|
||||
'CHFUSD',
|
||||
'CHFGBP',
|
||||
'CHFEUR',
|
||||
'CHFAED',
|
||||
'CHFJPY',
|
||||
'CHFCAD'
|
||||
];
|
||||
|
||||
const MAJOR_CURRENCIES = [
|
||||
'USD',
|
||||
'GBP',
|
||||
'EUR',
|
||||
'AED',
|
||||
'JPY',
|
||||
'CAD',
|
||||
'CHF'];
|
||||
|
||||
const SECONDARY_CURRENCIES = [
|
||||
'AFN',
|
||||
'ALL',
|
||||
'AMD',
|
||||
'ANG',
|
||||
'AOA',
|
||||
'ARS',
|
||||
'AUD',
|
||||
'AWG',
|
||||
'AZN',
|
||||
'BAM',
|
||||
'BBD',
|
||||
'BDT',
|
||||
'BGN',
|
||||
'BHD',
|
||||
'BIF',
|
||||
'BMD',
|
||||
'BND',
|
||||
'BOB',
|
||||
'BRL',
|
||||
'BSD',
|
||||
'BTN',
|
||||
'BWP',
|
||||
'BYN',
|
||||
'BZD',
|
||||
'CDF',
|
||||
'CLP',
|
||||
'CNY',
|
||||
'COP',
|
||||
'CRC',
|
||||
'CUC',
|
||||
'CUP',
|
||||
'CVE',
|
||||
'CZK',
|
||||
'DJF',
|
||||
'DKK',
|
||||
'DOP',
|
||||
'DZD',
|
||||
'EGP',
|
||||
'ERN',
|
||||
'ETB',
|
||||
'FJD',
|
||||
'FKP',
|
||||
'GEL',
|
||||
'GGP',
|
||||
'GHS',
|
||||
'GIP',
|
||||
'GMD',
|
||||
'GNF',
|
||||
'GTQ',
|
||||
'GYD',
|
||||
'HKD',
|
||||
'HNL',
|
||||
'HRK',
|
||||
'HTG',
|
||||
'HUF',
|
||||
'IDR',
|
||||
'ILS',
|
||||
'IMP',
|
||||
'INR',
|
||||
'IQD',
|
||||
'IRR',
|
||||
'ISK',
|
||||
'JEP',
|
||||
'JMD',
|
||||
'JOD',
|
||||
'KES',
|
||||
'KGS',
|
||||
'KHR',
|
||||
'KMF',
|
||||
'KPW',
|
||||
'KRW',
|
||||
'KWD',
|
||||
'KYD',
|
||||
'KZT',
|
||||
'LAK',
|
||||
'LBP',
|
||||
'LKR',
|
||||
'LRD',
|
||||
'LSL',
|
||||
'LYD',
|
||||
'MAD',
|
||||
'MDL',
|
||||
'MGA',
|
||||
'MKD',
|
||||
'MMK',
|
||||
'MNT',
|
||||
'MOP',
|
||||
'MRO',
|
||||
'MUR',
|
||||
'MVR',
|
||||
'MWK',
|
||||
'MXN',
|
||||
'MYR',
|
||||
'MZN',
|
||||
'NAD',
|
||||
'NGN',
|
||||
'NIO',
|
||||
'NOK',
|
||||
'NPR',
|
||||
'NZD',
|
||||
'OMR',
|
||||
'PAB',
|
||||
'PEN',
|
||||
'PGK',
|
||||
'PHP',
|
||||
'PKR',
|
||||
'PLN',
|
||||
'PYG',
|
||||
'QAR',
|
||||
'RON',
|
||||
'RSD',
|
||||
'RUB',
|
||||
'RWF',
|
||||
'SAR',
|
||||
'SBD',
|
||||
'SCR',
|
||||
'SDG',
|
||||
'SEK',
|
||||
'SGD',
|
||||
'SHP',
|
||||
'SLL',
|
||||
'SOS',
|
||||
'SPL',
|
||||
'SRD',
|
||||
'STD',
|
||||
'SVC',
|
||||
'SYP',
|
||||
'SZL',
|
||||
'THB',
|
||||
'TJS',
|
||||
'TMT',
|
||||
'TND',
|
||||
'TOP',
|
||||
'TRY',
|
||||
'TTD',
|
||||
'TVD',
|
||||
'TWD',
|
||||
'TZS',
|
||||
'UAH',
|
||||
'UGX',
|
||||
'UYU',
|
||||
'UZS',
|
||||
'VEF',
|
||||
'VND',
|
||||
'VUV',
|
||||
'WST',
|
||||
'XAF',
|
||||
'XCD',
|
||||
'XDR',
|
||||
'XOF',
|
||||
'XPF',
|
||||
'YER',
|
||||
'ZMW',
|
||||
'ZWD',
|
||||
'ZAR'];
|
||||
];
|
||||
420
src-trader-dashboard/services/FxDataService.jsx
Normal file
420
src-trader-dashboard/services/FxDataService.jsx
Normal file
@@ -0,0 +1,420 @@
|
||||
import sampleSize from "lodash/sampleSize";
|
||||
|
||||
import StoreService from "./StoreService";
|
||||
import fxDataUpdated from "../actions/fxDataUpdated";
|
||||
|
||||
export default class {
|
||||
constructor() {
|
||||
this.store = StoreService.STORE;
|
||||
|
||||
this.fxData = this.createFxMatrixSnapshot();
|
||||
|
||||
this.store.dispatch(fxDataUpdated(this.fxData));
|
||||
|
||||
setInterval(() => {
|
||||
this.applyDeltasToFxData();
|
||||
this.store.dispatch(fxDataUpdated(this.fxData));
|
||||
}, 1500)
|
||||
}
|
||||
|
||||
applyDeltasToFxData() {
|
||||
let fxSymbolsToUpdate = sampleSize(FX_CURRENCY_SYMBOLS, FX_CURRENCY_SYMBOLS.length / 5);
|
||||
let rowsToUpdate = sampleSize(this.fxData, this.fxData.length / 5);
|
||||
for (let i = 0; i < rowsToUpdate.length; i++) {
|
||||
let row = rowsToUpdate[i];
|
||||
|
||||
let maxSwing = row.last * 0.05; // max 5% swing
|
||||
let swing = Math.floor(this.random(-maxSwing, maxSwing));
|
||||
row.last = row.last + swing;
|
||||
row.net = swing;
|
||||
row.pct_net_change = (row.net / row.last).toFixed(2);
|
||||
|
||||
for (let symbolToUpdate of fxSymbolsToUpdate) {
|
||||
if(row[symbolToUpdate] === null) {
|
||||
continue;
|
||||
}
|
||||
|
||||
let multiplier = ((Math.random() * 10) > 8) ? -1 : 1;
|
||||
row[symbolToUpdate] = (multiplier * Math.random()).toFixed(2);
|
||||
}
|
||||
}
|
||||
return this.fxData;
|
||||
}
|
||||
|
||||
random(min, max) {
|
||||
return parseFloat((Math.random() * (max - min + 1) + min))
|
||||
}
|
||||
|
||||
getFxMatrixHeaderNames() {
|
||||
return FX_DELTA_HEADERS;
|
||||
}
|
||||
|
||||
createFxMatrixSnapshot() {
|
||||
let columns = FX_CURRENCY_MATRIX[0];
|
||||
let data = FX_CURRENCY_MATRIX.slice(1);
|
||||
|
||||
let rowData = [];
|
||||
for (let i = 0; i < data.length; i++) {
|
||||
let currentRow = data[i];
|
||||
|
||||
let row = {};
|
||||
for (let j = 0; j < columns.length; j++) {
|
||||
row[columns[j]] = currentRow[j];
|
||||
}
|
||||
|
||||
// last, net and % change are different
|
||||
row['last'] = Math.floor(this.random(7000, 170000));
|
||||
row['net'] = Math.floor(this.random(-500, 500));
|
||||
row['pct_net_change'] = this.random(-1, 1).toFixed(2);
|
||||
|
||||
rowData.push(row);
|
||||
}
|
||||
return rowData;
|
||||
}
|
||||
}
|
||||
|
||||
const FX_CURRENCY_SYMBOLS = ["USDGBP", "USDEUR", "USDAED", "USDJPY", "USDCAD", "USDCHF", "GBPUSD", "GBPEUR", "GBPAED", "GBPJPY", "GBPCAD", "GBPCHF", "EURUSD", "EURGBP", "EURAED", "EURJPY", "EURCAD", "EURCHF", "AEDUSD", "AEDGBP", "AEDEUR", "AEDJPY", "AEDCAD", "AEDCHF", "JPYUSD", "JPYGBP", "JPYEUR", "JPYAED", "JPYCAD", "JPYCHF", "CADUSD", "CADGBP", "CADEUR", "CADAED", "CADJPY", "CADCHF", "CHFUSD", "CHFGBP", "CHFEUR", "CHFAED", "CHFJPY", "CHFCAD"];
|
||||
const FX_DELTA_HEADERS = [
|
||||
{
|
||||
field: 'symbol',
|
||||
headerName: 'Symbol',
|
||||
width: 80
|
||||
},
|
||||
{
|
||||
field: 'last',
|
||||
headerName: 'Last',
|
||||
headerClass: 'align-right',
|
||||
cellRenderer: 'animateShowChange',
|
||||
cellClass: 'align-right',
|
||||
width: 100
|
||||
},
|
||||
{
|
||||
field: 'net',
|
||||
headerName: 'Net',
|
||||
headerClass: 'align-right',
|
||||
cellRenderer: 'animateShowChange',
|
||||
cellClass: 'align-right',
|
||||
width: 90
|
||||
},
|
||||
{
|
||||
field: 'pct_net_change',
|
||||
headerName: '% NC',
|
||||
headerClass: 'align-right',
|
||||
cellClass: 'align-right', // to be removed once the component is in place
|
||||
// cellRendererFramework: HorizontalBarComponent,
|
||||
width: 50,
|
||||
cellClassRules: {
|
||||
'pct-change-green': 'x > 0',
|
||||
'pct-change-amber': 'x <= 0 && x >= -0.10',
|
||||
'pct-change-red': 'x < -0.10'
|
||||
}
|
||||
},
|
||||
].concat(FX_CURRENCY_SYMBOLS.map((symbol) => {
|
||||
"use strict";
|
||||
return {
|
||||
field: symbol,
|
||||
headerName: symbol,
|
||||
width: 67,
|
||||
cellClass: 'align-right',
|
||||
cellRenderer: 'animateShowChange',
|
||||
cellClassRules: {
|
||||
'fx-postive': 'x > 0.8',
|
||||
'fx-null': 'x === null',
|
||||
'fx-negative': 'x < -0.8'
|
||||
}
|
||||
}
|
||||
}));
|
||||
|
||||
const FX_CURRENCY_MATRIX = [
|
||||
["symbol", ...FX_CURRENCY_SYMBOLS],
|
||||
["USDGBP", null, "0.89", "-0.01", "0.29", "0.28", "-0.04", "0.47", "0.17", "0.20", "0.11", "0.97", "0.07", "-0.20", "0.57", "0.54", "0.26", "0.33", "0.86", "0.95", "0.39", "0.21", "-0.49", "0.63", "-0.13", "-0.86", "0.18", "-0.84", "-0.89", "0.05", "-0.29", "0.34", "0.93", "0.41", "0.13", "-0.17", "0.70", "-0.17", "0.60", "0.00", "0.09", "-0.15", "0.10"],
|
||||
["USDEUR", "0.89", null, "0.25", "0.29", "0.86", "-0.93", "0.09", "0.63", "0.76", "0.10", "0.51", "-0.31", "-0.51", "0.20", "0.48", "-0.42", "0.73", "0.57", "0.65", "0.40", "0.12", "0.24", "0.42", "0.75", "0.13", "0.75", "0.42", "-0.80", "-0.26", "0.68", "0.68", "0.98", "0.87", "0.48", "0.52", "0.23", "0.61", "0.71", "-0.61", "0.40", "-0.80", "-0.89"],
|
||||
["USDAED", "0.90", "0.95", null, "0.71", "0.49", "0.50", "0.51", "0.07", "0.80", "-0.74", "0.54", "0.46", "-0.90", "-0.33", "0.75", "0.91", "0.84", "0.86", "0.89", "0.68", "0.71", "0.74", "0.58", "-0.24", "0.31", "0.85", "0.28", "0.44", "0.51", "-0.19", "0.71", "0.81", "0.85", "0.23", "0.09", "0.65", "-0.48", "0.43", "0.97", "0.11", "-0.81", "-0.69"],
|
||||
["USDJPY", "0.84", "0.92", "0.36", null, "0.79", "0.90", "0.86", "0.42", "0.14", "0.98", "0.47", "0.76", "0.60", "0.15", "0.04", "0.58", "0.13", "-0.16", "0.63", "0.86", "-0.63", "-0.95", "0.42", "0.08", "0.90", "-0.39", "-0.16", "0.66", "0.95", "0.31", "0.66", "-0.84", "0.06", "-0.60", "0.08", "0.57", "0.93", "0.78", "0.15", "0.36", "0.78", "0.34"],
|
||||
["USDCAD", "0.79", "-0.87", "0.93", "0.83", null, "0.10", "0.60", "0.34", "0.98", "0.70", "0.09", "0.46", "0.80", "0.10", "0.26", "-0.90", "0.69", "-0.22", "0.51", "-0.75", "-0.08", "0.07", "0.24", "0.68", "0.60", "0.37", "0.92", "0.02", "0.66", "0.16", "0.24", "-0.79", "0.19", "0.19", "0.08", "-0.97", "-0.93", "0.04", "-0.92", "0.86", "-0.36", "0.04"],
|
||||
["USDCHF", "0.94", "-0.02", "0.70", "0.82", "0.41", null, "0.76", "0.06", "0.46", "0.99", "0.07", "0.72", "0.14", "0.90", "0.23", "-0.54", "0.64", "0.80", "0.16", "0.23", "0.66", "-0.89", "-0.54", "-0.95", "0.27", "0.56", "0.42", "0.41", "0.88", "0.81", "0.37", "0.75", "0.06", "-0.75", "0.98", "0.21", "0.01", "0.03", "0.35", "-0.42", "0.55", "0.19"],
|
||||
["GBPUSD", "0.05", "-0.64", "0.47", "0.56", "0.51", "-0.47", null, "-0.15", "0.13", "0.55", "0.58", "0.57", "-0.49", "0.28", "0.86", "0.49", "0.12", "-0.91", "0.06", "0.12", "0.18", "-0.02", "-0.55", "0.18", "0.29", "0.76", "0.11", "0.04", "0.55", "0.16", "0.84", "0.83", "-0.94", "0.32", "0.07", "-0.33", "-0.29", "0.01", "-0.19", "0.01", "-0.60", "0.66"],
|
||||
["GBPEUR", "-0.32", "0.17", "0.60", "-0.52", "-0.52", "0.39", "-0.42", null, "0.07", "0.69", "0.67", "0.01", "0.72", "0.35", "0.66", "-0.66", "0.21", "0.12", "0.42", "-0.57", "-0.04", "0.48", "0.91", "0.72", "-0.16", "0.79", "0.03", "0.44", "0.17", "0.87", "-0.82", "0.20", "0.88", "0.48", "0.59", "-0.70", "0.12", "0.56", "-0.69", "0.10", "0.90", "1.00"],
|
||||
["GBPAED", "0.76", "0.05", "0.72", "-0.40", "0.93", "0.64", "0.90", "0.21", null, "0.91", "0.33", "-0.36", "0.28", "0.87", "0.25", "0.33", "0.44", "0.89", "0.17", "0.96", "0.86", "0.88", "0.03", "-0.25", "0.21", "0.98", "-0.60", "0.07", "0.90", "0.23", "0.41", "0.77", "0.83", "0.94", "0.12", "0.37", "0.58", "0.35", "-0.53", "0.49", "0.96", "-0.06"],
|
||||
["GBPJPY", "0.63", "0.72", "0.59", "0.89", "-0.54", "0.97", "0.61", "0.64", "0.85", null, "0.35", "0.57", "0.25", "0.85", "0.27", "-0.70", "-0.30", "-0.36", "0.29", "0.82", "0.26", "0.69", "0.46", "0.01", "0.09", "0.78", "0.95", "0.16", "0.07", "0.41", "0.99", "0.67", "0.34", "-0.89", "0.83", "0.32", "0.21", "-0.48", "-0.64", "0.65", "0.58", "0.69"],
|
||||
["GBPCAD", "0.78", "0.09", "0.33", "0.11", "0.95", "0.01", "0.96", "0.72", "0.13", "0.02", null, "0.44", "0.63", "-0.52", "0.08", "-0.85", "0.74", "0.41", "0.52", "0.15", "-0.97", "0.61", "0.58", "0.47", "0.56", "0.37", "0.54", "-0.65", "0.98", "0.44", "0.28", "0.70", "0.44", "0.34", "0.95", "0.82", "-0.09", "0.62", "0.87", "0.25", "-1.00", "0.99"],
|
||||
["GBPCHF", "-0.87", "0.68", "0.84", "0.83", "0.50", "0.74", "0.02", "0.11", "-0.12", "0.36", "0.71", null, "0.45", "0.02", "0.51", "0.50", "-0.03", "-0.94", "0.23", "0.38", "0.09", "0.26", "0.14", "0.39", "0.36", "0.01", "0.76", "0.21", "0.03", "0.97", "-0.89", "0.68", "0.43", "0.43", "0.26", "0.01", "0.60", "0.15", "0.77", "0.51", "-0.31", "0.37"],
|
||||
["EURUSD", "-0.45", "-0.05", "0.14", "-0.11", "0.36", "0.12", "0.76", "0.66", "0.50", "0.31", "0.28", "0.90", null, "-0.04", "0.73", "0.33", "0.27", "0.22", "0.86", "0.79", "-0.29", "0.30", "0.89", "0.73", "0.94", "0.24", "0.19", "0.81", "0.88", "0.46", "0.19", "0.79", "-0.16", "0.85", "0.84", "-0.57", "-0.87", "0.86", "0.69", "0.12", "0.64", "0.13"],
|
||||
["EURGBP", "0.06", "0.81", "0.54", "0.57", "0.57", "0.81", "0.38", "0.70", "0.37", "0.58", "-0.56", "0.77", "0.59", null, "0.98", "-0.48", "0.60", "0.78", "0.22", "0.20", "-0.62", "-0.97", "-0.55", "0.39", "0.88", "0.96", "0.32", "0.84", "0.26", "-0.47", "0.04", "0.34", "-0.24", "0.53", "-0.75", "-0.97", "0.47", "0.81", "0.49", "-0.84", "0.94", "0.09"],
|
||||
["EURAED", "0.61", "0.59", "0.11", "0.21", "0.41", "-0.45", "0.32", "0.90", "-0.98", "0.38", "0.27", "0.62", "0.67", "0.89", null, "0.27", "0.65", "0.72", "0.69", "0.66", "0.12", "0.32", "0.11", "-0.73", "-0.17", "0.74", "0.03", "0.96", "0.59", "-0.92", "-0.91", "-0.41", "0.09", "0.45", "0.90", "0.88", "0.96", "0.47", "0.95", "0.27", "-0.48", "0.71"],
|
||||
["EURJPY", "-0.01", "0.36", "0.28", "0.68", "0.50", "0.25", "0.81", "0.64", "0.12", "-0.73", "-0.47", "0.96", "-0.98", "-0.41", "0.78", null, "0.19", "-0.37", "0.24", "0.63", "0.74", "-0.24", "0.46", "0.63", "0.99", "0.65", "0.52", "0.11", "0.52", "0.39", "0.41", "0.51", "0.78", "1.00", "0.80", "-0.11", "0.90", "0.96", "0.66", "0.32", "0.02", "0.19"],
|
||||
["EURCAD", "-0.80", "0.40", "0.35", "0.45", "0.66", "0.21", "0.77", "0.58", "0.09", "1.00", "0.02", "-0.85", "0.89", "0.63", "-0.05", "0.46", null, "0.87", "0.96", "-0.48", "0.40", "0.18", "0.37", "0.81", "0.50", "-0.06", "-0.56", "0.38", "0.02", "0.83", "-0.93", "0.80", "0.31", "0.10", "0.70", "0.55", "0.47", "0.77", "0.98", "0.88", "0.19", "0.91"],
|
||||
["EURCHF", "-0.93", "0.01", "-0.29", "0.46", "-0.59", "-0.15", "0.58", "0.00", "-0.62", "0.36", "0.27", "-0.10", "-0.10", "0.57", "0.57", "0.75", "-0.10", null, "0.88", "0.21", "0.89", "0.85", "0.16", "0.93", "0.60", "0.59", "0.42", "0.70", "0.66", "0.80", "0.83", "0.52", "0.01", "0.41", "0.68", "0.94", "0.81", "0.40", "0.69", "0.04", "0.70", "0.61"],
|
||||
["AEDUSD", "0.10", "0.45", "0.06", "-0.37", "-0.14", "0.63", "0.10", "0.77", "0.95", "-0.12", "1.00", "-0.19", "-0.59", "0.78", "0.10", "0.76", "-0.45", "-0.99", null, "-0.46", "0.28", "0.31", "0.32", "0.42", "-0.00", "0.66", "0.24", "0.31", "0.10", "0.73", "0.02", "0.78", "0.07", "1.00", "0.43", "0.61", "0.53", "0.53", "0.41", "0.37", "0.97", "-0.19"],
|
||||
["AEDGBP", "0.70", "0.73", "0.34", "0.97", "0.84", "0.05", "0.21", "0.14", "0.45", "0.69", "0.41", "-0.53", "0.28", "0.13", "0.99", "0.97", "0.93", "0.62", "0.35", null, "0.18", "0.96", "0.58", "0.04", "0.00", "0.58", "-0.54", "0.35", "0.84", "0.83", "-0.20", "0.51", "0.32", "0.01", "0.95", "0.69", "-0.73", "0.36", "0.78", "0.02", "0.22", "0.39"],
|
||||
["AEDEUR", "0.18", "0.84", "-0.89", "0.90", "-0.25", "0.53", "0.71", "0.80", "0.60", "-0.98", "-0.81", "0.57", "0.72", "0.32", "-0.23", "0.98", "0.50", "0.93", "0.56", "0.26", null, "0.61", "0.47", "0.72", "0.58", "0.19", "0.94", "0.21", "0.47", "0.70", "0.67", "0.85", "0.98", "0.15", "0.21", "0.43", "0.03", "0.92", "0.91", "0.35", "0.70", "0.85"],
|
||||
["AEDJPY", "0.88", "0.62", "0.50", "0.27", "0.56", "0.61", "0.06", "-0.02", "0.42", "0.26", "0.23", "0.83", "-0.55", "0.94", "0.01", "0.72", "-0.43", "0.10", "0.01", "-0.20", "0.13", null, "0.70", "0.10", "0.05", "0.43", "-0.14", "-0.64", "0.80", "0.79", "0.57", "0.14", "0.14", "0.04", "-0.96", "0.59", "0.14", "0.51", "0.23", "0.57", "0.94", "0.88"],
|
||||
["AEDCAD", "0.75", "-0.99", "0.82", "-0.87", "0.79", "1.00", "0.21", "0.30", "-0.40", "0.34", "-0.85", "0.41", "0.79", "0.17", "0.58", "-0.24", "0.18", "0.15", "0.18", "0.44", "0.34", "0.90", null, "0.10", "0.34", "0.31", "0.34", "0.79", "-0.05", "0.19", "-0.86", "0.61", "-0.65", "0.23", "0.59", "0.69", "-0.65", "0.89", "0.97", "0.12", "0.63", "-0.24"],
|
||||
["AEDCHF", "0.67", "0.46", "0.92", "0.22", "0.91", "0.67", "0.81", "0.04", "0.29", "0.13", "0.80", "0.95", "0.29", "0.99", "-0.17", "0.58", "0.64", "0.68", "0.41", "0.69", "0.84", "0.01", "0.04", null, "0.07", "0.16", "0.26", "-0.43", "0.08", "0.58", "0.33", "-0.28", "0.03", "-0.08", "0.54", "-0.91", "0.78", "-0.10", "-0.13", "0.15", "0.62", "-0.13"],
|
||||
["JPYUSD", "-0.67", "0.90", "0.84", "0.10", "0.77", "0.43", "0.59", "0.69", "0.63", "0.82", "-0.61", "0.41", "0.07", "0.48", "1.00", "-0.52", "0.22", "0.89", "0.43", "0.54", "0.56", "-0.43", "0.78", "0.67", null, "0.06", "0.28", "0.04", "0.62", "0.18", "0.77", "0.63", "0.05", "0.87", "0.22", "0.21", "0.07", "0.25", "-0.55", "0.67", "0.10", "-0.67"],
|
||||
["JPYGBP", "0.21", "0.46", "0.23", "0.53", "-0.97", "0.78", "0.43", "0.74", "-0.95", "0.98", "0.49", "0.66", "0.18", "0.55", "-0.33", "0.67", "0.65", "0.23", "-0.07", "-0.67", "0.56", "0.74", "-0.38", "-0.83", "-0.51", null, "-0.26", "-0.79", "0.73", "-0.78", "-0.09", "0.19", "0.48", "0.97", "0.11", "0.19", "0.51", "0.32", "0.81", "-0.02", "0.17", "0.48"],
|
||||
["JPYEUR", "0.83", "0.86", "0.62", "-0.92", "0.64", "0.58", "0.55", "0.07", "0.81", "0.32", "0.33", "0.96", "0.48", "0.57", "0.25", "0.56", "0.33", "0.02", "-0.79", "0.44", "0.95", "0.35", "0.41", "0.06", "0.28", "0.77", null, "0.64", "0.79", "0.74", "0.67", "-0.97", "0.47", "-0.11", "0.03", "0.39", "-0.37", "0.06", "0.09", "0.13", "0.20", "0.87"],
|
||||
["JPYAED", "0.69", "0.80", "0.90", "0.06", "0.55", "0.90", "-0.09", "0.05", "-0.10", "0.31", "0.57", "0.69", "-0.78", "0.42", "0.64", "0.96", "0.08", "-0.76", "0.59", "0.00", "0.40", "-0.88", "0.69", "0.17", "-0.16", "0.57", "0.86", null, "-0.61", "-0.14", "0.41", "-0.16", "0.36", "0.95", "0.44", "0.41", "0.35", "-0.56", "0.25", "0.66", "0.90", "0.82"],
|
||||
["JPYCAD", "0.33", "0.27", "0.61", "0.01", "-0.16", "0.21", "0.57", "-0.41", "-0.56", "0.55", "0.13", "-0.87", "0.19", "0.64", "-0.38", "-0.80", "-0.10", "0.44", "0.72", "-0.72", "0.48", "0.42", "0.84", "0.73", "0.35", "0.68", "0.01", "0.09", null, "0.87", "0.17", "0.45", "0.02", "0.01", "0.77", "0.24", "0.62", "0.39", "-0.73", "0.21", "-0.08", "0.42"],
|
||||
["JPYCHF", "-0.45", "0.52", "0.34", "0.85", "0.16", "0.96", "0.53", "0.62", "0.46", "0.94", "0.08", "-0.68", "0.81", "0.44", "0.27", "0.75", "-0.84", "0.69", "-0.99", "0.41", "0.66", "-0.94", "0.21", "0.85", "-0.08", "0.36", "0.62", "0.25", "-0.48", null, "0.51", "-0.39", "0.60", "0.63", "0.68", "0.10", "0.62", "0.68", "0.00", "0.24", "0.61", "0.23"],
|
||||
["CADUSD", "-0.65", "0.73", "0.93", "0.27", "-0.00", "-0.46", "0.53", "0.36", "0.83", "0.58", "0.40", "0.03", "0.32", "0.38", "-0.53", "0.86", "0.42", "0.90", "0.83", "0.94", "0.34", "-0.56", "0.46", "-0.72", "0.13", "0.08", "0.25", "0.59", "0.75", "0.72", null, "0.62", "0.73", "0.52", "0.28", "0.03", "-0.54", "0.50", "0.76", "-0.28", "0.89", "0.97"],
|
||||
["CADGBP", "0.74", "0.58", "0.55", "0.01", "0.33", "0.61", "0.75", "0.86", "-0.87", "0.50", "0.57", "0.84", "-0.34", "1.00", "0.77", "0.75", "0.40", "0.12", "-0.57", "-0.16", "-0.91", "0.06", "0.67", "-0.55", "0.02", "0.78", "0.57", "0.70", "0.21", "0.95", "-0.91", null, "-0.82", "0.71", "0.36", "0.46", "0.46", "0.24", "0.15", "0.54", "0.15", "0.83"],
|
||||
["CADEUR", "-0.58", "0.29", "0.03", "0.70", "0.77", "0.80", "0.52", "0.04", "0.11", "0.86", "-0.98", "0.02", "0.01", "-0.19", "-0.48", "0.80", "0.90", "0.10", "0.28", "0.88", "0.98", "0.43", "0.47", "-0.41", "-0.92", "0.49", "0.64", "-0.60", "0.11", "0.61", "0.19", "-0.39", null, "-0.21", "0.56", "-0.45", "-0.48", "0.51", "0.04", "-0.44", "-0.22", "-0.29"],
|
||||
["CADAED", "0.07", "0.55", "0.99", "-0.41", "0.65", "0.75", "0.97", "0.74", "0.65", "0.37", "-0.04", "0.85", "0.83", "0.25", "0.14", "-0.00", "0.80", "0.78", "-0.42", "0.54", "-0.42", "-0.07", "-0.62", "0.56", "0.89", "0.92", "0.19", "0.64", "0.45", "0.24", "0.97", "0.41", "0.36", null, "-0.54", "-0.85", "-0.68", "0.48", "0.13", "0.61", "0.75", "0.21"],
|
||||
["CADJPY", "-0.84", "0.71", "0.59", "-0.78", "0.92", "0.93", "0.03", "0.27", "0.22", "0.71", "-0.79", "0.72", "0.27", "0.29", "0.40", "0.66", "0.44", "-0.33", "0.24", "0.99", "-0.95", "0.74", "0.42", "0.45", "0.08", "0.46", "0.22", "0.70", "0.80", "0.36", "0.36", "0.94", "0.75", "0.51", null, "0.10", "0.31", "0.54", "1.00", "0.78", "0.17", "0.32"],
|
||||
["CADCHF", "0.19", "0.00", "0.62", "-0.63", "0.75", "0.57", "0.28", "-0.98", "0.17", "-0.63", "0.09", "0.10", "-0.09", "0.22", "0.65", "0.20", "0.27", "-0.66", "-0.70", "0.72", "0.40", "0.96", "0.52", "0.38", "0.96", "0.90", "0.35", "-0.70", "0.37", "0.94", "0.20", "0.78", "0.34", "0.24", "-0.18", null, "0.05", "0.71", "0.05", "0.38", "0.02", "0.60"],
|
||||
["CHFUSD", "0.42", "0.61", "-0.30", "-0.27", "0.46", "0.63", "0.64", "0.33", "0.18", "0.88", "0.99", "0.73", "0.85", "0.07", "0.53", "0.31", "-0.63", "0.56", "-0.04", "-0.68", "0.43", "-0.96", "0.45", "0.45", "0.50", "0.17", "0.82", "0.34", "0.26", "0.16", "0.71", "0.35", "0.57", "0.79", "0.56", "0.55", null, "0.02", "-0.90", "0.84", "0.33", "0.18"],
|
||||
["CHFGBP", "-0.38", "0.73", "0.25", "0.64", "0.41", "-0.48", "0.75", "-0.40", "0.37", "0.62", "0.30", "0.06", "0.54", "0.15", "0.51", "0.33", "-0.79", "-0.05", "-0.54", "0.21", "0.40", "0.86", "0.96", "0.94", "0.52", "0.07", "0.71", "-0.80", "-0.40", "0.71", "0.71", "0.89", "0.43", "-0.68", "0.93", "0.05", "0.42", null, "0.59", "-0.67", "0.03", "0.17"],
|
||||
["CHFEUR", "-0.64", "0.96", "-0.34", "0.71", "0.53", "0.44", "0.27", "0.56", "0.96", "0.40", "0.86", "0.65", "0.82", "0.89", "-0.75", "0.29", "0.06", "0.70", "0.23", "0.68", "0.79", "0.21", "0.50", "0.14", "-0.27", "-0.83", "-0.22", "0.59", "0.40", "0.10", "0.88", "0.99", "0.21", "-0.36", "0.00", "0.53", "0.08", "0.08", null, "0.53", "-0.51", "0.03"],
|
||||
["CHFAED", "-0.99", "0.71", "0.51", "0.58", "0.57", "0.73", "0.60", "0.23", "0.02", "0.84", "0.90", "0.56", "0.03", "-0.93", "0.59", "0.24", "-0.67", "0.13", "0.99", "0.28", "0.72", "0.79", "-0.83", "-0.30", "0.73", "0.08", "-0.02", "0.85", "0.33", "0.57", "0.09", "0.26", "0.16", "0.80", "0.65", "-0.19", "-0.38", "-0.61", "-0.98", null, "0.57", "-0.81"],
|
||||
["CHFJPY", "0.60", "0.96", "0.22", "0.52", "0.63", "0.24", "0.76", "0.91", "0.80", "-0.14", "0.59", "-0.01", "0.60", "-0.08", "0.63", "0.39", "0.30", "-0.71", "0.18", "0.94", "-0.30", "0.28", "0.87", "0.92", "-0.19", "0.18", "-0.40", "0.44", "0.88", "0.52", "0.50", "0.44", "0.84", "0.24", "0.09", "0.15", "0.10", "0.30", "-0.05", "0.79", null, "0.99"],
|
||||
["CHFCAD", "0.93", "0.24", "0.05", "0.40", "0.75", "0.12", "0.90", "0.56", "0.46", "0.62", "0.71", "0.01", "0.04", "0.02", "0.49", "0.51", "-0.94", "0.93", "0.80", "-0.40", "0.79", "0.82", "-0.04", "0.38", "-0.24", "-0.17", "0.78", "-0.42", "0.92", "-0.83", "-0.01", "0.54", "0.73", "0.52", "0.95", "0.44", "0.90", "0.81", "0.42", "0.26", "0.36", null]
|
||||
];
|
||||
|
||||
// for (i = 0; i < MAJOR_CURRENCIES.length; i++) {
|
||||
// for (j = 0; j < MAJOR_CURRENCIES.length; j++) {
|
||||
// if (i === j) {
|
||||
// continue;
|
||||
// }
|
||||
// console.log(`${MAJOR_CURRENCIES[i] + MAJOR_CURRENCIES[j]}`);
|
||||
// }
|
||||
// }
|
||||
|
||||
// let rows = [];
|
||||
// let row = ['Symbol'];
|
||||
//
|
||||
// rows = [];
|
||||
// for (j = 0; j < FX_CURRENCY_CODE.length; j++) {
|
||||
// row.push(FX_CURRENCY_CODE[j]);
|
||||
// }
|
||||
// rows.push(row);
|
||||
//
|
||||
// for (i = 0; i < FX_CURRENCY_CODE.length; i++) {
|
||||
// let row = [];
|
||||
// row.push(FX_CURRENCY_CODE[i]);
|
||||
//
|
||||
// for (j = 0; j < FX_CURRENCY_CODE.length; j++) {
|
||||
// if (i === j) {
|
||||
// row.push(null);
|
||||
// } else {
|
||||
// var mutliplier = ((Math.random() * 10) > 8) ? -1 : 1;
|
||||
// row.push((mutliplier * Math.random()).toFixed(2))
|
||||
// // row.push(`${FX_CURRENCY_CODE[j]} value`)
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// rows.push(row);
|
||||
// }
|
||||
//
|
||||
// JSON.stringify(rows);
|
||||
//
|
||||
// const FX_CURRENCY_CODE = [
|
||||
// 'USDGBP',
|
||||
// 'USDEUR',
|
||||
// 'USDAED',
|
||||
// 'USDJPY',
|
||||
// 'USDCAD',
|
||||
// 'USDCHF',
|
||||
// 'GBPUSD',
|
||||
// 'GBPEUR',
|
||||
// 'GBPAED',
|
||||
// 'GBPJPY',
|
||||
// 'GBPCAD',
|
||||
// 'GBPCHF',
|
||||
// 'EURUSD',
|
||||
// 'EURGBP',
|
||||
// 'EURAED',
|
||||
// 'EURJPY',
|
||||
// 'EURCAD',
|
||||
// 'EURCHF',
|
||||
// 'AEDUSD',
|
||||
// 'AEDGBP',
|
||||
// 'AEDEUR',
|
||||
// 'AEDJPY',
|
||||
// 'AEDCAD',
|
||||
// 'AEDCHF',
|
||||
// 'JPYUSD',
|
||||
// 'JPYGBP',
|
||||
// 'JPYEUR',
|
||||
// 'JPYAED',
|
||||
// 'JPYCAD',
|
||||
// 'JPYCHF',
|
||||
// 'CADUSD',
|
||||
// 'CADGBP',
|
||||
// 'CADEUR',
|
||||
// 'CADAED',
|
||||
// 'CADJPY',
|
||||
// 'CADCHF',
|
||||
// 'CHFUSD',
|
||||
// 'CHFGBP',
|
||||
// 'CHFEUR',
|
||||
// 'CHFAED',
|
||||
// 'CHFJPY',
|
||||
// 'CHFCAD'
|
||||
// ];
|
||||
//
|
||||
// const MAJOR_CURRENCIES = [
|
||||
// 'USD',
|
||||
// 'GBP',
|
||||
// 'EUR',
|
||||
// 'AED',
|
||||
// 'JPY',
|
||||
// 'CAD',
|
||||
// 'CHF'];
|
||||
//
|
||||
// const SECONDARY_CURRENCIES = [
|
||||
// 'AFN',
|
||||
// 'ALL',
|
||||
// 'AMD',
|
||||
// 'ANG',
|
||||
// 'AOA',
|
||||
// 'ARS',
|
||||
// 'AUD',
|
||||
// 'AWG',
|
||||
// 'AZN',
|
||||
// 'BAM',
|
||||
// 'BBD',
|
||||
// 'BDT',
|
||||
// 'BGN',
|
||||
// 'BHD',
|
||||
// 'BIF',
|
||||
// 'BMD',
|
||||
// 'BND',
|
||||
// 'BOB',
|
||||
// 'BRL',
|
||||
// 'BSD',
|
||||
// 'BTN',
|
||||
// 'BWP',
|
||||
// 'BYN',
|
||||
// 'BZD',
|
||||
// 'CDF',
|
||||
// 'CLP',
|
||||
// 'CNY',
|
||||
// 'COP',
|
||||
// 'CRC',
|
||||
// 'CUC',
|
||||
// 'CUP',
|
||||
// 'CVE',
|
||||
// 'CZK',
|
||||
// 'DJF',
|
||||
// 'DKK',
|
||||
// 'DOP',
|
||||
// 'DZD',
|
||||
// 'EGP',
|
||||
// 'ERN',
|
||||
// 'ETB',
|
||||
// 'FJD',
|
||||
// 'FKP',
|
||||
// 'GEL',
|
||||
// 'GGP',
|
||||
// 'GHS',
|
||||
// 'GIP',
|
||||
// 'GMD',
|
||||
// 'GNF',
|
||||
// 'GTQ',
|
||||
// 'GYD',
|
||||
// 'HKD',
|
||||
// 'HNL',
|
||||
// 'HRK',
|
||||
// 'HTG',
|
||||
// 'HUF',
|
||||
// 'IDR',
|
||||
// 'ILS',
|
||||
// 'IMP',
|
||||
// 'INR',
|
||||
// 'IQD',
|
||||
// 'IRR',
|
||||
// 'ISK',
|
||||
// 'JEP',
|
||||
// 'JMD',
|
||||
// 'JOD',
|
||||
// 'KES',
|
||||
// 'KGS',
|
||||
// 'KHR',
|
||||
// 'KMF',
|
||||
// 'KPW',
|
||||
// 'KRW',
|
||||
// 'KWD',
|
||||
// 'KYD',
|
||||
// 'KZT',
|
||||
// 'LAK',
|
||||
// 'LBP',
|
||||
// 'LKR',
|
||||
// 'LRD',
|
||||
// 'LSL',
|
||||
// 'LYD',
|
||||
// 'MAD',
|
||||
// 'MDL',
|
||||
// 'MGA',
|
||||
// 'MKD',
|
||||
// 'MMK',
|
||||
// 'MNT',
|
||||
// 'MOP',
|
||||
// 'MRO',
|
||||
// 'MUR',
|
||||
// 'MVR',
|
||||
// 'MWK',
|
||||
// 'MXN',
|
||||
// 'MYR',
|
||||
// 'MZN',
|
||||
// 'NAD',
|
||||
// 'NGN',
|
||||
// 'NIO',
|
||||
// 'NOK',
|
||||
// 'NPR',
|
||||
// 'NZD',
|
||||
// 'OMR',
|
||||
// 'PAB',
|
||||
// 'PEN',
|
||||
// 'PGK',
|
||||
// 'PHP',
|
||||
// 'PKR',
|
||||
// 'PLN',
|
||||
// 'PYG',
|
||||
// 'QAR',
|
||||
// 'RON',
|
||||
// 'RSD',
|
||||
// 'RUB',
|
||||
// 'RWF',
|
||||
// 'SAR',
|
||||
// 'SBD',
|
||||
// 'SCR',
|
||||
// 'SDG',
|
||||
// 'SEK',
|
||||
// 'SGD',
|
||||
// 'SHP',
|
||||
// 'SLL',
|
||||
// 'SOS',
|
||||
// 'SPL',
|
||||
// 'SRD',
|
||||
// 'STD',
|
||||
// 'SVC',
|
||||
// 'SYP',
|
||||
// 'SZL',
|
||||
// 'THB',
|
||||
// 'TJS',
|
||||
// 'TMT',
|
||||
// 'TND',
|
||||
// 'TOP',
|
||||
// 'TRY',
|
||||
// 'TTD',
|
||||
// 'TVD',
|
||||
// 'TWD',
|
||||
// 'TZS',
|
||||
// 'UAH',
|
||||
// 'UGX',
|
||||
// 'UYU',
|
||||
// 'UZS',
|
||||
// 'VEF',
|
||||
// 'VND',
|
||||
// 'VUV',
|
||||
// 'WST',
|
||||
// 'XAF',
|
||||
// 'XCD',
|
||||
// 'XDR',
|
||||
// 'XOF',
|
||||
// 'XPF',
|
||||
// 'YER',
|
||||
// 'ZMW',
|
||||
// 'ZWD',
|
||||
// 'ZAR'];
|
||||
8
src-trader-dashboard/services/StoreService.js
Normal file
8
src-trader-dashboard/services/StoreService.js
Normal file
@@ -0,0 +1,8 @@
|
||||
import {createStore} from "redux";
|
||||
|
||||
import fxData from "../reducers/fxData";
|
||||
|
||||
class StoreService {
|
||||
}
|
||||
StoreService.STORE = createStore(fxData);
|
||||
export default StoreService;
|
||||
Reference in New Issue
Block a user