8bobetfair

8bo必发

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         8bobetfair
// @namespace    com.oldtan.8bobetfair
// @version      1.1.6
// @description  8bo必发
// @author       oldtan
// @include      https://8bo.com/football/info-betfair/*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        none
// @require    http://code.jquery.com/jquery-1.11.0.min.js

// ==/UserScript==
// function sleep(time){
//     var timeStamp = new Date().getTime();
//     var endTime = timeStamp + time;
//     while(true){
//         if (new Date().getTime() > endTime){
//             return;
//         }
//     }
// }

$(document).ready(function() {
   
    // 选择表格
    var $table = $('.z8table.z8compact.z9betfair1');

    // 在标题行的买家和卖家挂牌ul中添加"比例"列名
    var $thead = $table.find('.z8thead');
    // $thead.find('.c0c.c0bor2l').eq(1).find('ul').append('<li>买卖市场比</li>');
    $thead.find('.c0c.c0bor2l').eq(2).find('ul').append('<li>买卖市场比</li>');

//     // 计算买家和卖家的总挂牌量
    var totalBuyerVolume = 0;
    var totalSellerVolume = 0;
    $table.find('.z8tbody .z8tr').each(function() {
        // 获取买家挂牌的挂牌量并累加
        var buyerVolume = parseInt($(this).find('.c0c.c0bor2l').eq(1).find('li').eq(1).text().replace(/,/g, ''), 10);
        totalBuyerVolume += buyerVolume;

        // 获取卖家挂牌的挂牌量并累加
        var sellerVolume = parseInt($(this).find('.c0c.c0bor2l').eq(2).find('li').eq(1).text().replace(/,/g, ''), 10);
        totalSellerVolume += sellerVolume;
    });

    // 计算每个赛果的买家和卖家挂牌量占比,并添加到表格中
    $table.find('.z8tbody .z8tr').each(function() {
        // 获取当前行
        var $row = $(this);

        // 获取买家挂牌的挂牌量
        var buyerVolume = parseInt($row.find('.c0c.c0bor2l').eq(1).find('li').eq(1).text().replace(/,/g, ''), 10);

        // 计算买家占比
        // var buyerPercentage = (buyerVolume / totalBuyerVolume * 100).toFixed(2) + '%';

        // 创建一个新的li元素用于买家占比
        // var $buyerPercentageLi = $('<li>' + buyerPercentage + '</li>');

        // 在买家挂牌ul中添加买家占比
        // var $buyerUl = $row.find('.c0c.c0bor2l').eq(1).find('ul');
        // $buyerUl.append($buyerPercentageLi);

        // 获取卖家挂牌的挂牌量
        var sellerVolume = parseInt($row.find('.c0c.c0bor2l').eq(2).find('li').eq(1).text().replace(/,/g, ''), 10);

        // 计算卖家占比
        var sellerPercentage = ((sellerVolume+buyerVolume) / (totalSellerVolume+totalBuyerVolume) * 100).toFixed(2) + '%';

        // 创建一个新的li元素用于卖家占比
        var $sellerPercentageLi = $('<li>' + sellerPercentage + '</li>');

        // 在卖家挂牌ul中添加卖家占比
        var $sellerUl = $row.find('.c0c.c0bor2l').eq(2).find('ul');
        $sellerUl.append($sellerPercentageLi);
    });

    // 计算每个赛果的买卖挂牌量之间的差异指数(倍数)(适合低水:看小排大,高水反之)
    $table.find('.z8tbody .z8tr').each(function() {
        // 获取当前行
        var $row = $(this);

        // 获取买家挂牌量
        var buyerVolumeText = $row.find('.c0c.c0bor2l').eq(1).find('li').eq(1).text();
        var buyerVolume = parseFloat(buyerVolumeText.replace(/,/g, ''));

        // 获取卖家挂牌量
        var sellerVolumeText = $row.find('.c0c.c0bor2l').eq(2).find('li').eq(1).text();
        var sellerVolume = parseFloat(sellerVolumeText.replace(/,/g, ''));

        // 计算差异指数(倍数)
        var difference倍数;
        if (buyerVolume === 0 || sellerVolume === 0) {
            difference倍数 = (buyerVolume === 0) ? '无穷大' : '无穷大';
        } else {
            difference倍数 = Math.max(buyerVolume / sellerVolume, sellerVolume / buyerVolume);
        }

        // 创建一个新的li元素用于显示差异指数(倍数)
        var $differenceLi = $('<li>' + difference倍数.toFixed(2) + ' 倍</li>');

        // 在当前行的第四个ul中添加差异指数(倍数)
        var $fourthUl = $row.find('.c0c.c0bor2l').eq(2).find('ul'); // 选择当前行的第四个ul
        $differenceLi.appendTo($fourthUl); // 使用appendTo方法添加元素
    });


    // 计算挂牌量差异的绝对值相对于两者挂牌量总和的比例(高水:看大排小,低水反之,但是目前感觉适合高水看大,且越看平越不平)
    $table.find('.z8tbody .z8tr').each(function() {
        // 获取当前行
        var $row = $(this);

        // 获取买家挂牌量
        var buyerVolumeText = $row.find('.c0c.c0bor2l').eq(1).find('li').eq(1).text();
        var buyerVolume = parseFloat(buyerVolumeText.replace(/,/g, ''));

        // 获取卖家挂牌量
        var sellerVolumeText = $row.find('.c0c.c0bor2l').eq(2).find('li').eq(1).text();
        var sellerVolume = parseFloat(sellerVolumeText.replace(/,/g, ''));

        // 计算总挂牌量和差异指数
        var totalVolume = buyerVolume + sellerVolume;
        var difference = Math.abs(buyerVolume - sellerVolume);
        var predictionIndex = (difference / totalVolume) * 100;

        // 创建一个新的li元素用于显示预测指数
        var $predictionLi = $('<li>' + predictionIndex.toFixed(2) + '%</li>');
        // var $predictionLi = $('<li>' + calculateVariance(buyerVolume,sellerVolume) + '</li>');

        // 在当前行的第三个ul中添加预测指数
        var $thirdUl = $row.find('.c0c.c0bor2l').eq(2).find('ul'); // 选择当前行的第三个ul
        $predictionLi.appendTo($thirdUl); // 使用appendTo方法添加元素
    });



    // 基于挂牌量差异和概率的加权预测模型。这种方法会考虑买家挂牌量、卖家挂牌量以及99家平均概率,来给出一个综合的预测指标。(感觉综合能力挺强,通吃高低水)
    // 如果预测指数为正数且较大,预测买家挂牌量较高的结果更有可能出现。
    // 如果预测指数为负数且较大,预测卖家挂牌量较高的结果更有可能出现。
    // 如果预测指数接近零,表示市场对结果的看法比较均衡。
    $table.find('.z8tbody .z8tr').each(function() {
        // 获取当前行
        var $row = $(this);

        // 获取买家挂牌量
        var buyerVolumeText = $row.find('.c0c.c0bor2l').eq(1).find('li').eq(1).text();
        var buyerVolume = parseFloat(buyerVolumeText.replace(/,/g, ''));

        // 获取卖家挂牌量
        var sellerVolumeText = $row.find('.c0c.c0bor2l').eq(2).find('li').eq(1).text();
        var sellerVolume = parseFloat(sellerVolumeText.replace(/,/g, ''));

        // 获取99家平均概率
        var probabilityText = $row.find('.c0c.c0bor2l').eq(0).find('li').eq(1).text();
        var probability = parseFloat(probabilityText);

        // 计算预测指数
        var difference = buyerVolume - sellerVolume;
        var predictionIndex = (difference / probability) * 100;

        // 创建一个新的li元素用于显示预测指数
        var $predictionLi = $('<li>' + predictionIndex.toFixed(2) + '</li>');

        // 在当前行的第三个ul中添加预测指数
        var $thirdUl = $row.find('.c0c.c0bor2l').eq(2).find('ul'); // 选择当前行的第三个ul
        $predictionLi.appendTo($thirdUl); // 使用appendTo方法添加元素
    });



    // 基于挂牌量和概率的调和平均数来预测比赛结果的方法。这种方法将考虑买家挂牌量、卖家挂牌量以及99家平均概率,并通过调和平均数给出一个综合的预测指标
    // 预测指数 > 100:预测该结果更有可能出现。
    // 预测指数 < 100:预测该结果较不可能出现。
    // 预测指数 ≈ 100:市场对结果的看法比较均衡。
    $table.find('.z8tbody .z8tr').each(function() {
        // 获取当前行
        var $row = $(this);

        // 获取买家挂牌量
        var buyerVolumeText = $row.find('.c0c.c0bor2l').eq(1).find('li').eq(1).text();
        var buyerVolume = parseFloat(buyerVolumeText.replace(/,/g, ''));

        // 获取卖家挂牌量
        var sellerVolumeText = $row.find('.c0c.c0bor2l').eq(2).find('li').eq(1).text();
        var sellerVolume = parseFloat(sellerVolumeText.replace(/,/g, ''));

        // 获取99家平均概率
        var probabilityText = $row.find('.c0c.c0bor2l').eq(0).find('li').eq(1).text();
        var probability = parseFloat(probabilityText);

        // 计算预测指数
        var predictionIndex = ((buyerVolume + sellerVolume) / probability) * 100;

        // 创建一个新的li元素用于显示预测指数
        var $predictionLi = $('<li>' + predictionIndex.toFixed(2) + '</li>');

        // 在当前行的第三个ul中添加预测指数
        var $thirdUl = $row.find('.c0c.c0bor2l').eq(2).find('ul'); // 选择当前行的第三个ul
        $predictionLi.appendTo($thirdUl); // 使用appendTo方法添加元素
    });


    // 选择所有.c0c下的li元素,并设置宽度为33%
    $('.z9betfair1 .c0c li').css('width', '33%');
    // 设置每个ul中带有.c0c类的li元素的第一个宽度为10%,第二个为15%
    $table.find('ul').each(function() {
        $(this).find('li.c0c').first().css('width', '20%');
        $(this).find('li.c0c').eq(1).css('width', '20%');
        $(this).find('li.c0c').eq(2).css('width', '30%');
        $(this).find('li.c0c').eq(3).css('width', '30%');
        // $(this).find('li.c0c').eq(3).css('width', '20%');
    });

    // 假设的计算公式:预测值 = (买家挂牌量 - 卖家挂牌量) / (买家挂牌价位 + 卖家挂牌价位)(感觉看大)
//     $('.z9betfair5 .z8tr').each(function() {
//         var buyerPrice = parseFloat($(this).find('.c0c.c0bor2l:eq(0) ul li:eq(0)').text());
//         var buyerVolume = parseInt($(this).find('.c0c.c0bor2l:eq(0) ul li:eq(1)').text().replace(/,/g, ''));
//         var sellerPrice = parseFloat($(this).find('.c0c.c0bor2l:eq(1) ul li:eq(0)').text());
//         var sellerVolume = parseInt($(this).find('.c0c.c0bor2l:eq(1) ul li:eq(1)').text().replace(/,/g, ''));

//         var prediction = (buyerVolume - sellerVolume) / (buyerPrice + sellerPrice);

//         // 将预测值添加到每行的末尾
//         $(this).find('.c0c.c0bor2l:last ul').append('<li>' + prediction.toFixed(2) + '</li>');
//     });

    $('.z9betfair5').find('.c0c.c0bor2l').eq(1).find('ul').append('<li>买卖市场比</li>');
     // 计算买家和卖家的总挂牌量
    var totalBuyerVolume5 = 0;
    var totalSellerVolume5 = 0;
    $('.z9betfair5 .z8tr').each(function() {
        // 获取买家挂牌的挂牌量并累加
        var buyerVolume = parseInt($(this).find('.c0c.c0bor2l').eq(0).find('li').eq(1).text().replace(/,/g, ''), 10);
        totalBuyerVolume5 += buyerVolume;

        // 获取卖家挂牌的挂牌量并累加
        var sellerVolume = parseInt($(this).find('.c0c.c0bor2l').eq(1).find('li').eq(1).text().replace(/,/g, ''), 10);
        totalSellerVolume5 += sellerVolume;
    });

    // 计算每个赛果的买家和卖家挂牌量占比,并添加到表格中
    $('.z9betfair5 .z8tr').each(function() {
        // 获取当前行
        var $row = $(this);

        // 获取买家挂牌的挂牌量
        var buyerVolume = parseInt($row.find('.c0c.c0bor2l').eq(0).find('li').eq(1).text().replace(/,/g, ''), 10);

        // 获取卖家挂牌的挂牌量
        var sellerVolume = parseInt($row.find('.c0c.c0bor2l').eq(1).find('li').eq(1).text().replace(/,/g, ''), 10);

        // 计算卖家占比
        var sellerPercentage = ((sellerVolume+buyerVolume) / (totalSellerVolume5+totalBuyerVolume5) * 100).toFixed(2) + '%';

        // 创建一个新的li元素用于卖家占比
        var $sellerPercentageLi = $('<li>' + sellerPercentage + '</li>');

        // 在卖家挂牌ul中添加卖家占比
        var $sellerUl = $row.find('.c0c.c0bor2l').eq(1).find('ul');
        $sellerUl.append($sellerPercentageLi);
    });

    // 新的计算公式:预测值 = ((买家挂牌量 * 买家挂牌价位) + (卖家挂牌量 * 卖家挂牌价位)) / (买家挂牌量 + 卖家挂牌量)(感觉看小)
//     $('.z9betfair5 .z8tr').each(function() {
//         var buyerPrice = parseFloat($(this).find('.c0c.c0bor2l:eq(0) ul li:eq(0)').text());
//         var buyerVolume = parseInt($(this).find('.c0c.c0bor2l:eq(0) ul li:eq(1)').text().replace(/,/g, ''));
//         var sellerPrice = parseFloat($(this).find('.c0c.c0bor2l:eq(1) ul li:eq(0)').text());
//         var sellerVolume = parseInt($(this).find('.c0c.c0bor2l:eq(1) ul li:eq(1)').text().replace(/,/g, ''));

//         var prediction = (buyerVolume * buyerPrice + sellerVolume * sellerPrice) / (buyerVolume + sellerVolume);

//         // 检查最后一个.c0c.c0bor2l元素内是否有ul元素
//         var $lastUl = $(this).find('.c0c.c0bor2l:last ul');
//         if ($lastUl.length === 0) {
//             // 如果没有,创建一个新的ul元素并添加到.c0c.c0bor2l元素中
//             $lastUl = $('<ul></ul>').appendTo($(this).find('.c0c.c0bor2l:last ul'));
//         }

//         // 将预测值添加到ul中
//         $lastUl.append('<li>' + prediction.toFixed(2) + '</li>');
//     });

    //---------------------------------------------交易量----------------------------------------------------------------------------------



    // 获取.z9betfair6下的.z8content中的所有ul元素
//     var $contentUl = $('.z9betfair3 .z8content ul.z8tr');
//     // 遍历每个ul元素
//     $contentUl.each(function() {
//         // 提取价位和交易比例
//         var priceText = $(this).find('li.c0c.c0bor2l ul li').eq(0).text(); // 假设价位在第一个li
//         var volumePercentText = $(this).find('li.c0c.c0bor2l ul li').eq(1).text(); // 假设交易比例在第三个li
//         var price = parseFloat(priceText);
//         var volumePercent = parseFloat(volumePercentText.replace(/,/g, '')) ;// 100; // 将百分比转换为小数

//         // 计算方差
//         var variance = calculateVariance(price, volumePercent);

//         // 创建新的li元素
//         var $newLi = $('<li class="c0c c0bor2l"><ul><li>' + variance.toFixed(2) + '</li></ul></li>');

//         // 将新的li元素添加到当前ul元素的末尾
//         $(this).append($newLi);
//     });
//     $('.z9betfair3 .c0c:nth-child(1)').css('width', '10%');
//     $('.z9betfair3 .c0c:nth-child(2)').css('width', '40%');
//     $('.z9betfair3 .c0c:nth-child(3)').css('width', '30%');
//     $('.z9betfair3 .c0c:nth-child(4)').css('width', '20%');

    //---------------------------------------------大小球----------------------------------------------------------------------------------



    // 获取.z9betfair6下的.z8content中的所有ul元素
    var $contentUl = $('.z9betfair6 .z8content ul.z8tr');
    // 遍历每个ul元素
    $contentUl.each(function() {
        // 提取价位和交易比例
        var priceText = $(this).find('li.c0c.c0bor2l ul li').eq(0).text(); // 假设价位在第一个li
        var volumePercentText = $(this).find('li.c0c.c0bor2l ul li').eq(1).text(); // 假设交易比例在第三个li
        var price = parseFloat(priceText);
        var volumePercent = parseFloat(volumePercentText.replace(/,/g, '')) ;// 100; // 将百分比转换为小数

        // 计算方差
        var variance = calculateVariance(price, volumePercent);

        // 创建新的li元素
        var $newLi = $('<li class="c0c c0bor2l"><ul><li>' + variance.toFixed(2) + '</li></ul></li>');

        // 将新的li元素添加到当前ul元素的末尾
        $(this).append($newLi);
    });

    // 方差计算函数
    function calculateVariance(price, volumePercent) {
        console.log(price, volumePercent);
        var mean = (price + volumePercent) / 2;
        var variance = (price - mean) * (price - mean) + (volumePercent - mean) * (volumePercent - mean);
        // var variance = Math.pow(price - mean, 2) + Math.pow(volumePercent - mean, 2);
        // variance /= 2; // 因为我们只有两个数据点
        return variance / 2;
    }

    // 设置.z9betfair6下所有.c0c元素的宽度为30%
    $('.z9betfair6 .c0c.c0bor2l:nth-child(2)').css('width', '40%');
    $('.z9betfair6 .c0c.c0bor2l:nth-child(3)').css('width', '30%');
    $('.z9betfair6 .c0c.c0bor2l:nth-child(4)').css('width', '20%');



});



function Toast(msg,duration){
      duration=isNaN(duration)?3000:duration;
      var m = document.createElement('div');
      m.innerHTML = msg;
      m.style.cssText="max-width:60%;min-width: 150px;padding:0 14px;height: 60px;color: rgb(255, 255, 255);line-height: 60px;text-align: center;border-radius: 4px;position: fixed;top: 40%;left: 50%;transform: translate(-50%, -50%);z-index: 999999;background: rgba(0, 0, 0,.7);font-size: 16px;";
      document.body.appendChild(m);
      setTimeout(function() {
        var d = 0.5;
        m.style.webkitTransition = '-webkit-transform ' + d + 's ease-in, opacity ' + d + 's ease-in';
        m.style.opacity = '0';
        setTimeout(function() { document.body.removeChild(m) }, d * 1000);
      }, duration);
    }


function Toast2(msg,duration){
      duration=isNaN(duration)?3000:duration;
      var m = document.createElement('div');
      m.innerHTML = msg;
      m.style.cssText="max-width:60%;min-width: 150px;padding:0 14px;height: 60px;color: rgb(255, 255, 255);line-height: 60px;text-align: center;border-radius: 4px;position: fixed;top: 50%;left: 50%;transform: translate(-50%, -50%);z-index: 999999;background: rgba(0, 0, 0,.7);font-size: 16px;";
      document.body.appendChild(m);
      setTimeout(function() {
        var d = 0.5;
        m.style.webkitTransition = '-webkit-transform ' + d + 's ease-in, opacity ' + d + 's ease-in';
        m.style.opacity = '0';
        setTimeout(function() { document.body.removeChild(m) }, d * 1000);
      }, duration);
    }