// ==UserScript==
// @name 测算一类基金的平均增长幅度
// @namespace http://tampermonkey.net/
// @version 0.4
// @description try to take over the world!
// @require https://cdn.staticfile.org/jquery/3.5.0/jquery.min.js
// @author You
// @match http://fund.eastmoney.com/*
// @grant GM_xmlhttpRequest
// @connect *
// @downloadURL https://update.greasyfork.icu/scripts/421432/%E6%B5%8B%E7%AE%97%E4%B8%80%E7%B1%BB%E5%9F%BA%E9%87%91%E7%9A%84%E5%B9%B3%E5%9D%87%E5%A2%9E%E9%95%BF%E5%B9%85%E5%BA%A6.user.js
// @updateURL https://update.greasyfork.icu/scripts/421432/%E6%B5%8B%E7%AE%97%E4%B8%80%E7%B1%BB%E5%9F%BA%E9%87%91%E7%9A%84%E5%B9%B3%E5%9D%87%E5%A2%9E%E9%95%BF%E5%B9%85%E5%BA%A6.meta.js
// ==/UserScript==
(function() {
'use strict';
var $ = jQuery;
$('head').append(``)
var dom = $(`
`);
var ifr = $(``);
ifr.css({ display: 'none' });
$('body').append(dom);
$('body').append(ifr);
var inp = dom.find('[tar="search-input"]');
var content = dom.find('[tar="content"]');
var result = dom.find('[tar="result"]');
let closePanel = true;
let toggle = dom.find('[tar="toggle"]');
toggle.on('click',function () {
closePanel = !closePanel;
if (closePanel) {
dom.css({left: '-450px'});
toggle.text("开");
} else {
dom.css({left: '0'});
toggle.text("关");
}
});
content.html('');
var currentKey = "";
dom.find('[tar="search-btn"]').on('click',function () {
let html = "";
initSearchPage.JsLoader(`http://fundsuggest.eastmoney.com/FundSearch/api/FundSearchPageAPI.ashx`,`m=1&key=${inp.val()}&pageindex=0&pagesize=85&_=1612791079815`,res => {
res.Datas.forEach(ds => {
html += ``;
});
result.html(`未计算,共有${res.Datas.length}个搜索结果`);
content.html(html);
});
});
dom.find('[tar="calc-btn"]').on("click",function () {
let codes = [];
content.find('input[type="checkbox"]').each((ind,ele) => {
if (ele.checked) {
codes.push(ele.value);
}
});
result.html(`计算中,请稍等,共选中${codes.length}个进行计算
当前进度 0/${codes.length}`);
getAvgGZ(codes,obj => {
result.html(`平均收益为${obj.avg.toFixed(3)},有效基金数${obj.total}
最高收益为${obj.max.toFixed(3)},最低收益为${obj.min.toFixed(3)}`);
},index => {
result.html(`计算中,请稍等,共选中${codes.length}个进行计算
当前进度 ${index}/${codes.length}`);
});
});
function oxFetch(url) {
return new Promise(s => {
GM_xmlhttpRequest({
method: "get",
url,
onload: function(res){
s(res.responseText);
// code
}
});
});
}
function getAvgGZ(codes,callback,step) {
var total = 0;
var index = -1;
let max = -100;
let min = 100;
var GZ = 0;
function getGZ(code,cb) {
if (code) {
oxFetch(`http://fundgz.1234567.com.cn/js/${code}.js?rt=${new Date().getTime()}`)
.then(ret => {
let codeDom = $(`[code="${code}"]`);
if (ret.startsWith('jsonpgz({"fundcode":')) {
total++;
let cval = + JSON.parse(ret.substring(8,ret.length - 2)).gszzl;
max = max > cval ? max : cval;
min = min > cval ? cval : min;
GZ += cval;
codeDom.text(cval.toFixed(2));
if (cval >= 0) {
codeDom.css({color: 'red'});
} else {
codeDom.css({color: 'green'});
}
} else {
dom.find(`input[value="${code}"]`)[0].checked = false;
codeDom.text("无法获取");
codeDom.css({color: 'gray'});
}
step(index);
cb();
});
} else {
cb();
}
}
var cb = function() {
index++;
if (codes.length > index) {
getGZ(codes[index],cb);
} else {
callback({
total,
GZ,max,min,
avg: GZ / total
});
}
}
cb();
}
// Your code here...
})();