Greasy Fork is available in English.

8bobetfair

8bo必发

// ==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);
    }