|
@@ -119,7 +119,7 @@ const HandicapCalc = function (data) {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
const calcExternalHandicap = (data) => {
|
|
const calcExternalHandicap = (data) => {
|
|
|
- const { gold_side_jc: g, odds_side_a: a, odds_side_b: b, odds_side_m: c, jc_index: i, cross_type: t, win_target: w, loss_out_1 } = data;
|
|
|
|
|
|
|
+ const { gold_side_inner: g, odds_side_a: a, odds_side_b: b, odds_side_m: c, inner_index: i, cross_type: t, win_target: w, loss_out_1 } = data;
|
|
|
const l = loss_out_1 ?? 0;
|
|
const l = loss_out_1 ?? 0;
|
|
|
const calc = new HandicapCalc({ i, g, a, b, c, w, l });
|
|
const calc = new HandicapCalc({ i, g, a, b, c, w, l });
|
|
|
const { x, y, z } = calc?.[t]() ?? {};
|
|
const { x, y, z } = calc?.[t]() ?? {};
|
|
@@ -127,33 +127,33 @@ const calcExternalHandicap = (data) => {
|
|
|
gold_side_a: fixFloat(x),
|
|
gold_side_a: fixFloat(x),
|
|
|
gold_side_b: fixFloat(y),
|
|
gold_side_b: fixFloat(y),
|
|
|
gold_side_m: fixFloat(z),
|
|
gold_side_m: fixFloat(z),
|
|
|
- jc_index: i,
|
|
|
|
|
|
|
+ inner_index: i,
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
const calcGoldsWithWinTarget = (data) => {
|
|
const calcGoldsWithWinTarget = (data) => {
|
|
|
- const { gold_side_jc, win_target, sol1, sol2 } = data;
|
|
|
|
|
|
|
+ const { gold_side_inner, win_target, sol1, sol2 } = data;
|
|
|
const {
|
|
const {
|
|
|
gold_side_a: goldA1,
|
|
gold_side_a: goldA1,
|
|
|
gold_side_b: goldB1,
|
|
gold_side_b: goldB1,
|
|
|
gold_side_m: goldM1,
|
|
gold_side_m: goldM1,
|
|
|
- jc_index: jc_index_1
|
|
|
|
|
- } = calcExternalHandicap({ ...sol1, gold_side_jc, win_target });
|
|
|
|
|
|
|
+ inner_index: inner_index_1
|
|
|
|
|
+ } = calcExternalHandicap({ ...sol1, gold_side_inner, win_target });
|
|
|
|
|
|
|
|
- let loss_out_1 = 0, win_jc_1 = 0;
|
|
|
|
|
- switch (jc_index_1) {
|
|
|
|
|
|
|
+ let loss_out_1 = 0, win_inner_1 = 0;
|
|
|
|
|
+ switch (inner_index_1) {
|
|
|
case 0:
|
|
case 0:
|
|
|
loss_out_1 = goldB1 + goldM1;
|
|
loss_out_1 = goldB1 + goldM1;
|
|
|
- win_jc_1 = gold_side_jc * (sol1.odds_side_a + 1);
|
|
|
|
|
|
|
+ win_inner_1 = gold_side_inner * (sol1.odds_side_a + 1);
|
|
|
break;
|
|
break;
|
|
|
case 1:
|
|
case 1:
|
|
|
loss_out_1 = goldA1 + goldM1;
|
|
loss_out_1 = goldA1 + goldM1;
|
|
|
- win_jc_1 = gold_side_jc * (sol1.odds_side_b + 1);
|
|
|
|
|
|
|
+ win_inner_1 = gold_side_inner * (sol1.odds_side_b + 1);
|
|
|
break;
|
|
break;
|
|
|
case 2:
|
|
case 2:
|
|
|
loss_out_1 = goldA1 + goldB1;
|
|
loss_out_1 = goldA1 + goldB1;
|
|
|
- win_jc_1 = gold_side_jc * (sol1.odds_side_m + 1)
|
|
|
|
|
|
|
+ win_inner_1 = gold_side_inner * (sol1.odds_side_m + 1)
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -161,29 +161,29 @@ const calcGoldsWithWinTarget = (data) => {
|
|
|
gold_side_a: goldA2,
|
|
gold_side_a: goldA2,
|
|
|
gold_side_b: goldB2,
|
|
gold_side_b: goldB2,
|
|
|
gold_side_m: goldM2,
|
|
gold_side_m: goldM2,
|
|
|
- jc_index: jc_index_2
|
|
|
|
|
- } = calcExternalHandicap({ ...sol2, gold_side_jc, win_target, loss_out_1 });
|
|
|
|
|
|
|
+ inner_index: inner_index_2
|
|
|
|
|
+ } = calcExternalHandicap({ ...sol2, gold_side_inner, win_target, loss_out_1 });
|
|
|
|
|
|
|
|
- let loss_out_2 = 0, win_jc_2 = 0, jc_base_key;
|
|
|
|
|
- switch (jc_index_2) {
|
|
|
|
|
|
|
+ let loss_out_2 = 0, win_inner_2 = 0, inner_base_key;
|
|
|
|
|
+ switch (inner_index_2) {
|
|
|
case 0:
|
|
case 0:
|
|
|
- jc_base_key = 'goldA2';
|
|
|
|
|
- loss_out_2 = gold_side_jc +goldB2 + goldM2 + loss_out_1;
|
|
|
|
|
- win_jc_2 = win_jc_1 * (sol2.odds_side_a + 1);
|
|
|
|
|
|
|
+ inner_base_key = 'goldA2';
|
|
|
|
|
+ loss_out_2 = gold_side_inner +goldB2 + goldM2 + loss_out_1;
|
|
|
|
|
+ win_inner_2 = win_inner_1 * (sol2.odds_side_a + 1);
|
|
|
break;
|
|
break;
|
|
|
case 1:
|
|
case 1:
|
|
|
- jc_base_key = 'goldB2';
|
|
|
|
|
- loss_out_2 = gold_side_jc + goldA2 + goldM2 + loss_out_1;
|
|
|
|
|
- win_jc_2 = win_jc_1 * (sol2.odds_side_b + 1);
|
|
|
|
|
|
|
+ inner_base_key = 'goldB2';
|
|
|
|
|
+ loss_out_2 = gold_side_inner + goldA2 + goldM2 + loss_out_1;
|
|
|
|
|
+ win_inner_2 = win_inner_1 * (sol2.odds_side_b + 1);
|
|
|
break;
|
|
break;
|
|
|
case 2:
|
|
case 2:
|
|
|
- jc_base_key = 'goldM2';
|
|
|
|
|
- loss_out_2 = gold_side_jc + goldA2 + goldB2 + loss_out_1;
|
|
|
|
|
- win_jc_2 = win_jc_1 * (sol2.odds_side_m + 1);
|
|
|
|
|
|
|
+ inner_base_key = 'goldM2';
|
|
|
|
|
+ loss_out_2 = gold_side_inner + goldA2 + goldB2 + loss_out_1;
|
|
|
|
|
+ win_inner_2 = win_inner_1 * (sol2.odds_side_m + 1);
|
|
|
break;
|
|
break;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- const win_jc = fixFloat(win_jc_2 - loss_out_2);
|
|
|
|
|
|
|
+ const win_inner = fixFloat(win_inner_2 - loss_out_2);
|
|
|
|
|
|
|
|
const result = {
|
|
const result = {
|
|
|
goldA1,
|
|
goldA1,
|
|
@@ -192,37 +192,37 @@ const calcGoldsWithWinTarget = (data) => {
|
|
|
goldA2,
|
|
goldA2,
|
|
|
goldB2,
|
|
goldB2,
|
|
|
goldM2,
|
|
goldM2,
|
|
|
- win_jc,
|
|
|
|
|
- jc_index_1,
|
|
|
|
|
- jc_index_2,
|
|
|
|
|
- jc_base: gold_side_jc,
|
|
|
|
|
|
|
+ win_inner,
|
|
|
|
|
+ inner_index_1,
|
|
|
|
|
+ inner_index_2,
|
|
|
|
|
+ inner_base: gold_side_inner,
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- if (result[jc_base_key]) {
|
|
|
|
|
- result[jc_base_key] = win_jc_1;
|
|
|
|
|
|
|
+ if (result[inner_base_key]) {
|
|
|
|
|
+ result[inner_base_key] = win_inner_1;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
return result;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-const calcTotalProfit = (sol1, sol2, gold_side_jc) => {
|
|
|
|
|
|
|
+const calcTotalProfit = (sol1, sol2, gold_side_inner) => {
|
|
|
|
|
|
|
|
const winTarget1 = sol1.win_average;
|
|
const winTarget1 = sol1.win_average;
|
|
|
const winTarget2 = sol2.win_average;
|
|
const winTarget2 = sol2.win_average;
|
|
|
const winTarget = fixFloat(Math.min(winTarget1, winTarget2), 2);
|
|
const winTarget = fixFloat(Math.min(winTarget1, winTarget2), 2);
|
|
|
|
|
|
|
|
- const win1 = calcGoldsWithWinTarget({ gold_side_jc, win_target: winTarget1, sol1, sol2 })?.win_jc;
|
|
|
|
|
- const win2 = calcGoldsWithWinTarget({ gold_side_jc, win_target: winTarget2, sol1, sol2 })?.win_jc;
|
|
|
|
|
- const winJc = fixFloat(Math.max(win1, win2), 2);
|
|
|
|
|
|
|
+ const win1 = calcGoldsWithWinTarget({ gold_side_inner, win_target: winTarget1, sol1, sol2 })?.win_inner;
|
|
|
|
|
+ const win2 = calcGoldsWithWinTarget({ gold_side_inner, win_target: winTarget2, sol1, sol2 })?.win_inner;
|
|
|
|
|
+ const win_inner = fixFloat(Math.max(win1, win2), 2);
|
|
|
|
|
|
|
|
- const start = Math.max(winTarget, winJc);
|
|
|
|
|
- const end = Math.min(winTarget, winJc);
|
|
|
|
|
|
|
+ const start = Math.max(winTarget, win_inner);
|
|
|
|
|
+ const end = Math.min(winTarget, win_inner);
|
|
|
const result = [];
|
|
const result = [];
|
|
|
|
|
|
|
|
for (let i = start; i > end; i--) {
|
|
for (let i = start; i > end; i--) {
|
|
|
const win_target = i;
|
|
const win_target = i;
|
|
|
- const goldsInfo = calcGoldsWithWinTarget({ gold_side_jc, win_target, sol1, sol2 });
|
|
|
|
|
- const win_diff = Math.abs(fixFloat(win_target - goldsInfo.win_jc));
|
|
|
|
|
|
|
+ const goldsInfo = calcGoldsWithWinTarget({ gold_side_inner, win_target, sol1, sol2 });
|
|
|
|
|
+ const win_diff = Math.abs(fixFloat(win_target - goldsInfo.win_inner));
|
|
|
const lastResult = result.at(-1);
|
|
const lastResult = result.at(-1);
|
|
|
if (!lastResult?.win_diff || win_diff < lastResult.win_diff) {
|
|
if (!lastResult?.win_diff || win_diff < lastResult.win_diff) {
|
|
|
result.push({ win_target: fixFloat(win_target), win_diff, ...goldsInfo });
|
|
result.push({ win_target: fixFloat(win_target), win_diff, ...goldsInfo });
|