From 4c55b0c2867d71e8def5fd96a7ffaf09fa45aff9 Mon Sep 17 00:00:00 2001
From: Aman22sharma <kumaraman.rose@gmail.com>
Date: Fri, 5 Jun 2020 13:10:56 +0530
Subject: [PATCH] Create Patch File

---
 src/DataManipulator.ts | 35 ++++++++++++++++++++++++-----------
 src/Graph.tsx          | 24 ++++++++++++++----------
 2 files changed, 38 insertions(+), 21 deletions(-)

diff --git a/src/DataManipulator.ts b/src/DataManipulator.ts
index f6b15ff..4d479aa 100644
--- a/src/DataManipulator.ts
+++ b/src/DataManipulator.ts
@@ -1,20 +1,33 @@
 import { ServerRespond } from './DataStreamer';
 
 export interface Row {
-  stock: string,
-  top_ask_price: number,
+  price_abc: number,
+  price_def: number,
+  ratio: number,
   timestamp: Date,
+  upper_bound: number,
+  lower_bound: number,
+  trigger_alert: number | undefined,
+  
 }
 
-
 export class DataManipulator {
-  static generateRow(serverResponds: ServerRespond[]): Row[] {
-    return serverResponds.map((el: any) => {
-      return {
-        stock: el.stock,
-        top_ask_price: el.top_ask && el.top_ask.price || 0,
-        timestamp: el.timestamp,
+  static generateRow(serverResponds: ServerRespond[]): Row {
+    const priceABC = (serverResponds[0].top_ask.price + serverResponds[0].top_bid.price)/2;
+    const priceDEF = (serverResponds[1].top_ask.price + serverResponds[1].top_bid.price)/2;
+    const ratio = priceABC / priceDEF;
+    const upper_bound = 1 + 0.01;
+    const lower_bound = 1 - 0.01;
+    return {
+      price_abc: priceABC,
+      price_def: priceDEF,
+      ratio,
+      timestamp: serverResponds[0].timestamp > serverResponds[1].timestamp ?
+                  serverResponds[0].timestamp : serverResponds[1].timestamp,
+      upper_bound: upper_bound,
+      lower_bound: lower_bound,
+      trigger_alert: (ratio > upper_bound || ratio < lower_bound ) ? ratio : undefined,
+
       };
-    })
   }
-}
+}
\ No newline at end of file
diff --git a/src/Graph.tsx b/src/Graph.tsx
index 58fb997..0996f66 100644
--- a/src/Graph.tsx
+++ b/src/Graph.tsx
@@ -23,10 +23,13 @@ class Graph extends Component<IProps, {}> {
     const elem = document.getElementsByTagName('perspective-viewer')[0] as unknown as PerspectiveViewerElement;
 
     const schema = {
-      stock: 'string',
-      top_ask_price: 'float',
-      top_bid_price: 'float',
+      price_abc: 'float',
+      price_def: 'float',
+      ratio: 'float',
       timestamp: 'date',
+      upper_bound: 'float',
+      lower_bound: 'float',
+      trigger_alert: 'float',
     };
 
     if (window.perspective && window.perspective.worker()) {
@@ -36,23 +39,24 @@ class Graph extends Component<IProps, {}> {
       // Load the `table` in the `<perspective-viewer>` DOM reference.
       elem.load(this.table);
       elem.setAttribute('view', 'y_line');
-      elem.setAttribute('column-pivots', '["stock"]');
       elem.setAttribute('row-pivots', '["timestamp"]');
-      elem.setAttribute('columns', '["top_ask_price"]');
+      elem.setAttribute('columns', '["ratio","lower_bound","upper_bound","trigger_alert"]');
       elem.setAttribute('aggregates', JSON.stringify({
-        stock: 'distinctcount',
-        top_ask_price: 'avg',
-        top_bid_price: 'avg',
+        price_abc: 'avg',
+        price_def: 'avg',
         timestamp: 'distinct count',
+        upper_bound: 'avg',
+        lower_bound: 'avg',
+        trigger_alert: 'avg',
       }));
     }
   }
 
   componentDidUpdate() {
     if (this.table) {
-      this.table.update(
+      this.table.update([
         DataManipulator.generateRow(this.props.data),
-      );
+      ]);
     }
   }
 }
-- 
2.22.0.windows.1

