flyzto пре 1 месец
родитељ
комит
e785cb1efd
1 измењених фајлова са 109 додато и 3 уклоњено
  1. 109 3
      polymarket/libs/parseMarkets.js

+ 109 - 3
polymarket/libs/parseMarkets.js

@@ -81,9 +81,10 @@ const parseOutcomes = (outcomes, clobTokenIds, bestBid=0, bestAsk=0) => {
 }
 
 /**
- * 解析盘口数据
- * @param {*} markets
- * @returns {Object}
+ * 解析让球方向
+ * 让球方向为正数时,返回'a',否则返回''
+ * @param {*} ratio
+ * @returns {string}
  */
 const ratioAccept = (ratio) => {
   if (ratio > 0) {
@@ -91,12 +92,26 @@ const ratioAccept = (ratio) => {
   }
   return '';
 }
+
+/**
+ * 解析盘口比率
+ * 比率取绝对值,并去掉小数点后的数字
+ * @param {*} ratio
+ * @returns {string}
+ */
 const ratioString = (ratio) => {
   ratio = Math.abs(ratio);
   ratio = ratio.toString();
   ratio = ratio.replace(/\./, '');
   return ratio;
 }
+
+/**
+ * 解析盘口数据
+ * 使用卖单最优价格
+ * @param {*} markets
+ * @returns {Object}
+ */
 export const parseOdds = (markets) => {
   const odds = {};
   Object.keys(markets).forEach(key => {
@@ -171,6 +186,97 @@ export const parseOdds = (markets) => {
   return odds;
 }
 
+/**
+ * 解析盘口数据
+ * 当卖单最低价格与买单最高价格差值超过最小变动价位时
+ * 创建新的买单价格,即买单最高价格+最小变动价位
+ * 否则,使用买单最高价格
+ * @param {*} markets
+ * @returns {Object}
+ */
+export const parseOddsBid = (markets) => {
+  const odds = {};
+  Object.keys(markets).forEach(key => {
+    const marketData = markets[key];
+    if (key === 'moneyline') {
+      Object.keys(marketData).forEach(side => {
+        const askYes = marketData[side].outcomes['Yes']['best_ask'];
+        const bidYes = marketData[side].outcomes['Yes']['best_bid'];
+        const tokenYes = marketData[side].outcomes['Yes']['id'];
+        const askNo = marketData[side].outcomes['No']['best_ask'];
+        const bidNo = marketData[side].outcomes['No']['best_bid'];
+        const tokenNo = marketData[side].outcomes['No']['id'];
+        const slug = marketData[side].market.slug;
+        const tick_size = marketData[side].market.orderPriceMinTickSize;
+        if (askYes <= 0.1 || askNo <= 0.1) {
+          return;
+        }
+        const iorYes = fixFloat(1 / askYes);
+        const iorNo = fixFloat(1 / askNo);
+        let iorKeyYes = '';
+        let iorKeyNo = '';
+        switch (side) {
+          case 'Home':
+            iorKeyYes = 'ior_mh';
+            iorKeyNo = 'ior_moh';
+            break;
+          case 'Draw':
+            iorKeyYes = 'ior_mn';
+            iorKeyNo = 'ior_mon';
+            break;
+          case 'Away':
+            iorKeyYes = 'ior_mc';
+            iorKeyNo = 'ior_moc';
+            break;
+        }
+        odds[iorKeyYes] = { v: iorYes, ask: askYes, bid: bidYes, tick_size, token: tokenYes, slug };
+        odds[iorKeyNo] = { v: iorNo, ask: askNo, bid: bidNo, tick_size, token: tokenNo, slug };
+      });
+    }
+    else if (key === 'spreads') {
+      Object.keys(marketData).forEach(handicap => {
+        const ratio = +handicap;
+        const askHome = marketData[handicap].outcomes['Home']['best_ask'];
+        const bidHome = marketData[handicap].outcomes['Home']['best_bid'];
+        const tokenHome = marketData[handicap].outcomes['Home']['id'];
+        const askAway = marketData[handicap].outcomes['Away']['best_ask'];
+        const bidAway = marketData[handicap].outcomes['Away']['best_bid'];
+        const tokenAway = marketData[handicap].outcomes['Away']['id'];
+        const slug = marketData[handicap].market.slug;
+        const tick_size = marketData[handicap].market.orderPriceMinTickSize;
+        if (askHome <= 0.1 || askAway <= 0.1) {
+          return;
+        }
+        const iorHome = fixFloat(1 / askHome);
+        const iorAway = fixFloat(1 / askAway);
+        odds[`ior_r${ratioAccept(ratio)}h_${ratioString(ratio)}`] = { v: iorHome, ask: askHome, bid: bidHome, tick_size, token: tokenHome, slug };
+        odds[`ior_r${ratioAccept(-ratio)}c_${ratioString(ratio)}`] = { v: iorAway, ask: askAway, bid: bidAway, tick_size, token: tokenAway, slug };
+      });
+    }
+    else if (key === 'totals') {
+      Object.keys(marketData).forEach(handicap => {
+        const ratio = +handicap;
+        const askOver = marketData[handicap].outcomes['Over']['best_ask'];
+        const bidOver = marketData[handicap].outcomes['Over']['best_bid'];
+        const tokenOver = marketData[handicap].outcomes['Over']['id'];
+        const askUnder = marketData[handicap].outcomes['Under']['best_ask'];
+        const bidUnder = marketData[handicap].outcomes['Under']['best_bid'];
+        const tokenUnder = marketData[handicap].outcomes['Under']['id'];
+        const slug = marketData[handicap].market.slug;
+        const tick_size = marketData[handicap].market.orderPriceMinTickSize;
+        if (askOver <= 0.1 || askUnder <= 0.1) {
+          return;
+        }
+        const iorOver = fixFloat(1 / askOver);
+        const iorUnder = fixFloat(1 / askUnder);
+        odds[`ior_ouc_${ratioString(ratio)}`] = { v: iorOver, ask: askOver, bid: bidOver, tick_size, token: tokenOver, slug };
+        odds[`ior_ouh_${ratioString(ratio)}`] = { v: iorUnder, ask: askUnder, bid: bidUnder, tick_size, token: tokenUnder, slug };
+      });
+    }
+  });
+  return odds;
+}
+
 /**
  * 解析胜平负盘口
  * @param {*} groupItemThreshold