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 React, {Component} from "react";
|
||||||
import {connect} from "react-redux";
|
import {connect} from "react-redux";
|
||||||
|
|
||||||
import {AgGridReact} from "ag-grid-react";
|
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 {
|
class FxQuoteMatrix extends Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
super(props);
|
super(props);
|
||||||
|
|
||||||
this.exchangeService = new ExchangeService();
|
this.fxDataService = new FxDataService();
|
||||||
|
|
||||||
this.state = {
|
this.state = {
|
||||||
columnDefs: this.exchangeService.getFxMatrixHeaderNames(),
|
columnDefs: this.fxDataService.getFxMatrixHeaderNames()
|
||||||
// rowData: this.exchangeService.getFxMatrixSnapshot()
|
|
||||||
};
|
};
|
||||||
|
|
||||||
// grid events
|
// grid events
|
||||||
@@ -24,56 +28,52 @@ class FxQuoteMatrix extends Component {
|
|||||||
this.columnApi = params.columnApi;
|
this.columnApi = params.columnApi;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// componentWillUnmount() {
|
|
||||||
// this.exchangeService.removeSubscribers();
|
|
||||||
// }
|
|
||||||
|
|
||||||
componentWillReceiveProps(nextProps) {
|
componentWillReceiveProps(nextProps) {
|
||||||
console.log(props);
|
if (!this.gridApi) {
|
||||||
// if (nextProps.selectedExchange.supportedStocks !== this.props.selectedExchange.supportedStocks) {
|
return;
|
||||||
// if (!this.gridApi) {
|
}
|
||||||
// return;
|
|
||||||
// }
|
if (!this.props.rowData ||
|
||||||
//
|
this.props.rowData.length === 0) {
|
||||||
// const currentSymbols = this.props.selectedExchange.supportedStocks;
|
this.gridApi.setRowData(nextProps.rowData);
|
||||||
// const nextSymbols = nextProps.selectedExchange.supportedStocks;
|
} else {
|
||||||
//
|
const newRowData = nextProps.rowData;
|
||||||
// // Unsubscribe to current ones that will be removed
|
|
||||||
// const symbolsRemoved = difference(currentSymbols, nextSymbols);
|
const updatedNodes = [];
|
||||||
// forEach(symbolsRemoved, symbol => {
|
const updatedCols = [];
|
||||||
// this.exchangeService.removeSubscriber(this.updateQuote, symbol);
|
|
||||||
// });
|
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
|
||||||
// // Subscribe to new ones that need to be added
|
// row and column order
|
||||||
// const symbolsAdded = difference(nextSymbols, currentSymbols);
|
let node = this.gridApi.getModel().getRow(i);
|
||||||
// forEach(symbolsAdded, symbol => {
|
let newRow = newRowData[i];
|
||||||
// this.exchangeService.addSubscriber(this.updateQuote, symbol);
|
|
||||||
// });
|
const {data} = node;
|
||||||
//
|
let updated = false;
|
||||||
// // Remove ag-grid nodes as necessary
|
for (const def of this.state.columnDefs) {
|
||||||
// const nodesToRemove = [];
|
if (data[def.field] !== newRow[def.field]) {
|
||||||
// this.gridApi.forEachNode(node => {
|
updatedCols.push(def.field);
|
||||||
// const {data} = node;
|
|
||||||
// if (includes(symbolsRemoved, data.symbol)) {
|
updated = true;
|
||||||
// nodesToRemove.push(node);
|
}
|
||||||
// }
|
}
|
||||||
// });
|
if(updated) {
|
||||||
// this.gridApi.removeItems(nodesToRemove);
|
assign(data, newRow);
|
||||||
//
|
updatedNodes.push(node);
|
||||||
// // Insert new ag-grid nodes as necessary
|
}
|
||||||
// this.gridApi.addItems(map(symbolsAdded, symbol => this.exchangeService.getTicker(symbol)));
|
}
|
||||||
// }
|
|
||||||
|
this.gridApi.refreshCells(updatedNodes, uniq(updatedCols));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<div style={{height: 500, width: "100%"}}
|
<div style={{height: 410, width: "100%"}}
|
||||||
className="ag-fresh">
|
className="ag-fresh">
|
||||||
<AgGridReact
|
<AgGridReact
|
||||||
// properties
|
// properties
|
||||||
columnDefs={this.state.columnDefs}
|
columnDefs={this.state.columnDefs}
|
||||||
rowData={this.state.rowData}
|
|
||||||
enableSorting="false"
|
enableSorting="false"
|
||||||
enableFilter="false"
|
enableFilter="false"
|
||||||
|
|
||||||
@@ -88,7 +88,7 @@ class FxQuoteMatrix extends Component {
|
|||||||
export default connect(
|
export default connect(
|
||||||
(state) => {
|
(state) => {
|
||||||
return {
|
return {
|
||||||
rowData: state.fxRowData
|
rowData: state.fxData
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
)(FxQuoteMatrix);
|
)(FxQuoteMatrix);
|
||||||
@@ -1,8 +1,5 @@
|
|||||||
import React, {Component} from "react";
|
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 {AgGridReact} from "ag-grid-react";
|
||||||
|
|
||||||
import map from "lodash/map";
|
import map from "lodash/map";
|
||||||
@@ -61,10 +58,10 @@ export default class extends Component {
|
|||||||
|
|
||||||
// grid events
|
// grid events
|
||||||
this.onGridReady = this.onGridReady.bind(this);
|
this.onGridReady = this.onGridReady.bind(this);
|
||||||
this.onRowClicked = this.onRowClicked.bind(this);
|
this.onSelectionChanged = this.onSelectionChanged.bind(this);
|
||||||
|
|
||||||
// component events
|
// component events
|
||||||
this.updateQuote = this.updateQuote.bind(this);
|
this.updateSymbol = this.updateSymbol.bind(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
numberFormatter(params) {
|
numberFormatter(params) {
|
||||||
@@ -83,16 +80,20 @@ export default class extends Component {
|
|||||||
let rowData = map(this.props.selectedExchange.supportedStocks, symbol => this.exchangeService.getTicker(symbol));
|
let rowData = map(this.props.selectedExchange.supportedStocks, symbol => this.exchangeService.getTicker(symbol));
|
||||||
this.gridApi.addItems(rowData);
|
this.gridApi.addItems(rowData);
|
||||||
|
|
||||||
|
// select the first symbol to show the chart
|
||||||
|
this.gridApi.getModel().getRow(0).setSelected(true);
|
||||||
|
|
||||||
this.gridApi.sizeColumnsToFit();
|
this.gridApi.sizeColumnsToFit();
|
||||||
}
|
}
|
||||||
|
|
||||||
onRowClicked(params) {
|
onSelectionChanged() {
|
||||||
this.props.onRowClicked(params.data.symbol);
|
let selectedNode = this.gridApi.getSelectedNodes()[0];
|
||||||
|
this.props.onSelectionChanged(selectedNode ? selectedNode.data.symbol : null);
|
||||||
}
|
}
|
||||||
|
|
||||||
componentWillMount() {
|
componentWillMount() {
|
||||||
this.props.selectedExchange.supportedStocks.forEach(symbol => {
|
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) {
|
if (!this.gridApi) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
this.gridApi.deselectAll();
|
||||||
|
|
||||||
const currentSymbols = this.props.selectedExchange.supportedStocks;
|
const currentSymbols = this.props.selectedExchange.supportedStocks;
|
||||||
const nextSymbols = nextProps.selectedExchange.supportedStocks;
|
const nextSymbols = nextProps.selectedExchange.supportedStocks;
|
||||||
@@ -112,13 +114,13 @@ export default class extends Component {
|
|||||||
// Unsubscribe to current ones that will be removed
|
// Unsubscribe to current ones that will be removed
|
||||||
const symbolsRemoved = difference(currentSymbols, nextSymbols);
|
const symbolsRemoved = difference(currentSymbols, nextSymbols);
|
||||||
forEach(symbolsRemoved, symbol => {
|
forEach(symbolsRemoved, symbol => {
|
||||||
this.exchangeService.removeSubscriber(this.updateQuote, symbol);
|
this.exchangeService.removeSubscriber(this.updateSymbol, symbol);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Subscribe to new ones that need to be added
|
// Subscribe to new ones that need to be added
|
||||||
const symbolsAdded = difference(nextSymbols, currentSymbols);
|
const symbolsAdded = difference(nextSymbols, currentSymbols);
|
||||||
forEach(symbolsAdded, symbol => {
|
forEach(symbolsAdded, symbol => {
|
||||||
this.exchangeService.addSubscriber(this.updateQuote, symbol);
|
this.exchangeService.addSubscriber(this.updateSymbol, symbol);
|
||||||
});
|
});
|
||||||
|
|
||||||
// Remove ag-grid nodes as necessary
|
// Remove ag-grid nodes as necessary
|
||||||
@@ -132,11 +134,15 @@ export default class extends Component {
|
|||||||
this.gridApi.removeItems(nodesToRemove);
|
this.gridApi.removeItems(nodesToRemove);
|
||||||
|
|
||||||
// Insert new ag-grid nodes as necessary
|
// 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) {
|
if (!this.gridApi) {
|
||||||
// the grid isn't ready yet
|
// the grid isn't ready yet
|
||||||
return;
|
return;
|
||||||
@@ -147,13 +153,13 @@ export default class extends Component {
|
|||||||
|
|
||||||
this.gridApi.forEachNode(node => {
|
this.gridApi.forEachNode(node => {
|
||||||
const {data} = node;
|
const {data} = node;
|
||||||
if (data.symbol === quote.symbol) {
|
if (data.symbol === symbol.symbol) {
|
||||||
for (const def of this.state.columnDefs) {
|
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);
|
updatedCols.push(def.field);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
assign(data, quote);
|
assign(data, symbol);
|
||||||
updatedNodes.push(node);
|
updatedNodes.push(node);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -163,16 +169,17 @@ export default class extends Component {
|
|||||||
|
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<div style={{height: 500, width: 800}}
|
<div style={{height: 410, width: 800}}
|
||||||
className="ag-fresh">
|
className="ag-fresh">
|
||||||
<AgGridReact
|
<AgGridReact
|
||||||
// properties
|
// properties
|
||||||
columnDefs={this.state.columnDefs}
|
columnDefs={this.state.columnDefs}
|
||||||
enableSorting="true"
|
enableSorting="true"
|
||||||
|
rowSelection="single"
|
||||||
|
|
||||||
// events
|
// events
|
||||||
onGridReady={this.onGridReady}
|
onGridReady={this.onGridReady}
|
||||||
onRowClicked={this.onRowClicked}>
|
onSelectionChanged={this.onSelectionChanged}>
|
||||||
</AgGridReact>
|
</AgGridReact>
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ export default class extends Component {
|
|||||||
|
|
||||||
static get defaultProps() {
|
static get defaultProps() {
|
||||||
return {
|
return {
|
||||||
graphHeight: 320,
|
graphHeight: 230,
|
||||||
graphWidth: 400
|
graphWidth: 400
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ export default class extends Component {
|
|||||||
selectedSymbol: null
|
selectedSymbol: null
|
||||||
};
|
};
|
||||||
|
|
||||||
this.onRowClicked = this.onRowClicked.bind(this);
|
this.onSelectionChanged = this.onSelectionChanged.bind(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
componentWillReceiveProps(nextProps) {
|
componentWillReceiveProps(nextProps) {
|
||||||
@@ -28,7 +28,7 @@ export default class extends Component {
|
|||||||
nextState.selectedSymbol !== this.state.selectedSymbol;
|
nextState.selectedSymbol !== this.state.selectedSymbol;
|
||||||
}
|
}
|
||||||
|
|
||||||
onRowClicked(selectedSymbol) {
|
onSelectionChanged(selectedSymbol) {
|
||||||
this.setState({
|
this.setState({
|
||||||
selectedSymbol
|
selectedSymbol
|
||||||
})
|
})
|
||||||
@@ -37,16 +37,16 @@ export default class extends Component {
|
|||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<div style={{width: 1250}}>
|
<div style={{width: 1250}}>
|
||||||
{/*<div>*/}
|
<div>
|
||||||
{/*<div style={{float: "left", marginRight: 25}}>*/}
|
<div style={{float: "left", marginRight: 25}}>
|
||||||
{/*<PriceChangesGrid selectedExchange={this.props.selectedExchange}*/}
|
<PriceChangesGrid selectedExchange={this.props.selectedExchange}
|
||||||
{/*onRowClicked={this.onRowClicked}/>*/}
|
onSelectionChanged={this.onSelectionChanged}/>
|
||||||
{/*</div>*/}
|
</div>
|
||||||
{/*<div style={{float: "left"}}>*/}
|
<div style={{float: "left"}}>
|
||||||
{/*<StockDetailPanel selectedSymbol={this.state.selectedSymbol}*/}
|
<StockDetailPanel selectedSymbol={this.state.selectedSymbol}
|
||||||
{/*exchangeName={this.props.selectedExchange.name}/>*/}
|
exchangeName={this.props.selectedExchange.name}/>
|
||||||
{/*</div>*/}
|
</div>
|
||||||
{/*</div>*/}
|
</div>
|
||||||
<div style={{width: "100%", clear: "both", paddingTop: 25}}>
|
<div style={{width: "100%", clear: "both", paddingTop: 25}}>
|
||||||
<FxQuoteMatrix/>
|
<FxQuoteMatrix/>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -10,6 +10,10 @@
|
|||||||
height: 100%;
|
height: 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.ag-fresh .ag-value-change-value-highlight {
|
||||||
|
background-color: #afbcff;
|
||||||
|
}
|
||||||
|
|
||||||
.align-right {
|
.align-right {
|
||||||
text-align: right
|
text-align: right
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,16 +4,14 @@ import React from "react";
|
|||||||
import {render} from "react-dom";
|
import {render} from "react-dom";
|
||||||
|
|
||||||
import {Provider} from "react-redux";
|
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/ag-grid.css";
|
||||||
import "ag-grid-root/dist/styles/theme-fresh.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', () => {
|
document.addEventListener('DOMContentLoaded', () => {
|
||||||
render(
|
render(
|
||||||
|
|||||||
@@ -1,3 +1,10 @@
|
|||||||
export default (state = {fxRowData: []}, action) => {
|
export default (state = {fxData: []}, action) => {
|
||||||
return state;
|
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;
|
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 = [
|
const NASDAQ_SYMBOLS = [
|
||||||
@@ -353,350 +326,4 @@ const DE_SYMBOLS = [
|
|||||||
"STS.L",
|
"STS.L",
|
||||||
"BKIR.L",
|
"BKIR.L",
|
||||||
"AFMF.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