feat: 全面代码更新 - ECharts 5.4.2 重构、新增量化分析模块、前端库升级
- 升级 ECharts 到 5.4.2,重构 lib/ 目录结构 - 新增 DataTables 2.x 和 FixedColumns 插件 - 新增 quant/ 宏观研究报告模块 - 重构图表页面:stock_trend、hkholdbycode 等采用 JS fetch API.doorcome.cn 模式 - 新增 CLAUDE.md 补充页面文档和新数据流说明 - 更新 inc/config.php TuShare API 配置 - 更新新闻联播分析模块 news/ 和相关研究报告 research/ - 新增 api_document/ 参考文档 - 清理 .gitignore,排除 uploads/xls/.mcp.json/ source maps 等非代码文件 - 所有 PHP 文件通过 php -l 语法检查 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
+65
-65
@@ -1,66 +1,66 @@
|
||||
<?php
|
||||
#查询个股价格对应机构持仓的数量
|
||||
include_once "../inc/getBasic.inc.php";
|
||||
include_once "../inc/getData.inc.php";
|
||||
|
||||
$ts_code=ts_code_conv($_REQUEST['ts_code']);
|
||||
$ts_name = tscodeToName($ts_code);
|
||||
include_once "../html/headChart.php"; //required after $ts_code and $ts_name
|
||||
|
||||
$day_st=($_REQUEST['s']=='')?'2012-01-01':$_REQUEST['s'];
|
||||
$day_end=($_REQUEST['e']=='')?date('Y-m-d'):$_REQUEST['e'];
|
||||
#item: f9:持股数 f10:持股额 f11:占总股本比例 f12:占流通股比例
|
||||
$item = ($_REQUEST['item']=='')?'f9':$_REQUEST['item'];
|
||||
|
||||
switch($item){
|
||||
case 'f9':
|
||||
case 'F9':
|
||||
$unit = ' - 万股';
|
||||
$item_name = "持股数";
|
||||
break;
|
||||
case 'f10':
|
||||
case 'F10':
|
||||
$unit = ' - 万元';
|
||||
$item_name = "持股金额";
|
||||
break;
|
||||
case 'f11':
|
||||
case 'F11':
|
||||
$unit = ' - %';
|
||||
$item_name = "总股本股比例";
|
||||
break;
|
||||
case 'f12':
|
||||
case 'F12':
|
||||
$unit = ' - %';
|
||||
$item_name = "流通股比例";
|
||||
break;
|
||||
default:
|
||||
$unit = '';
|
||||
}
|
||||
$data = getStockHist($ts_code,$day_st,$day_end);
|
||||
$lx = ''; //define null var avoid error
|
||||
$data2 = getIhDataByStock($ts_code,$item,$lx,$day_st,$day_end);
|
||||
|
||||
#var_dump($data2['data']);
|
||||
$subtext_ext = "Max: ".$data2['data_max'];
|
||||
$subtext_ext .= ", Min: ".$data2['data_min'];
|
||||
$subtext_ext .= ", Average: ".$data2['data_avg'];
|
||||
$subtext_ext .= ", Recent: ".$data2['data_last'];
|
||||
|
||||
$legend=array('不复权股价','深证成指',$item_name);
|
||||
#$value=json_encode($data['data']);
|
||||
?>
|
||||
|
||||
<script type="text/javascript">
|
||||
window.chartConfig = {
|
||||
data: <?php echo json_encode($data['data']); ?>,
|
||||
data2: <?php echo json_encode($data2['data']); ?>,
|
||||
legend: <?php echo json_encode($legend);?>,
|
||||
unit: '<?php echo $unit; ?>',
|
||||
title: '<?php echo $ts_name.'('.$ts_code.')'; ?>',
|
||||
subtitle: '<?php echo $subtext_ext; ?>'
|
||||
};
|
||||
|
||||
</script>
|
||||
<script type="text/javascript" src="../js/chartSix.js?ver=3.141"></script>
|
||||
</body>
|
||||
<?php
|
||||
#查询个股价格对应机构持仓的数量
|
||||
include_once "../inc/getBasic.inc.php";
|
||||
include_once "../inc/getData.inc.php";
|
||||
|
||||
$ts_code=ts_code_conv($_REQUEST['ts_code']);
|
||||
$ts_name = tscodeToName($ts_code);
|
||||
include_once "../html/headChart.php"; //required after $ts_code and $ts_name
|
||||
|
||||
$day_st=($_REQUEST['s']=='')?'2012-01-01':$_REQUEST['s'];
|
||||
$day_end=($_REQUEST['e']=='')?date('Y-m-d'):$_REQUEST['e'];
|
||||
#item: f9:持股数 f10:持股额 f11:占总股本比例 f12:占流通股比例
|
||||
$item = ($_REQUEST['item']=='')?'f9':$_REQUEST['item'];
|
||||
|
||||
switch($item){
|
||||
case 'f9':
|
||||
case 'F9':
|
||||
$unit = ' - 万股';
|
||||
$item_name = "持股数";
|
||||
break;
|
||||
case 'f10':
|
||||
case 'F10':
|
||||
$unit = ' - 万元';
|
||||
$item_name = "持股金额";
|
||||
break;
|
||||
case 'f11':
|
||||
case 'F11':
|
||||
$unit = ' - %';
|
||||
$item_name = "总股本股比例";
|
||||
break;
|
||||
case 'f12':
|
||||
case 'F12':
|
||||
$unit = ' - %';
|
||||
$item_name = "流通股比例";
|
||||
break;
|
||||
default:
|
||||
$unit = '';
|
||||
}
|
||||
$data = getStockHist($ts_code,$day_st,$day_end);
|
||||
$lx = ''; //define null var avoid error
|
||||
$data2 = getIhDataByStock($ts_code,$item,$lx,$day_st,$day_end);
|
||||
|
||||
#var_dump($data2['data']);
|
||||
$subtext_ext = "Max: ".$data2['data_max'];
|
||||
$subtext_ext .= ", Min: ".$data2['data_min'];
|
||||
$subtext_ext .= ", Average: ".$data2['data_avg'];
|
||||
$subtext_ext .= ", Recent: ".$data2['data_last'];
|
||||
|
||||
$legend=array('不复权股价','深证成指',$item_name);
|
||||
#$value=json_encode($data['data']);
|
||||
?>
|
||||
|
||||
<script type="text/javascript">
|
||||
window.chartConfig = {
|
||||
data: <?php echo json_encode($data['data']); ?>,
|
||||
data2: <?php echo json_encode($data2['data']); ?>,
|
||||
legend: <?php echo json_encode($legend);?>,
|
||||
unit: '<?php echo $unit; ?>',
|
||||
title: '<?php echo $ts_name.'('.$ts_code.')'; ?>',
|
||||
subtitle: '<?php echo $subtext_ext; ?>'
|
||||
};
|
||||
|
||||
</script>
|
||||
<script type="text/javascript" src="../js/chartSix.js?ver=3.141"></script>
|
||||
</body>
|
||||
</html>
|
||||
+57
-57
@@ -1,58 +1,58 @@
|
||||
<?php
|
||||
include_once "../inc/config.php";
|
||||
$mysqli = get_mysqli_connection();
|
||||
include_once dirname(__FILE__) . "/../inc/getBasic.inc.php";
|
||||
include_once dirname(__FILE__) . "/../inc/getData.inc.php";
|
||||
include_once dirname(__FILE__) . "/../inc/tradeRec.inc.php";
|
||||
include_once __DIR__ . "/../html/headChart.php";
|
||||
$ts_code= ts_code_conv($_REQUEST['ts_code']);
|
||||
$day_st = ($_REQUEST['s']=='')?'20180101':reformDate($_REQUEST['s']);
|
||||
$day_end= ($_REQUEST['e']=='')?date('Ymd'):reformDate($_REQUEST['e']);
|
||||
|
||||
$unit = '股'; # Without a unit on PE
|
||||
$data = getStockHist($ts_code,date("Ymd",strtotime($day_st)),date("Ymd",strtotime($day_end)));
|
||||
//$data2 = getBasicData($ts_code,$day_st,$day_end,$item);
|
||||
if($_REQUEST['t_vendor']=='方正证券') {$flg3 = '买入'; $flg4 = '卖出';}
|
||||
elseif($_REQUEST['t_vendor']=='长江证券') {$flg3 = '证券买入'; $flg4 = '证券卖出';}
|
||||
$trdData = trade_rec($ts_code, $day_st, $day_end,'');
|
||||
$data3 = recDataSort($trdData,$flg3);
|
||||
$data4 = recDataSort($trdData,$flg4);
|
||||
$data3Avg = avePrice($data3['tvol'],$data3['tprice']);
|
||||
$data4Avg = avePrice($data4['tvol'],$data4['tprice']);
|
||||
|
||||
$subtext_ext = " {$flg3}均价: {$data3Avg['avePrice']}, 量{$data3Avg['ttlVol']}股 ";
|
||||
$subtext_ext .= "-- {$flg4}均价: {$data4Avg['avePrice']}, 量{$data4Avg['ttlVol']}股 ";
|
||||
|
||||
$ts_name = tscodeToName($ts_code);
|
||||
$legend = array('不复权股价','交易买入','交易卖出','买入量','卖出量');
|
||||
if($_REQUEST['adj']) $legend[0]='复权股价';
|
||||
?>
|
||||
<form name="form1" id="form1" method="post">
|
||||
<input type="hidden" name="adj" id="adj" value="<?=$_REQUEST['adj'] ?>">
|
||||
<input type="hidden" name="ts_code" id="ts_code" value="<?=$ts_code ?>">
|
||||
<input type="hidden" name="s" id="s" value="<?=$day_st ?>">
|
||||
<input type="hidden" name="e" id="e" value="<?=$day_end ?>">
|
||||
|
||||
</form>
|
||||
<script type="text/javascript">
|
||||
var legend = <?php echo json_encode($legend);?>;
|
||||
var unit ='<?=$unit ?>';
|
||||
var headtxt = '<?php echo $ts_name.'('.$ts_code.')'; ?>';
|
||||
var subtxt = '<?=$subtext_ext ?>';
|
||||
var data1 = <?php echo json_encode($data['data']); ?>;
|
||||
var data2 = <?php echo json_encode($data3['data']); ?>;
|
||||
var data3 = <?php echo json_encode($data4['data']); ?>;
|
||||
var data4 = <?php echo json_encode($data3['data2']); ?>;
|
||||
var data5 = <?php echo json_encode($data4['data2']); ?>;
|
||||
|
||||
console.log(data1[0]['value'][0]);
|
||||
console.log(data1[0]['value'][1]);
|
||||
</script>
|
||||
<script type="text/javascript" src="../js/adj.ajax.js?verion=3.14"></script>
|
||||
<script>
|
||||
console.log(data1[0]['value'][0]);
|
||||
console.log(data1[0]['value'][1]);
|
||||
</script>
|
||||
<script type="text/javascript" src="../js/chartStDetail.js?version=3.16"></script>
|
||||
</body>
|
||||
<?php
|
||||
include_once "../inc/config.php";
|
||||
$mysqli = get_mysqli_connection();
|
||||
include_once dirname(__FILE__) . "/../inc/getBasic.inc.php";
|
||||
include_once dirname(__FILE__) . "/../inc/getData.inc.php";
|
||||
include_once dirname(__FILE__) . "/../inc/tradeRec.inc.php";
|
||||
include_once __DIR__ . "/../html/headChart.php";
|
||||
$ts_code= ts_code_conv($_REQUEST['ts_code']);
|
||||
$day_st = ($_REQUEST['s']=='')?'20180101':reformDate($_REQUEST['s']);
|
||||
$day_end= ($_REQUEST['e']=='')?date('Ymd'):reformDate($_REQUEST['e']);
|
||||
|
||||
$unit = '股'; # Without a unit on PE
|
||||
$data = getStockHist($ts_code,date("Ymd",strtotime($day_st)),date("Ymd",strtotime($day_end)));
|
||||
//$data2 = getBasicData($ts_code,$day_st,$day_end,$item);
|
||||
if($_REQUEST['t_vendor']=='方正证券') {$flg3 = '买入'; $flg4 = '卖出';}
|
||||
elseif($_REQUEST['t_vendor']=='长江证券') {$flg3 = '证券买入'; $flg4 = '证券卖出';}
|
||||
$trdData = trade_rec($ts_code, $day_st, $day_end,'');
|
||||
$data3 = recDataSort($trdData,$flg3);
|
||||
$data4 = recDataSort($trdData,$flg4);
|
||||
$data3Avg = avePrice($data3['tvol'],$data3['tprice']);
|
||||
$data4Avg = avePrice($data4['tvol'],$data4['tprice']);
|
||||
|
||||
$subtext_ext = " {$flg3}均价: {$data3Avg['avePrice']}, 量{$data3Avg['ttlVol']}股 ";
|
||||
$subtext_ext .= "-- {$flg4}均价: {$data4Avg['avePrice']}, 量{$data4Avg['ttlVol']}股 ";
|
||||
|
||||
$ts_name = tscodeToName($ts_code);
|
||||
$legend = array('不复权股价','交易买入','交易卖出','买入量','卖出量');
|
||||
if($_REQUEST['adj']) $legend[0]='复权股价';
|
||||
?>
|
||||
<form name="form1" id="form1" method="post">
|
||||
<input type="hidden" name="adj" id="adj" value="<?=$_REQUEST['adj'] ?>">
|
||||
<input type="hidden" name="ts_code" id="ts_code" value="<?=$ts_code ?>">
|
||||
<input type="hidden" name="s" id="s" value="<?=$day_st ?>">
|
||||
<input type="hidden" name="e" id="e" value="<?=$day_end ?>">
|
||||
|
||||
</form>
|
||||
<script type="text/javascript">
|
||||
var legend = <?php echo json_encode($legend);?>;
|
||||
var unit ='<?=$unit ?>';
|
||||
var headtxt = '<?php echo $ts_name.'('.$ts_code.')'; ?>';
|
||||
var subtxt = '<?=$subtext_ext ?>';
|
||||
var data1 = <?php echo json_encode($data['data']); ?>;
|
||||
var data2 = <?php echo json_encode($data3['data']); ?>;
|
||||
var data3 = <?php echo json_encode($data4['data']); ?>;
|
||||
var data4 = <?php echo json_encode($data3['data2']); ?>;
|
||||
var data5 = <?php echo json_encode($data4['data2']); ?>;
|
||||
|
||||
console.log(data1[0]['value'][0]);
|
||||
console.log(data1[0]['value'][1]);
|
||||
</script>
|
||||
<script type="text/javascript" src="../js/adj.ajax.js?verion=3.14"></script>
|
||||
<script>
|
||||
console.log(data1[0]['value'][0]);
|
||||
console.log(data1[0]['value'][1]);
|
||||
</script>
|
||||
<script type="text/javascript" src="../js/chartStDetail.js?version=3.16"></script>
|
||||
</body>
|
||||
</html>
|
||||
+103
-103
@@ -1,103 +1,103 @@
|
||||
<?php
|
||||
include_once "../inc/getBasic.inc.php";
|
||||
include_once "../inc/getData.inc.php";
|
||||
include_once "../inc/postJson.inc.php";
|
||||
$_REQUEST['ts_code']=$_REQUEST['ts_code']?$_REQUEST['ts_code']:'000001';
|
||||
$_REQUEST['tp']=$_REQUEST['tp']?$_REQUEST['tp']:'ratio';
|
||||
$_REQUEST['t_start']=$_REQUEST['t_start']?$_REQUEST['t_start']:'2015-06-01';
|
||||
$_REQUEST['t_end']=$_REQUEST['t_end']?$_REQUEST['t_end']:date('Y-m-d');
|
||||
$ts_name = tscodeToName(ts_code_conv($_REQUEST['ts_code']));
|
||||
$title="股价VS北向资金持股:".$ts_name.'('.$_REQUEST['ts_code'].')';
|
||||
|
||||
$unit = '';
|
||||
$data = getStockHist(ts_code_conv($_REQUEST['ts_code']),$_REQUEST['t_start'],$_REQUEST['t_end']);
|
||||
$getData = getHKHoldByCode();
|
||||
$data2 = hkHoldReform($getData,$_REQUEST['tp']);
|
||||
#var_dump($data2['data']);
|
||||
$subtext_ext = "Max: ".$data2['data_max'];
|
||||
$subtext_ext .= ", Min: ".$data2['data_min'];
|
||||
$subtext_ext .= ", Average: ".$data2['data_avg'];
|
||||
$subtext_ext .= ", Recent: ".$data2['data_last'];
|
||||
|
||||
$legend=array('不复权股价',hkholdConv($_REQUEST['tp']));
|
||||
include_once "../html/head.php";
|
||||
?>
|
||||
<script src="../js/renderCharts.js"></script>
|
||||
<form name="main" id="main" method="get">
|
||||
<div style="width:100%;text-align:center">
|
||||
股票代码: <input type='text' name='ts_code' id='ts_code' width="30px" value='<?=$_REQUEST['ts_code']?>' >
|
||||
数据选择:
|
||||
<select name="tp" id="tp">
|
||||
<option value="ratio">持股比例(%)</option>
|
||||
<option value="vol">持股数(万)</option>
|
||||
</select>
|
||||
|
||||
<script>
|
||||
$("#tp").val('<?=$_REQUEST['tp']?>');
|
||||
</script>
|
||||
开始时间: <input type='date' name='t_start' id='t_start' width='30px' value='<?=$_REQUEST['t_start']?>' >
|
||||
结束时间: <input type='date' name='t_end' id='t_end' width='30px' value='<?=$_REQUEST['t_end']?>' >
|
||||
<button id="submitBtn" class="btn-submit"><span>查询数据</span></button>
|
||||
<div > </div>
|
||||
|
||||
</div> </form>
|
||||
<div > </div>
|
||||
<div id="container" style="margin:0 auto;height: 400px;width: 1000px"></div>
|
||||
<div class="loading-overlay" id="loadingOverlay">
|
||||
<div class="spinner"></div>
|
||||
<p style="font-size:18px; color:#2c3e50;">正在加载数据,请稍候...</p>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
// 显示加载动画
|
||||
$('#loadingOverlay').addClass('active');
|
||||
let t_start = $('#t_start').val();
|
||||
let t_end = $('#t_end').val();
|
||||
let ts_code = $("#ts_code").val();
|
||||
url = "https://api.doorcome.cn/api/stockbasic/?tscode="+ts_code;
|
||||
url += "&start_date="+t_start+"&end_date="+t_end;
|
||||
|
||||
url1 = "https://api.doorcome.cn/api/stockmargin/?tscode="+ts_code;
|
||||
url1 += "&start_date="+t_start+"&end_date="+t_end;
|
||||
|
||||
url2 = "https://api.doorcome.cn/api/stockinfo/?tscode="+ts_code;
|
||||
Promise.all([
|
||||
fetch(url),
|
||||
fetch(url1),
|
||||
fetch(url2)
|
||||
])
|
||||
.then(responses => Promise.all(responses.map(r => r.json())))
|
||||
.then(([dailyData,hkData,stockInfo]) => {
|
||||
// 图表配置:pe_ttm
|
||||
let codeName = stockInfo[0].name;
|
||||
var params = {};
|
||||
params.chartid='container';
|
||||
params.legend = ['不复权股价','北向资金(%)'];
|
||||
params.text = codeName+'('+ts_code+')';
|
||||
params.data1 = pickData(dailyData, 'trade_date', 'close');
|
||||
params.data2 = pickData(margindData, 'trade_date', 'rzrqye');
|
||||
params.data2 = params.data2.map(item => {
|
||||
return {
|
||||
value: [
|
||||
item.value[0],
|
||||
parseFloat((parseFloat(item.value[1]) / 10000 /10000).toFixed(2))
|
||||
]
|
||||
};
|
||||
});
|
||||
dataCal = calculateStats(params.data2);
|
||||
params.sub_text = "TTM PE Max:"+dataCal['max'];
|
||||
params.sub_text += ", Min:"+dataCal['min'];
|
||||
params.sub_text += ", Average:"+dataCal['avg'];
|
||||
params.sub_text += ", Recent:"+dataCal['last'];
|
||||
doubleLineChart(params);
|
||||
})
|
||||
.catch(error => console.error('数据加载失败:', error))
|
||||
.finally(() => {
|
||||
// 隐藏加载动画
|
||||
$('#loadingOverlay').removeClass('active');
|
||||
}
|
||||
);
|
||||
}
|
||||
</script>
|
||||
<script type="text/javascript" src="../js/hkhold.js?version=3.14"></script>
|
||||
<?php include_once "../html/footer.php"; ?>
|
||||
|
||||
<?php
|
||||
include_once "../inc/getBasic.inc.php";
|
||||
include_once "../inc/getData.inc.php";
|
||||
include_once "../inc/postJson.inc.php";
|
||||
$_REQUEST['ts_code']=$_REQUEST['ts_code']?$_REQUEST['ts_code']:'000001';
|
||||
$_REQUEST['tp']=$_REQUEST['tp']?$_REQUEST['tp']:'ratio';
|
||||
$_REQUEST['t_start']=$_REQUEST['t_start']?$_REQUEST['t_start']:'2015-06-01';
|
||||
$_REQUEST['t_end']=$_REQUEST['t_end']?$_REQUEST['t_end']:date('Y-m-d');
|
||||
$ts_name = tscodeToName(ts_code_conv($_REQUEST['ts_code']));
|
||||
$title="股价VS北向资金持股:".$ts_name.'('.$_REQUEST['ts_code'].')';
|
||||
|
||||
$unit = '';
|
||||
$data = getStockHist(ts_code_conv($_REQUEST['ts_code']),$_REQUEST['t_start'],$_REQUEST['t_end']);
|
||||
$getData = getHKHoldByCode();
|
||||
$data2 = hkHoldReform($getData,$_REQUEST['tp']);
|
||||
#var_dump($data2['data']);
|
||||
$subtext_ext = "Max: ".$data2['data_max'];
|
||||
$subtext_ext .= ", Min: ".$data2['data_min'];
|
||||
$subtext_ext .= ", Average: ".$data2['data_avg'];
|
||||
$subtext_ext .= ", Recent: ".$data2['data_last'];
|
||||
|
||||
$legend=array('不复权股价',hkholdConv($_REQUEST['tp']));
|
||||
include_once "../html/head.php";
|
||||
?>
|
||||
<script src="../js/renderCharts.js"></script>
|
||||
<form name="main" id="main" method="get">
|
||||
<div style="width:100%;text-align:center">
|
||||
股票代码: <input type='text' name='ts_code' id='ts_code' width="30px" value='<?=$_REQUEST['ts_code']?>' >
|
||||
数据选择:
|
||||
<select name="tp" id="tp">
|
||||
<option value="ratio">持股比例(%)</option>
|
||||
<option value="vol">持股数(万)</option>
|
||||
</select>
|
||||
|
||||
<script>
|
||||
$("#tp").val('<?=$_REQUEST['tp']?>');
|
||||
</script>
|
||||
开始时间: <input type='date' name='t_start' id='t_start' width='30px' value='<?=$_REQUEST['t_start']?>' >
|
||||
结束时间: <input type='date' name='t_end' id='t_end' width='30px' value='<?=$_REQUEST['t_end']?>' >
|
||||
<button id="submitBtn" class="btn-submit"><span>查询数据</span></button>
|
||||
<div > </div>
|
||||
|
||||
</div> </form>
|
||||
<div > </div>
|
||||
<div id="container" style="margin:0 auto;height: 400px;width: 1000px"></div>
|
||||
<div class="loading-overlay" id="loadingOverlay">
|
||||
<div class="spinner"></div>
|
||||
<p style="font-size:18px; color:#2c3e50;">正在加载数据,请稍候...</p>
|
||||
</div>
|
||||
<script type="text/javascript">
|
||||
// 显示加载动画
|
||||
$('#loadingOverlay').addClass('active');
|
||||
let t_start = $('#t_start').val();
|
||||
let t_end = $('#t_end').val();
|
||||
let ts_code = $("#ts_code").val();
|
||||
url = "https://api.doorcome.cn/api/stockbasic/?tscode="+ts_code;
|
||||
url += "&start_date="+t_start+"&end_date="+t_end;
|
||||
|
||||
url1 = "https://api.doorcome.cn/api/stockmargin/?tscode="+ts_code;
|
||||
url1 += "&start_date="+t_start+"&end_date="+t_end;
|
||||
|
||||
url2 = "https://api.doorcome.cn/api/stockinfo/?tscode="+ts_code;
|
||||
Promise.all([
|
||||
fetch(url),
|
||||
fetch(url1),
|
||||
fetch(url2)
|
||||
])
|
||||
.then(responses => Promise.all(responses.map(r => r.json())))
|
||||
.then(([dailyData,hkData,stockInfo]) => {
|
||||
// 图表配置:pe_ttm
|
||||
let codeName = stockInfo[0].name;
|
||||
var params = {};
|
||||
params.chartid='container';
|
||||
params.legend = ['不复权股价','北向资金(%)'];
|
||||
params.text = codeName+'('+ts_code+')';
|
||||
params.data1 = pickData(dailyData, 'trade_date', 'close');
|
||||
params.data2 = pickData(margindData, 'trade_date', 'rzrqye');
|
||||
params.data2 = params.data2.map(item => {
|
||||
return {
|
||||
value: [
|
||||
item.value[0],
|
||||
parseFloat((parseFloat(item.value[1]) / 10000 /10000).toFixed(2))
|
||||
]
|
||||
};
|
||||
});
|
||||
dataCal = calculateStats(params.data2);
|
||||
params.sub_text = "TTM PE Max:"+dataCal['max'];
|
||||
params.sub_text += ", Min:"+dataCal['min'];
|
||||
params.sub_text += ", Average:"+dataCal['avg'];
|
||||
params.sub_text += ", Recent:"+dataCal['last'];
|
||||
doubleLineChart(params);
|
||||
})
|
||||
.catch(error => console.error('数据加载失败:', error))
|
||||
.finally(() => {
|
||||
// 隐藏加载动画
|
||||
$('#loadingOverlay').removeClass('active');
|
||||
}
|
||||
);
|
||||
}
|
||||
</script>
|
||||
<script type="text/javascript" src="../js/hkhold.js?version=3.14"></script>
|
||||
<?php include_once "../html/footer.php"; ?>
|
||||
|
||||
|
||||
+101
-101
@@ -1,101 +1,101 @@
|
||||
<?php
|
||||
include_once("../inc/functions.inc.php");
|
||||
$_REQUEST['code']=$_REQUEST['code']?$_REQUEST['code']:'000001.SH';
|
||||
$_REQUEST['se']=$_REQUEST['se']?$_REQUEST['se']:'SSE';
|
||||
$_REQUEST['t_start']=$_REQUEST['t_start']?$_REQUEST['t_start']:'2020-01-01';
|
||||
$_REQUEST['t_end']=$_REQUEST['t_end']?$_REQUEST['t_end']:date('Y-m-d');
|
||||
$title="指数VS融资融券余额";
|
||||
include_once "../html/head.php";
|
||||
?>
|
||||
<script src="../js/renderCharts.js"></script>
|
||||
<form name="main" id="main" method="get"> <div style="width:100%;text-align:center">
|
||||
指数代码: <?php indexList('code'); ?>
|
||||
融资融券交易所: <?php seList('se'); ?>
|
||||
|
||||
开始时间: <input type='date' name='t_start' id='t_start' width='30px' value='<?=$_REQUEST['t_start']?>' >
|
||||
结束时间: <input type='date' name='t_end' id='t_end' width='30px' value='<?=$_REQUEST['t_end']?>' >
|
||||
|
||||
<button id="submitBtn" class="btn-submit"><span>查询数据</span></button>
|
||||
<div > </div>
|
||||
|
||||
</div> </form>
|
||||
<div > </div>
|
||||
|
||||
<!-- 图表容器 -->
|
||||
<div id="container" style="width: 1000px; height:400px; margin: 0 auto 20px;">
|
||||
<div class="loading-overlay" id="loadingOverlay">
|
||||
<div class="spinner"></div>
|
||||
<p style="font-size:18px; color:#2c3e50;">正在加载数据,请稍候...</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
// 页面加载时初始化图表
|
||||
$(document).ready(function() {
|
||||
// 设置默认值
|
||||
$('#code').val('<?= $_REQUEST['code'] ?>');
|
||||
$('#se').val('<?= $_REQUEST['se'] ?>');
|
||||
|
||||
// 加载初始数据
|
||||
loadChartData();
|
||||
|
||||
// 绑定按钮点击事件
|
||||
$('#submitBtn').click(function(e) {
|
||||
e.preventDefault(); // 阻止表单提交刷新页面
|
||||
loadChartData();
|
||||
});
|
||||
});
|
||||
|
||||
// 加载图表数据的函数
|
||||
function loadChartData() {
|
||||
// 显示加载动画
|
||||
$('#loadingOverlay').addClass('active');
|
||||
|
||||
let t_start = $('#t_start').val();
|
||||
let t_end = $('#t_end').val();
|
||||
let code = $("#code").val();
|
||||
let se = $("#se").val();
|
||||
let codeName=convertIndexCode(code);
|
||||
url = "https://api.doorcome.cn/api/indexDatas/?tscode="+code;
|
||||
url += "&start_date="+t_start+"&end_date="+t_end;
|
||||
url1 = "https://api.doorcome.cn/api/dailymargin/?exchange_id="+se;
|
||||
url1 += "&start_date="+t_start+"&end_date="+t_end;
|
||||
Promise.all([
|
||||
fetch(url),
|
||||
fetch(url1)
|
||||
])
|
||||
.then(responses => Promise.all(responses.map(r => r.json())))
|
||||
.then(([indexData,seData]) => {
|
||||
let dataMain=pickData(indexData, 'trade_date', 'close');
|
||||
let marginData=pickData(seData, 'trade_date', 'rzrqye');
|
||||
// 图表配置:total_mv
|
||||
params = {};
|
||||
params.chartid='container';
|
||||
params.legend = [codeName,'融资融券余额-亿'];
|
||||
params.text = params.legend[0]+' V.S '+params.legend[1];
|
||||
params.data1 = dataMain;
|
||||
params.data2 = marginData;
|
||||
params.data2 = params.data2.map(item => {
|
||||
return {
|
||||
value: [
|
||||
item.value[0],
|
||||
parseFloat((parseFloat(item.value[1]) / 10000 / 10000 ).toFixed(2))
|
||||
]
|
||||
};
|
||||
});
|
||||
dataCal = calculateStats(params.data2);
|
||||
params.sub_text = "融资融券余额 Max:"+dataCal['max'];
|
||||
params.sub_text += ", Min:"+dataCal['min'];
|
||||
params.sub_text += ", Average:"+dataCal['avg'];
|
||||
params.sub_text += ", Recent:"+dataCal['last'];
|
||||
doubleLineChart(params);
|
||||
})
|
||||
.catch(error => console.error('数据加载失败:', error))
|
||||
.finally(() => {
|
||||
// 隐藏加载动画
|
||||
$('#loadingOverlay').removeClass('active');
|
||||
});
|
||||
}
|
||||
</script>
|
||||
<?php include_once("../html/footer.php"); ?>
|
||||
|
||||
<?php
|
||||
include_once("../inc/functions.inc.php");
|
||||
$_REQUEST['code']=$_REQUEST['code']?$_REQUEST['code']:'000001.SH';
|
||||
$_REQUEST['se']=$_REQUEST['se']?$_REQUEST['se']:'SSE';
|
||||
$_REQUEST['t_start']=$_REQUEST['t_start']?$_REQUEST['t_start']:'2020-01-01';
|
||||
$_REQUEST['t_end']=$_REQUEST['t_end']?$_REQUEST['t_end']:date('Y-m-d');
|
||||
$title="指数VS融资融券余额";
|
||||
include_once "../html/head.php";
|
||||
?>
|
||||
<script src="../js/renderCharts.js"></script>
|
||||
<form name="main" id="main" method="get"> <div style="width:100%;text-align:center">
|
||||
指数代码: <?php indexList('code'); ?>
|
||||
融资融券交易所: <?php seList('se'); ?>
|
||||
|
||||
开始时间: <input type='date' name='t_start' id='t_start' width='30px' value='<?=$_REQUEST['t_start']?>' >
|
||||
结束时间: <input type='date' name='t_end' id='t_end' width='30px' value='<?=$_REQUEST['t_end']?>' >
|
||||
|
||||
<button id="submitBtn" class="btn-submit"><span>查询数据</span></button>
|
||||
<div > </div>
|
||||
|
||||
</div> </form>
|
||||
<div > </div>
|
||||
|
||||
<!-- 图表容器 -->
|
||||
<div id="container" style="width: 1000px; height:400px; margin: 0 auto 20px;">
|
||||
<div class="loading-overlay" id="loadingOverlay">
|
||||
<div class="spinner"></div>
|
||||
<p style="font-size:18px; color:#2c3e50;">正在加载数据,请稍候...</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
// 页面加载时初始化图表
|
||||
$(document).ready(function() {
|
||||
// 设置默认值
|
||||
$('#code').val('<?= $_REQUEST['code'] ?>');
|
||||
$('#se').val('<?= $_REQUEST['se'] ?>');
|
||||
|
||||
// 加载初始数据
|
||||
loadChartData();
|
||||
|
||||
// 绑定按钮点击事件
|
||||
$('#submitBtn').click(function(e) {
|
||||
e.preventDefault(); // 阻止表单提交刷新页面
|
||||
loadChartData();
|
||||
});
|
||||
});
|
||||
|
||||
// 加载图表数据的函数
|
||||
function loadChartData() {
|
||||
// 显示加载动画
|
||||
$('#loadingOverlay').addClass('active');
|
||||
|
||||
let t_start = $('#t_start').val();
|
||||
let t_end = $('#t_end').val();
|
||||
let code = $("#code").val();
|
||||
let se = $("#se").val();
|
||||
let codeName=convertIndexCode(code);
|
||||
url = "https://api.doorcome.cn/api/indexDatas/?tscode="+code;
|
||||
url += "&start_date="+t_start+"&end_date="+t_end;
|
||||
url1 = "https://api.doorcome.cn/api/dailymargin/?exchange_id="+se;
|
||||
url1 += "&start_date="+t_start+"&end_date="+t_end;
|
||||
Promise.all([
|
||||
fetch(url),
|
||||
fetch(url1)
|
||||
])
|
||||
.then(responses => Promise.all(responses.map(r => r.json())))
|
||||
.then(([indexData,seData]) => {
|
||||
let dataMain=pickData(indexData, 'trade_date', 'close');
|
||||
let marginData=pickData(seData, 'trade_date', 'rzrqye');
|
||||
// 图表配置:total_mv
|
||||
params = {};
|
||||
params.chartid='container';
|
||||
params.legend = [codeName,'融资融券余额-亿'];
|
||||
params.text = params.legend[0]+' V.S '+params.legend[1];
|
||||
params.data1 = dataMain;
|
||||
params.data2 = marginData;
|
||||
params.data2 = params.data2.map(item => {
|
||||
return {
|
||||
value: [
|
||||
item.value[0],
|
||||
parseFloat((parseFloat(item.value[1]) / 10000 / 10000 ).toFixed(2))
|
||||
]
|
||||
};
|
||||
});
|
||||
dataCal = calculateStats(params.data2);
|
||||
params.sub_text = "融资融券余额 Max:"+dataCal['max'];
|
||||
params.sub_text += ", Min:"+dataCal['min'];
|
||||
params.sub_text += ", Average:"+dataCal['avg'];
|
||||
params.sub_text += ", Recent:"+dataCal['last'];
|
||||
doubleLineChart(params);
|
||||
})
|
||||
.catch(error => console.error('数据加载失败:', error))
|
||||
.finally(() => {
|
||||
// 隐藏加载动画
|
||||
$('#loadingOverlay').removeClass('active');
|
||||
});
|
||||
}
|
||||
</script>
|
||||
<?php include_once("../html/footer.php"); ?>
|
||||
|
||||
|
||||
+155
-155
@@ -1,155 +1,155 @@
|
||||
<?php
|
||||
include_once("../inc/functions.inc.php");
|
||||
$_REQUEST['code']=$_REQUEST['code']?$_REQUEST['code']:'000001.SH';
|
||||
$_REQUEST['t_start']=$_REQUEST['t_start']?$_REQUEST['t_start']:'2015-01-01';
|
||||
$_REQUEST['t_end']=$_REQUEST['t_end']?$_REQUEST['t_end']:date('Y-m-d');
|
||||
$title="指数VS两市总市值趋势";
|
||||
include_once "../html/head.php";
|
||||
?>
|
||||
<script src="../js/renderCharts.js"></script>
|
||||
<form name="main" id="main" method="get"> <div style="width:100%;text-align:center">
|
||||
指数代码: <?php indexList('code'); ?>
|
||||
|
||||
|
||||
开始时间: <input type='date' name='t_start' id='t_start' width='30px' value='<?=$_REQUEST['t_start']?>' >
|
||||
结束时间: <input type='date' name='t_end' id='t_end' width='30px' value='<?=$_REQUEST['t_end']?>' >
|
||||
<button id="submitBtn" class="btn-submit"><span>查询数据</span></button>
|
||||
<div > </div>
|
||||
<input type='checkbox' id='cb_total_mv' onclick="hideSwitch(this.id,'total_mv')" checked > 两市总市值
|
||||
<input type='checkbox' id='cb_circ_mv' onclick="hideSwitch(this.id,'circ_mv')" checked> 两市流通市值
|
||||
</div> </form>
|
||||
<div > </div>
|
||||
|
||||
<!-- 图表容器 -->
|
||||
<div id="container" style="width: 1000px; margin: 0 auto 20px;">
|
||||
<div class="loading-overlay" id="loadingOverlay">
|
||||
<div class="spinner"></div>
|
||||
<p style="font-size:18px; color:#2c3e50;">正在加载数据,请稍候...</p>
|
||||
</div>
|
||||
<div id="total_mv" style="width: 1000px; height:400px; margin: 0 auto 20px;"></div>
|
||||
|
||||
<div id="float_mv" style="width: 1000px; height:400px; margin: 0 auto 20px;"></div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
// 页面加载时初始化图表
|
||||
$(document).ready(function() {
|
||||
// 设置默认值
|
||||
$('#code').val('<?= $_REQUEST['code'] ?>');
|
||||
|
||||
// 加载初始数据
|
||||
loadChartData();
|
||||
|
||||
// 绑定按钮点击事件
|
||||
$('#submitBtn').click(function(e) {
|
||||
e.preventDefault(); // 阻止表单提交刷新页面
|
||||
loadChartData();
|
||||
});
|
||||
});
|
||||
// 加载图表数据的函数
|
||||
function loadChartData() {
|
||||
// 显示加载动画
|
||||
$('#loadingOverlay').addClass('active');
|
||||
|
||||
let t_start = $('#t_start').val();
|
||||
let t_end = $('#t_end').val();
|
||||
let code = $("#code").val();
|
||||
let codeName=convertIndexCode(code);
|
||||
url = "https://api.doorcome.cn/api/indexDatas/?tscode="+code;
|
||||
url += "&start_date="+t_start+"&end_date="+t_end;
|
||||
url1 = "https://api.doorcome.cn/api/indexDatas/?tscode=000001.SH";
|
||||
url1 += "&start_date="+t_start+"&end_date="+t_end;
|
||||
url2 = "https://api.doorcome.cn/api/indexDatas/?tscode=399001.SZ";
|
||||
url2 += "&start_date="+t_start+"&end_date="+t_end;
|
||||
Promise.all([
|
||||
fetch(url),
|
||||
fetch(url1),
|
||||
fetch(url2)
|
||||
])
|
||||
.then(responses => Promise.all(responses.map(r => r.json())))
|
||||
.then(([searchData,SHData,SZData]) => {
|
||||
let dataMain=pickData(searchData, 'trade_date', 'close');
|
||||
let totalMVSH=pickData(SHData, 'trade_date', 'total_mv');
|
||||
let floatMVSH=pickData(SHData, 'trade_date', 'float_mv');
|
||||
let totalMVSZ=pickData(SZData, 'trade_date', 'total_mv');
|
||||
let floatMVSZ=pickData(SZData, 'trade_date', 'float_mv');
|
||||
let data_TotalMV=mergeAndSumArrays(totalMVSH,totalMVSZ);
|
||||
let data_folatMV=mergeAndSumArrays(floatMVSH,floatMVSZ);
|
||||
|
||||
// 图表配置:total_mv
|
||||
params = {};
|
||||
params.chartid='total_mv';
|
||||
params.legend = [codeName,'总市值-万亿'];
|
||||
params.text = params.legend[0]+' V.S '+params.legend[1];
|
||||
params.data1 = dataMain;
|
||||
params.data2 = data_TotalMV;
|
||||
params.data2 = params.data2.map(item => {
|
||||
return {
|
||||
value: [
|
||||
item.value[0],
|
||||
parseFloat((parseFloat(item.value[1]) / 10000 / 10000 / 10000).toFixed(2))
|
||||
]
|
||||
};
|
||||
});
|
||||
dataCal = calculateStats(params.data2);
|
||||
params.sub_text = "总市值 Max:"+dataCal['max'];
|
||||
params.sub_text += ", Min:"+dataCal['min'];
|
||||
params.sub_text += ", Average:"+dataCal['avg'];
|
||||
params.sub_text += ", Recent:"+dataCal['last'];
|
||||
doubleLineChart(params);
|
||||
|
||||
// 图表配置:float_mv
|
||||
params = {};
|
||||
params.chartid='float_mv';
|
||||
params.legend = [codeName,'流通市值-万亿'];
|
||||
params.text = params.legend[0]+' V.S '+params.legend[1];
|
||||
params.data1 = dataMain;
|
||||
params.data2 = data_folatMV;
|
||||
params.data2 = params.data2.map(item => {
|
||||
return {
|
||||
value: [
|
||||
item.value[0],
|
||||
parseFloat((parseFloat(item.value[1]) / 10000 / 10000 / 10000).toFixed(2))
|
||||
]
|
||||
};
|
||||
});
|
||||
dataCal = calculateStats(params.data2);
|
||||
params.sub_text = "流通市值 Max:"+dataCal['max'];
|
||||
params.sub_text += ", Min:"+dataCal['min'];
|
||||
params.sub_text += ", Average:"+dataCal['avg'];
|
||||
params.sub_text += ", Recent:"+dataCal['last'];
|
||||
doubleLineChart(params);
|
||||
})
|
||||
.catch(error => console.error('数据加载失败:', error))
|
||||
.finally(() => {
|
||||
// 隐藏加载动画
|
||||
$('#loadingOverlay').removeClass('active');
|
||||
});
|
||||
}
|
||||
// 函数:合并两个数组,日期相同则数字相加
|
||||
function mergeAndSumArrays(arr1, arr2) {
|
||||
// 创建一个 Map 来存储日期和对应的数字总和
|
||||
const resultMap = new Map();
|
||||
|
||||
// 处理第一个数组
|
||||
arr1.forEach(item => {
|
||||
const [date, value] = item.value;
|
||||
resultMap.set(date, (resultMap.get(date) || 0) + parseFloat(value));
|
||||
});
|
||||
|
||||
// 处理第二个数组
|
||||
arr2.forEach(item => {
|
||||
const [date, value] = item.value;
|
||||
resultMap.set(date, (resultMap.get(date) || 0) + parseFloat(value));
|
||||
});
|
||||
|
||||
// 将 Map 转换为数组格式
|
||||
const resultArray = Array.from(resultMap, ([date, totalValue]) => ({
|
||||
value: [date, totalValue]
|
||||
}));
|
||||
|
||||
return resultArray;
|
||||
}
|
||||
</script>
|
||||
<?php include_once("../html/footer.php"); ?>
|
||||
|
||||
<?php
|
||||
include_once("../inc/functions.inc.php");
|
||||
$_REQUEST['code']=$_REQUEST['code']?$_REQUEST['code']:'000001.SH';
|
||||
$_REQUEST['t_start']=$_REQUEST['t_start']?$_REQUEST['t_start']:'2015-01-01';
|
||||
$_REQUEST['t_end']=$_REQUEST['t_end']?$_REQUEST['t_end']:date('Y-m-d');
|
||||
$title="指数VS两市总市值趋势";
|
||||
include_once "../html/head.php";
|
||||
?>
|
||||
<script src="../js/renderCharts.js"></script>
|
||||
<form name="main" id="main" method="get"> <div style="width:100%;text-align:center">
|
||||
指数代码: <?php indexList('code'); ?>
|
||||
|
||||
|
||||
开始时间: <input type='date' name='t_start' id='t_start' width='30px' value='<?=$_REQUEST['t_start']?>' >
|
||||
结束时间: <input type='date' name='t_end' id='t_end' width='30px' value='<?=$_REQUEST['t_end']?>' >
|
||||
<button id="submitBtn" class="btn-submit"><span>查询数据</span></button>
|
||||
<div > </div>
|
||||
<input type='checkbox' id='cb_total_mv' onclick="hideSwitch(this.id,'total_mv')" checked > 两市总市值
|
||||
<input type='checkbox' id='cb_circ_mv' onclick="hideSwitch(this.id,'circ_mv')" checked> 两市流通市值
|
||||
</div> </form>
|
||||
<div > </div>
|
||||
|
||||
<!-- 图表容器 -->
|
||||
<div id="container" style="width: 1000px; margin: 0 auto 20px;">
|
||||
<div class="loading-overlay" id="loadingOverlay">
|
||||
<div class="spinner"></div>
|
||||
<p style="font-size:18px; color:#2c3e50;">正在加载数据,请稍候...</p>
|
||||
</div>
|
||||
<div id="total_mv" style="width: 1000px; height:400px; margin: 0 auto 20px;"></div>
|
||||
|
||||
<div id="float_mv" style="width: 1000px; height:400px; margin: 0 auto 20px;"></div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
// 页面加载时初始化图表
|
||||
$(document).ready(function() {
|
||||
// 设置默认值
|
||||
$('#code').val('<?= $_REQUEST['code'] ?>');
|
||||
|
||||
// 加载初始数据
|
||||
loadChartData();
|
||||
|
||||
// 绑定按钮点击事件
|
||||
$('#submitBtn').click(function(e) {
|
||||
e.preventDefault(); // 阻止表单提交刷新页面
|
||||
loadChartData();
|
||||
});
|
||||
});
|
||||
// 加载图表数据的函数
|
||||
function loadChartData() {
|
||||
// 显示加载动画
|
||||
$('#loadingOverlay').addClass('active');
|
||||
|
||||
let t_start = $('#t_start').val();
|
||||
let t_end = $('#t_end').val();
|
||||
let code = $("#code").val();
|
||||
let codeName=convertIndexCode(code);
|
||||
url = "https://api.doorcome.cn/api/indexDatas/?tscode="+code;
|
||||
url += "&start_date="+t_start+"&end_date="+t_end;
|
||||
url1 = "https://api.doorcome.cn/api/indexDatas/?tscode=000001.SH";
|
||||
url1 += "&start_date="+t_start+"&end_date="+t_end;
|
||||
url2 = "https://api.doorcome.cn/api/indexDatas/?tscode=399001.SZ";
|
||||
url2 += "&start_date="+t_start+"&end_date="+t_end;
|
||||
Promise.all([
|
||||
fetch(url),
|
||||
fetch(url1),
|
||||
fetch(url2)
|
||||
])
|
||||
.then(responses => Promise.all(responses.map(r => r.json())))
|
||||
.then(([searchData,SHData,SZData]) => {
|
||||
let dataMain=pickData(searchData, 'trade_date', 'close');
|
||||
let totalMVSH=pickData(SHData, 'trade_date', 'total_mv');
|
||||
let floatMVSH=pickData(SHData, 'trade_date', 'float_mv');
|
||||
let totalMVSZ=pickData(SZData, 'trade_date', 'total_mv');
|
||||
let floatMVSZ=pickData(SZData, 'trade_date', 'float_mv');
|
||||
let data_TotalMV=mergeAndSumArrays(totalMVSH,totalMVSZ);
|
||||
let data_folatMV=mergeAndSumArrays(floatMVSH,floatMVSZ);
|
||||
|
||||
// 图表配置:total_mv
|
||||
params = {};
|
||||
params.chartid='total_mv';
|
||||
params.legend = [codeName,'总市值-万亿'];
|
||||
params.text = params.legend[0]+' V.S '+params.legend[1];
|
||||
params.data1 = dataMain;
|
||||
params.data2 = data_TotalMV;
|
||||
params.data2 = params.data2.map(item => {
|
||||
return {
|
||||
value: [
|
||||
item.value[0],
|
||||
parseFloat((parseFloat(item.value[1]) / 10000 / 10000 / 10000).toFixed(2))
|
||||
]
|
||||
};
|
||||
});
|
||||
dataCal = calculateStats(params.data2);
|
||||
params.sub_text = "总市值 Max:"+dataCal['max'];
|
||||
params.sub_text += ", Min:"+dataCal['min'];
|
||||
params.sub_text += ", Average:"+dataCal['avg'];
|
||||
params.sub_text += ", Recent:"+dataCal['last'];
|
||||
doubleLineChart(params);
|
||||
|
||||
// 图表配置:float_mv
|
||||
params = {};
|
||||
params.chartid='float_mv';
|
||||
params.legend = [codeName,'流通市值-万亿'];
|
||||
params.text = params.legend[0]+' V.S '+params.legend[1];
|
||||
params.data1 = dataMain;
|
||||
params.data2 = data_folatMV;
|
||||
params.data2 = params.data2.map(item => {
|
||||
return {
|
||||
value: [
|
||||
item.value[0],
|
||||
parseFloat((parseFloat(item.value[1]) / 10000 / 10000 / 10000).toFixed(2))
|
||||
]
|
||||
};
|
||||
});
|
||||
dataCal = calculateStats(params.data2);
|
||||
params.sub_text = "流通市值 Max:"+dataCal['max'];
|
||||
params.sub_text += ", Min:"+dataCal['min'];
|
||||
params.sub_text += ", Average:"+dataCal['avg'];
|
||||
params.sub_text += ", Recent:"+dataCal['last'];
|
||||
doubleLineChart(params);
|
||||
})
|
||||
.catch(error => console.error('数据加载失败:', error))
|
||||
.finally(() => {
|
||||
// 隐藏加载动画
|
||||
$('#loadingOverlay').removeClass('active');
|
||||
});
|
||||
}
|
||||
// 函数:合并两个数组,日期相同则数字相加
|
||||
function mergeAndSumArrays(arr1, arr2) {
|
||||
// 创建一个 Map 来存储日期和对应的数字总和
|
||||
const resultMap = new Map();
|
||||
|
||||
// 处理第一个数组
|
||||
arr1.forEach(item => {
|
||||
const [date, value] = item.value;
|
||||
resultMap.set(date, (resultMap.get(date) || 0) + parseFloat(value));
|
||||
});
|
||||
|
||||
// 处理第二个数组
|
||||
arr2.forEach(item => {
|
||||
const [date, value] = item.value;
|
||||
resultMap.set(date, (resultMap.get(date) || 0) + parseFloat(value));
|
||||
});
|
||||
|
||||
// 将 Map 转换为数组格式
|
||||
const resultArray = Array.from(resultMap, ([date, totalValue]) => ({
|
||||
value: [date, totalValue]
|
||||
}));
|
||||
|
||||
return resultArray;
|
||||
}
|
||||
</script>
|
||||
<?php include_once("../html/footer.php"); ?>
|
||||
|
||||
|
||||
+155
-155
@@ -1,156 +1,156 @@
|
||||
<?php
|
||||
/*
|
||||
* @Author: 杨水淼 yangshuimiao@jsjd.cc
|
||||
* @Date: 2025-07-08 08:16:01
|
||||
* @LastEditors: Simon failsafe@163.com
|
||||
* @LastEditTime: 2025-07-13 11:02:35
|
||||
* @FilePath: \echarts\index_trend.php
|
||||
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||||
*/
|
||||
include_once("../inc/functions.inc.php");
|
||||
$title="指数VS PE/PB/PS/市值 趋势";
|
||||
include_once "../html/head.php";
|
||||
|
||||
$_REQUEST['code'] = $_REQUEST['code']?$_REQUEST['code']:'000001.SH';
|
||||
$_REQUEST['t_start']= $_REQUEST['t_start']?$_REQUEST['t_start']:'2020-01-01';
|
||||
$_REQUEST['t_end'] = $_REQUEST['t_end']?$_REQUEST['t_end']:date('Y-m-d');
|
||||
$ts_code = $_REQUEST['code'];
|
||||
?>
|
||||
<script src="../js/renderCharts.js"></script>
|
||||
<form name="main" id="main" method="get"> <div style="width:100%;text-align:center">
|
||||
指数代码:
|
||||
<?php indexList('code'); ?>
|
||||
|
||||
开始时间: <input type='date' name='t_start' id='t_start' width='30px' value='<?=$_REQUEST['t_start']?>' >
|
||||
结束时间: <input type='date' name='t_end' id='t_end' width='30px' value='<?=$_REQUEST['t_end']?>' >
|
||||
<button id="submitBtn" class="btn-submit"><span>查询数据</span></button>
|
||||
<div > </div>
|
||||
<input type='checkbox' id='cb_pe' onclick="hideSwitch(this.id,'pe_ttm')" checked> PE_TTM 市盈率
|
||||
<input type='checkbox' id='cb_pb' onclick="hideSwitch(this.id,'pb')" checked> PB 市净率
|
||||
<input type='checkbox' id='cb_total_mv' onclick="hideSwitch(this.id,'total_mv')" checked> 总市值
|
||||
<input type='checkbox' id='cb_float_mv' onclick="hideSwitch(this.id,'float_mv')" checked> 流通市值
|
||||
</div> </form>
|
||||
<div > </div>
|
||||
<!-- 图表容器 -->
|
||||
<div id="container" style="width: 1000px; margin: 0 auto 20px;">
|
||||
<div style="position: relative; height: 10px;"></div>
|
||||
<div class="loading-overlay" id="loadingOverlay">
|
||||
<div class="spinner"></div>
|
||||
<p style="font-size:18px; color:#2c3e50;">正在加载数据,请稍候...</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="pe_ttm" style="width: 1000px; height:400px; margin: 0 auto 20px;"></div>
|
||||
<div id="pb" style="width: 1000px; height:400px; margin: 0 auto 20px;"></div>
|
||||
<div id="total_mv" style="width: 1000px; height:400px; margin: 0 auto 20px;"></div>
|
||||
|
||||
<div id="float_mv" style="width: 1000px; height:400px; margin: 0 auto 20px;"></div>
|
||||
</div>
|
||||
<script>
|
||||
// 页面加载时初始化图表
|
||||
$(document).ready(function() {
|
||||
// 设置默认值
|
||||
$('#code').val('<?= $_REQUEST['code'] ?>');
|
||||
|
||||
// 加载初始数据
|
||||
loadChartData();
|
||||
|
||||
// 绑定按钮点击事件
|
||||
$('#submitBtn').click(function(e) {
|
||||
e.preventDefault(); // 阻止表单提交刷新页面
|
||||
loadChartData();
|
||||
});
|
||||
});
|
||||
// 加载图表数据的函数
|
||||
function loadChartData() {
|
||||
// 显示加载动画
|
||||
$('#loadingOverlay').addClass('active');
|
||||
|
||||
let t_start = $('#t_start').val();
|
||||
let t_end = $('#t_end').val();
|
||||
let code = $("#code").val();
|
||||
let codeName=convertIndexCode(code);
|
||||
url = "https://api.doorcome.cn/api/indexDatas/?tscode="+code;
|
||||
url += "&start_date="+t_start+"&end_date="+t_end;
|
||||
fetch(url)
|
||||
.then(httpresponse => httpresponse.json())
|
||||
.then(parsedData => {
|
||||
// 图表配置:pe_ttm
|
||||
var params = {};
|
||||
params.chartid='pe_ttm';
|
||||
params.legend = [codeName,'pe_ttm'];
|
||||
params.text = params.legend[0]+' V.S '+params.legend[1];
|
||||
params.data1 = pickData(parsedData, 'trade_date', 'close');
|
||||
params.data2 = pickData(parsedData, 'trade_date', 'pe_ttm');
|
||||
dataCal = calculateStats(params.data2);
|
||||
params.sub_text = "TTM PE Max:"+dataCal['max'];
|
||||
params.sub_text += ", Min:"+dataCal['min'];
|
||||
params.sub_text += ", Average:"+dataCal['avg'];
|
||||
params.sub_text += ", Recent:"+dataCal['last'];
|
||||
doubleLineChart(params);
|
||||
// 图表配置:pb
|
||||
params = {};
|
||||
params.chartid='pb';
|
||||
params.legend = [codeName,'pb'];
|
||||
params.text = params.legend[0]+' V.S '+params.legend[1];
|
||||
params.data1 = pickData(parsedData, 'trade_date', 'close');
|
||||
params.data2 = pickData(parsedData, 'trade_date', 'pb');
|
||||
dataCal = calculateStats(params.data2);
|
||||
params.sub_text = "PB Max:"+dataCal['max'];
|
||||
params.sub_text += ", Min:"+dataCal['min'];
|
||||
params.sub_text += ", Average:"+dataCal['avg'];
|
||||
params.sub_text += ", Recent:"+dataCal['last'];
|
||||
doubleLineChart(params);
|
||||
|
||||
// 图表配置:total_mv
|
||||
params = {};
|
||||
params.chartid='total_mv';
|
||||
params.legend = [codeName,'总市值-万亿'];
|
||||
params.text = params.legend[0]+' V.S '+params.legend[1];
|
||||
params.data1 = pickData(parsedData, 'trade_date', 'close');
|
||||
params.data2 = pickData(parsedData, 'trade_date', 'total_mv');
|
||||
params.data2 = params.data2.map(item => {
|
||||
return {
|
||||
value: [
|
||||
item.value[0],
|
||||
parseFloat((parseFloat(item.value[1]) / 10000 / 10000 / 10000).toFixed(2))
|
||||
]
|
||||
};
|
||||
});
|
||||
dataCal = calculateStats(params.data2);
|
||||
params.sub_text = "总市值 Max:"+dataCal['max'];
|
||||
params.sub_text += ", Min:"+dataCal['min'];
|
||||
params.sub_text += ", Average:"+dataCal['avg'];
|
||||
params.sub_text += ", Recent:"+dataCal['last'];
|
||||
doubleLineChart(params);
|
||||
|
||||
// 图表配置:float_mv
|
||||
params = {};
|
||||
params.chartid='float_mv';
|
||||
params.legend = [codeName,'流通市值-万亿'];
|
||||
params.text = params.legend[0]+' V.S '+params.legend[1];
|
||||
params.data1 = pickData(parsedData, 'trade_date', 'close');
|
||||
params.data2 = pickData(parsedData, 'trade_date', 'float_mv');
|
||||
params.data2 = params.data2.map(item => {
|
||||
return {
|
||||
value: [
|
||||
item.value[0],
|
||||
parseFloat((parseFloat(item.value[1]) / 10000 / 10000 / 10000).toFixed(2))
|
||||
]
|
||||
};
|
||||
});
|
||||
dataCal = calculateStats(params.data2);
|
||||
params.sub_text = "流通市值 Max:"+dataCal['max'];
|
||||
params.sub_text += ", Min:"+dataCal['min'];
|
||||
params.sub_text += ", Average:"+dataCal['avg'];
|
||||
params.sub_text += ", Recent:"+dataCal['last'];
|
||||
doubleLineChart(params);
|
||||
})
|
||||
.catch(error => console.error('数据加载失败:', error))
|
||||
.finally(() => {
|
||||
// 隐藏加载动画
|
||||
$('#loadingOverlay').removeClass('active');
|
||||
});
|
||||
}
|
||||
</script>
|
||||
<?php
|
||||
/*
|
||||
* @Author: 杨水淼 yangshuimiao@jsjd.cc
|
||||
* @Date: 2025-07-08 08:16:01
|
||||
* @LastEditors: Simon failsafe@163.com
|
||||
* @LastEditTime: 2025-07-13 11:02:35
|
||||
* @FilePath: \echarts\index_trend.php
|
||||
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
|
||||
*/
|
||||
include_once("../inc/functions.inc.php");
|
||||
$title="指数VS PE/PB/PS/市值 趋势";
|
||||
include_once "../html/head.php";
|
||||
|
||||
$_REQUEST['code'] = $_REQUEST['code']?$_REQUEST['code']:'000001.SH';
|
||||
$_REQUEST['t_start']= $_REQUEST['t_start']?$_REQUEST['t_start']:'2020-01-01';
|
||||
$_REQUEST['t_end'] = $_REQUEST['t_end']?$_REQUEST['t_end']:date('Y-m-d');
|
||||
$ts_code = $_REQUEST['code'];
|
||||
?>
|
||||
<script src="../js/renderCharts.js"></script>
|
||||
<form name="main" id="main" method="get"> <div style="width:100%;text-align:center">
|
||||
指数代码:
|
||||
<?php indexList('code'); ?>
|
||||
|
||||
开始时间: <input type='date' name='t_start' id='t_start' width='30px' value='<?=$_REQUEST['t_start']?>' >
|
||||
结束时间: <input type='date' name='t_end' id='t_end' width='30px' value='<?=$_REQUEST['t_end']?>' >
|
||||
<button id="submitBtn" class="btn-submit"><span>查询数据</span></button>
|
||||
<div > </div>
|
||||
<input type='checkbox' id='cb_pe' onclick="hideSwitch(this.id,'pe_ttm')" checked> PE_TTM 市盈率
|
||||
<input type='checkbox' id='cb_pb' onclick="hideSwitch(this.id,'pb')" checked> PB 市净率
|
||||
<input type='checkbox' id='cb_total_mv' onclick="hideSwitch(this.id,'total_mv')" checked> 总市值
|
||||
<input type='checkbox' id='cb_float_mv' onclick="hideSwitch(this.id,'float_mv')" checked> 流通市值
|
||||
</div> </form>
|
||||
<div > </div>
|
||||
<!-- 图表容器 -->
|
||||
<div id="container" style="width: 1000px; margin: 0 auto 20px;">
|
||||
<div style="position: relative; height: 10px;"></div>
|
||||
<div class="loading-overlay" id="loadingOverlay">
|
||||
<div class="spinner"></div>
|
||||
<p style="font-size:18px; color:#2c3e50;">正在加载数据,请稍候...</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div id="pe_ttm" style="width: 1000px; height:400px; margin: 0 auto 20px;"></div>
|
||||
<div id="pb" style="width: 1000px; height:400px; margin: 0 auto 20px;"></div>
|
||||
<div id="total_mv" style="width: 1000px; height:400px; margin: 0 auto 20px;"></div>
|
||||
|
||||
<div id="float_mv" style="width: 1000px; height:400px; margin: 0 auto 20px;"></div>
|
||||
</div>
|
||||
<script>
|
||||
// 页面加载时初始化图表
|
||||
$(document).ready(function() {
|
||||
// 设置默认值
|
||||
$('#code').val('<?= $_REQUEST['code'] ?>');
|
||||
|
||||
// 加载初始数据
|
||||
loadChartData();
|
||||
|
||||
// 绑定按钮点击事件
|
||||
$('#submitBtn').click(function(e) {
|
||||
e.preventDefault(); // 阻止表单提交刷新页面
|
||||
loadChartData();
|
||||
});
|
||||
});
|
||||
// 加载图表数据的函数
|
||||
function loadChartData() {
|
||||
// 显示加载动画
|
||||
$('#loadingOverlay').addClass('active');
|
||||
|
||||
let t_start = $('#t_start').val();
|
||||
let t_end = $('#t_end').val();
|
||||
let code = $("#code").val();
|
||||
let codeName=convertIndexCode(code);
|
||||
url = "https://api.doorcome.cn/api/indexDatas/?tscode="+code;
|
||||
url += "&start_date="+t_start+"&end_date="+t_end;
|
||||
fetch(url)
|
||||
.then(httpresponse => httpresponse.json())
|
||||
.then(parsedData => {
|
||||
// 图表配置:pe_ttm
|
||||
var params = {};
|
||||
params.chartid='pe_ttm';
|
||||
params.legend = [codeName,'pe_ttm'];
|
||||
params.text = params.legend[0]+' V.S '+params.legend[1];
|
||||
params.data1 = pickData(parsedData, 'trade_date', 'close');
|
||||
params.data2 = pickData(parsedData, 'trade_date', 'pe_ttm');
|
||||
dataCal = calculateStats(params.data2);
|
||||
params.sub_text = "TTM PE Max:"+dataCal['max'];
|
||||
params.sub_text += ", Min:"+dataCal['min'];
|
||||
params.sub_text += ", Average:"+dataCal['avg'];
|
||||
params.sub_text += ", Recent:"+dataCal['last'];
|
||||
doubleLineChart(params);
|
||||
// 图表配置:pb
|
||||
params = {};
|
||||
params.chartid='pb';
|
||||
params.legend = [codeName,'pb'];
|
||||
params.text = params.legend[0]+' V.S '+params.legend[1];
|
||||
params.data1 = pickData(parsedData, 'trade_date', 'close');
|
||||
params.data2 = pickData(parsedData, 'trade_date', 'pb');
|
||||
dataCal = calculateStats(params.data2);
|
||||
params.sub_text = "PB Max:"+dataCal['max'];
|
||||
params.sub_text += ", Min:"+dataCal['min'];
|
||||
params.sub_text += ", Average:"+dataCal['avg'];
|
||||
params.sub_text += ", Recent:"+dataCal['last'];
|
||||
doubleLineChart(params);
|
||||
|
||||
// 图表配置:total_mv
|
||||
params = {};
|
||||
params.chartid='total_mv';
|
||||
params.legend = [codeName,'总市值-万亿'];
|
||||
params.text = params.legend[0]+' V.S '+params.legend[1];
|
||||
params.data1 = pickData(parsedData, 'trade_date', 'close');
|
||||
params.data2 = pickData(parsedData, 'trade_date', 'total_mv');
|
||||
params.data2 = params.data2.map(item => {
|
||||
return {
|
||||
value: [
|
||||
item.value[0],
|
||||
parseFloat((parseFloat(item.value[1]) / 10000 / 10000 / 10000).toFixed(2))
|
||||
]
|
||||
};
|
||||
});
|
||||
dataCal = calculateStats(params.data2);
|
||||
params.sub_text = "总市值 Max:"+dataCal['max'];
|
||||
params.sub_text += ", Min:"+dataCal['min'];
|
||||
params.sub_text += ", Average:"+dataCal['avg'];
|
||||
params.sub_text += ", Recent:"+dataCal['last'];
|
||||
doubleLineChart(params);
|
||||
|
||||
// 图表配置:float_mv
|
||||
params = {};
|
||||
params.chartid='float_mv';
|
||||
params.legend = [codeName,'流通市值-万亿'];
|
||||
params.text = params.legend[0]+' V.S '+params.legend[1];
|
||||
params.data1 = pickData(parsedData, 'trade_date', 'close');
|
||||
params.data2 = pickData(parsedData, 'trade_date', 'float_mv');
|
||||
params.data2 = params.data2.map(item => {
|
||||
return {
|
||||
value: [
|
||||
item.value[0],
|
||||
parseFloat((parseFloat(item.value[1]) / 10000 / 10000 / 10000).toFixed(2))
|
||||
]
|
||||
};
|
||||
});
|
||||
dataCal = calculateStats(params.data2);
|
||||
params.sub_text = "流通市值 Max:"+dataCal['max'];
|
||||
params.sub_text += ", Min:"+dataCal['min'];
|
||||
params.sub_text += ", Average:"+dataCal['avg'];
|
||||
params.sub_text += ", Recent:"+dataCal['last'];
|
||||
doubleLineChart(params);
|
||||
})
|
||||
.catch(error => console.error('数据加载失败:', error))
|
||||
.finally(() => {
|
||||
// 隐藏加载动画
|
||||
$('#loadingOverlay').removeClass('active');
|
||||
});
|
||||
}
|
||||
</script>
|
||||
<?php include_once "../html/footer.php"; ?>
|
||||
+31
-31
@@ -1,32 +1,32 @@
|
||||
<?php
|
||||
ini_set("display_errors","1");
|
||||
include_once "../inc/config.php";
|
||||
//ini_set('error_reporting', 'E_ALL'); //wrong way to open error_reporting
|
||||
//ini_set("error_reporting","32759"); //Right way to set error_reporting
|
||||
$mysqli = get_mysqli_connection();
|
||||
include_once __DIR__ . "/../inc/excelOperate.inc.php";
|
||||
include_once __DIR__ . "/../inc/tradeRec.inc.php";
|
||||
|
||||
$file = $_REQUEST['fpath'];
|
||||
$company = $_REQUEST['up_vendor'];
|
||||
$msg = array();
|
||||
/*
|
||||
echo json_encode(array(
|
||||
"status" => "2",
|
||||
"fpath"=> $file,
|
||||
'company'=> $_REQUEST['up_vendor'],
|
||||
"msg" => "upload sucessful!",
|
||||
));
|
||||
*/
|
||||
$data = readMyExcel($file);
|
||||
$msg[] = addslashes("Finished excel read! <br />");
|
||||
$msg_op = dbOp($data, $company);
|
||||
if($msg_op == false) exit(); //if return false, function dbOp() will echo massage to ajax
|
||||
$msg = array_merge($msg,$msg_op);
|
||||
echo json_encode(array(
|
||||
"status" => "1",
|
||||
"fpath"=> $file,
|
||||
'company'=> $_REQUEST['up_vendor'],
|
||||
"msg" => $msg,
|
||||
));
|
||||
<?php
|
||||
ini_set("display_errors","1");
|
||||
include_once "../inc/config.php";
|
||||
//ini_set('error_reporting', 'E_ALL'); //wrong way to open error_reporting
|
||||
//ini_set("error_reporting","32759"); //Right way to set error_reporting
|
||||
$mysqli = get_mysqli_connection();
|
||||
include_once __DIR__ . "/../inc/excelOperate.inc.php";
|
||||
include_once __DIR__ . "/../inc/tradeRec.inc.php";
|
||||
|
||||
$file = $_REQUEST['fpath'];
|
||||
$company = $_REQUEST['up_vendor'];
|
||||
$msg = array();
|
||||
/*
|
||||
echo json_encode(array(
|
||||
"status" => "2",
|
||||
"fpath"=> $file,
|
||||
'company'=> $_REQUEST['up_vendor'],
|
||||
"msg" => "upload sucessful!",
|
||||
));
|
||||
*/
|
||||
$data = readMyExcel($file);
|
||||
$msg[] = addslashes("Finished excel read! <br />");
|
||||
$msg_op = dbOp($data, $company);
|
||||
if($msg_op == false) exit(); //if return false, function dbOp() will echo massage to ajax
|
||||
$msg = array_merge($msg,$msg_op);
|
||||
echo json_encode(array(
|
||||
"status" => "1",
|
||||
"fpath"=> $file,
|
||||
'company'=> $_REQUEST['up_vendor'],
|
||||
"msg" => $msg,
|
||||
));
|
||||
?>
|
||||
+145
-145
@@ -1,145 +1,145 @@
|
||||
<?php
|
||||
ini_set("display_errors","0");
|
||||
include_once "../inc/getBasic.inc.php";
|
||||
$_REQUEST['ts_code']=$_REQUEST['ts_code']?$_REQUEST['ts_code']:'000001';
|
||||
$_REQUEST['t_start']=$_REQUEST['t_start']?$_REQUEST['t_start']:'2015-01-01';
|
||||
$_REQUEST['t_end']=$_REQUEST['t_end']?$_REQUEST['t_end']:'';
|
||||
$ts_name = tscodeToName(ts_code_conv($_REQUEST['ts_code']));
|
||||
$title="股价VS PE/PB/PS 趋势:".$ts_name.'('.$_REQUEST['ts_code'].')';
|
||||
include_once "../html/head.php";
|
||||
?>
|
||||
<script src="../js/renderCharts.js"></script>
|
||||
<form name="main" id="main" method="get"> <div style="width:100%;text-align:center">
|
||||
股票代码: <input type='text' name='ts_code' id='ts_code' width="30px" value='<?=$_REQUEST['ts_code']?>' >
|
||||
开始时间: <input type='date' name='t_start' id='t_start' width='30px' value='<?=$_REQUEST['t_start']?>' >
|
||||
结束时间: <input type='date' name='t_end' id='t_end' width='30px' value='<?=$_REQUEST['t_end']?>' >
|
||||
<button id="submitBtn" class="btn-submit"><span>查询数据</span></button>
|
||||
<div > </div>
|
||||
<input type='checkbox' id='cb_pe' onclick="hideSwitch(this.id,'pe_ttm')" checked> PE_TTM 市盈率
|
||||
<input type='checkbox' id='cb_pb' onclick="hideSwitch(this.id,'pb')" checked> PB 市净率
|
||||
<input type='checkbox' id='cb_ps' onclick="hideSwitch(this.id,'ps')" checked> PS 市销率
|
||||
<input type='checkbox' id='cb_ttmv' onclick="hideSwitch(this.id,'total_mv')" checked> 总市值
|
||||
|
||||
</div> </form>
|
||||
|
||||
<!-- 图表容器 -->
|
||||
<div id="container" style="width: 1000px; margin: 0 auto 20px;">
|
||||
<div style="position: relative; height: 10px;"></div>
|
||||
<div class="loading-overlay" id="loadingOverlay">
|
||||
<div class="spinner"></div>
|
||||
<p style="font-size:18px; color:#2c3e50;">正在加载数据,请稍候...</p>
|
||||
</div>
|
||||
<div id="pe_ttm" style="width: 1000px; height:400px; margin: 0 auto 20px;"></div>
|
||||
<div id="pb" style="width: 1000px; height:400px; margin: 0 auto 20px;"></div>
|
||||
<div id="ps" style="width: 1000px; height:400px; margin: 0 auto 20px;"></div>
|
||||
<div id="total_mv" style="width: 1000px; height:400px; margin: 0 auto 20px;"></div>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
// 页面加载时初始化图表
|
||||
$(document).ready(function() {
|
||||
|
||||
// 加载初始数据
|
||||
loadChartData();
|
||||
|
||||
// 绑定按钮点击事件
|
||||
$('#submitBtn').click(function(e) {
|
||||
e.preventDefault(); // 阻止表单提交刷新页面
|
||||
loadChartData();
|
||||
});
|
||||
});
|
||||
|
||||
// 加载图表数据的函数
|
||||
function loadChartData() {
|
||||
// 显示加载动画
|
||||
$('#loadingOverlay').addClass('active');
|
||||
|
||||
let t_start = $('#t_start').val();
|
||||
let t_end = $('#t_end').val();
|
||||
let ts_code = $("#ts_code").val();
|
||||
|
||||
url = "https://api.doorcome.cn/api/stockparam/?tscode="+ts_code;
|
||||
url += "&start_date="+t_start+"&end_date="+t_end;
|
||||
url2 = "https://api.doorcome.cn/api/stockinfo/?tscode="+ts_code;
|
||||
Promise.all([
|
||||
fetch(url),
|
||||
fetch(url2)
|
||||
])
|
||||
.then(responses => Promise.all(responses.map(r => r.json())))
|
||||
.then(([parsedData,stockInfo]) => {
|
||||
// 图表配置:pe_ttm
|
||||
let codeName = stockInfo[0].name;
|
||||
var params = {};
|
||||
params.chartid='pe_ttm';
|
||||
params.legend = [codeName,'pe_ttm'];
|
||||
params.text = params.legend[0]+' V.S '+params.legend[1];
|
||||
params.data1 = pickData(parsedData, 'trade_date', 'close');
|
||||
params.data2 = pickData(parsedData, 'trade_date', 'pe_ttm')
|
||||
dataCal = calculateStats(params.data2);
|
||||
params.sub_text = "TTM PE Max:"+dataCal['max'];
|
||||
params.sub_text += ", Min:"+dataCal['min'];
|
||||
params.sub_text += ", Average:"+dataCal['avg'];
|
||||
params.sub_text += ", Recent:"+dataCal['last'];
|
||||
doubleLineChart(params);
|
||||
// 图表配置:pb
|
||||
params = {};
|
||||
params.chartid='pb';
|
||||
params.legend = [codeName,'市净率'];
|
||||
params.text = params.legend[0]+' V.S '+params.legend[1];
|
||||
params.data1 = pickData(parsedData, 'trade_date', 'close');
|
||||
params.data2 = pickData(parsedData, 'trade_date', 'pb')
|
||||
dataCal = calculateStats(params.data2);
|
||||
params.sub_text = "PB Max:"+dataCal['max'];
|
||||
params.sub_text += ", Min:"+dataCal['min'];
|
||||
params.sub_text += ", Average:"+dataCal['avg'];
|
||||
params.sub_text += ", Recent:"+dataCal['last'];
|
||||
doubleLineChart(params);
|
||||
|
||||
// 图表配置:ps
|
||||
params = {};
|
||||
params.chartid='ps';
|
||||
params.legend = [codeName,'市销率'];
|
||||
params.text = params.legend[0]+' V.S '+params.legend[1];
|
||||
params.data1 = pickData(parsedData, 'trade_date', 'close');
|
||||
params.data2 = pickData(parsedData, 'trade_date', 'ps')
|
||||
dataCal = calculateStats(params.data2);
|
||||
params.sub_text = "PS Max:"+dataCal['max'];
|
||||
params.sub_text += ", Min:"+dataCal['min'];
|
||||
params.sub_text += ", Average:"+dataCal['avg'];
|
||||
params.sub_text += ", Recent:"+dataCal['last'];
|
||||
doubleLineChart(params);
|
||||
|
||||
// 图表配置:total_mv
|
||||
params = {};
|
||||
params.chartid='total_mv';
|
||||
params.legend = [codeName,'总市值-亿'];
|
||||
params.text = params.legend[0]+' V.S '+params.legend[1];
|
||||
params.data1 = pickData(parsedData, 'trade_date', 'close');
|
||||
params.data2 = pickData(parsedData, 'trade_date', 'total_mv')
|
||||
params.data2 = params.data2.map(item => {
|
||||
return {
|
||||
value: [
|
||||
item.value[0],
|
||||
parseFloat((parseFloat(item.value[1]) / 10000).toFixed(2))
|
||||
]
|
||||
};
|
||||
});
|
||||
dataCal = calculateStats(params.data2);
|
||||
params.sub_text = "总市值 Max:"+dataCal['max'];
|
||||
params.sub_text += ", Min:"+dataCal['min'];
|
||||
params.sub_text += ", Average:"+dataCal['avg'];
|
||||
params.sub_text += ", Recent:"+dataCal['last'];
|
||||
doubleLineChart(params);
|
||||
})
|
||||
.catch(error => console.error('数据加载失败:', error))
|
||||
.finally(() => {
|
||||
// 隐藏加载动画
|
||||
$('#loadingOverlay').removeClass('active');
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
</div>
|
||||
<?php include_once "../html/footer.php"; ?>
|
||||
|
||||
<?php
|
||||
ini_set("display_errors","0");
|
||||
include_once "../inc/getBasic.inc.php";
|
||||
$_REQUEST['ts_code']=$_REQUEST['ts_code']?$_REQUEST['ts_code']:'000001';
|
||||
$_REQUEST['t_start']=$_REQUEST['t_start']?$_REQUEST['t_start']:'2015-01-01';
|
||||
$_REQUEST['t_end']=$_REQUEST['t_end']?$_REQUEST['t_end']:'';
|
||||
$ts_name = tscodeToName(ts_code_conv($_REQUEST['ts_code']));
|
||||
$title="股价VS PE/PB/PS 趋势:".$ts_name.'('.$_REQUEST['ts_code'].')';
|
||||
include_once "../html/head.php";
|
||||
?>
|
||||
<script src="../js/renderCharts.js"></script>
|
||||
<form name="main" id="main" method="get"> <div style="width:100%;text-align:center">
|
||||
股票代码: <input type='text' name='ts_code' id='ts_code' width="30px" value='<?=$_REQUEST['ts_code']?>' >
|
||||
开始时间: <input type='date' name='t_start' id='t_start' width='30px' value='<?=$_REQUEST['t_start']?>' >
|
||||
结束时间: <input type='date' name='t_end' id='t_end' width='30px' value='<?=$_REQUEST['t_end']?>' >
|
||||
<button id="submitBtn" class="btn-submit"><span>查询数据</span></button>
|
||||
<div > </div>
|
||||
<input type='checkbox' id='cb_pe' onclick="hideSwitch(this.id,'pe_ttm')" checked> PE_TTM 市盈率
|
||||
<input type='checkbox' id='cb_pb' onclick="hideSwitch(this.id,'pb')" checked> PB 市净率
|
||||
<input type='checkbox' id='cb_ps' onclick="hideSwitch(this.id,'ps')" checked> PS 市销率
|
||||
<input type='checkbox' id='cb_ttmv' onclick="hideSwitch(this.id,'total_mv')" checked> 总市值
|
||||
|
||||
</div> </form>
|
||||
|
||||
<!-- 图表容器 -->
|
||||
<div id="container" style="width: 1000px; margin: 0 auto 20px;">
|
||||
<div style="position: relative; height: 10px;"></div>
|
||||
<div class="loading-overlay" id="loadingOverlay">
|
||||
<div class="spinner"></div>
|
||||
<p style="font-size:18px; color:#2c3e50;">正在加载数据,请稍候...</p>
|
||||
</div>
|
||||
<div id="pe_ttm" style="width: 1000px; height:400px; margin: 0 auto 20px;"></div>
|
||||
<div id="pb" style="width: 1000px; height:400px; margin: 0 auto 20px;"></div>
|
||||
<div id="ps" style="width: 1000px; height:400px; margin: 0 auto 20px;"></div>
|
||||
<div id="total_mv" style="width: 1000px; height:400px; margin: 0 auto 20px;"></div>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
// 页面加载时初始化图表
|
||||
$(document).ready(function() {
|
||||
|
||||
// 加载初始数据
|
||||
loadChartData();
|
||||
|
||||
// 绑定按钮点击事件
|
||||
$('#submitBtn').click(function(e) {
|
||||
e.preventDefault(); // 阻止表单提交刷新页面
|
||||
loadChartData();
|
||||
});
|
||||
});
|
||||
|
||||
// 加载图表数据的函数
|
||||
function loadChartData() {
|
||||
// 显示加载动画
|
||||
$('#loadingOverlay').addClass('active');
|
||||
|
||||
let t_start = $('#t_start').val();
|
||||
let t_end = $('#t_end').val();
|
||||
let ts_code = $("#ts_code").val();
|
||||
|
||||
url = "https://api.doorcome.cn/api/stockparam/?tscode="+ts_code;
|
||||
url += "&start_date="+t_start+"&end_date="+t_end;
|
||||
url2 = "https://api.doorcome.cn/api/stockinfo/?tscode="+ts_code;
|
||||
Promise.all([
|
||||
fetch(url),
|
||||
fetch(url2)
|
||||
])
|
||||
.then(responses => Promise.all(responses.map(r => r.json())))
|
||||
.then(([parsedData,stockInfo]) => {
|
||||
// 图表配置:pe_ttm
|
||||
let codeName = stockInfo[0].name;
|
||||
var params = {};
|
||||
params.chartid='pe_ttm';
|
||||
params.legend = [codeName,'pe_ttm'];
|
||||
params.text = params.legend[0]+' V.S '+params.legend[1];
|
||||
params.data1 = pickData(parsedData, 'trade_date', 'close');
|
||||
params.data2 = pickData(parsedData, 'trade_date', 'pe_ttm')
|
||||
dataCal = calculateStats(params.data2);
|
||||
params.sub_text = "TTM PE Max:"+dataCal['max'];
|
||||
params.sub_text += ", Min:"+dataCal['min'];
|
||||
params.sub_text += ", Average:"+dataCal['avg'];
|
||||
params.sub_text += ", Recent:"+dataCal['last'];
|
||||
doubleLineChart(params);
|
||||
// 图表配置:pb
|
||||
params = {};
|
||||
params.chartid='pb';
|
||||
params.legend = [codeName,'市净率'];
|
||||
params.text = params.legend[0]+' V.S '+params.legend[1];
|
||||
params.data1 = pickData(parsedData, 'trade_date', 'close');
|
||||
params.data2 = pickData(parsedData, 'trade_date', 'pb')
|
||||
dataCal = calculateStats(params.data2);
|
||||
params.sub_text = "PB Max:"+dataCal['max'];
|
||||
params.sub_text += ", Min:"+dataCal['min'];
|
||||
params.sub_text += ", Average:"+dataCal['avg'];
|
||||
params.sub_text += ", Recent:"+dataCal['last'];
|
||||
doubleLineChart(params);
|
||||
|
||||
// 图表配置:ps
|
||||
params = {};
|
||||
params.chartid='ps';
|
||||
params.legend = [codeName,'市销率'];
|
||||
params.text = params.legend[0]+' V.S '+params.legend[1];
|
||||
params.data1 = pickData(parsedData, 'trade_date', 'close');
|
||||
params.data2 = pickData(parsedData, 'trade_date', 'ps')
|
||||
dataCal = calculateStats(params.data2);
|
||||
params.sub_text = "PS Max:"+dataCal['max'];
|
||||
params.sub_text += ", Min:"+dataCal['min'];
|
||||
params.sub_text += ", Average:"+dataCal['avg'];
|
||||
params.sub_text += ", Recent:"+dataCal['last'];
|
||||
doubleLineChart(params);
|
||||
|
||||
// 图表配置:total_mv
|
||||
params = {};
|
||||
params.chartid='total_mv';
|
||||
params.legend = [codeName,'总市值-亿'];
|
||||
params.text = params.legend[0]+' V.S '+params.legend[1];
|
||||
params.data1 = pickData(parsedData, 'trade_date', 'close');
|
||||
params.data2 = pickData(parsedData, 'trade_date', 'total_mv')
|
||||
params.data2 = params.data2.map(item => {
|
||||
return {
|
||||
value: [
|
||||
item.value[0],
|
||||
parseFloat((parseFloat(item.value[1]) / 10000).toFixed(2))
|
||||
]
|
||||
};
|
||||
});
|
||||
dataCal = calculateStats(params.data2);
|
||||
params.sub_text = "总市值 Max:"+dataCal['max'];
|
||||
params.sub_text += ", Min:"+dataCal['min'];
|
||||
params.sub_text += ", Average:"+dataCal['avg'];
|
||||
params.sub_text += ", Recent:"+dataCal['last'];
|
||||
doubleLineChart(params);
|
||||
})
|
||||
.catch(error => console.error('数据加载失败:', error))
|
||||
.finally(() => {
|
||||
// 隐藏加载动画
|
||||
$('#loadingOverlay').removeClass('active');
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
</div>
|
||||
<?php include_once "../html/footer.php"; ?>
|
||||
|
||||
|
||||
+123
-123
@@ -1,123 +1,123 @@
|
||||
<?php
|
||||
include_once "../inc/getBasic.inc.php";
|
||||
$_REQUEST['ts_code']=$_REQUEST['ts_code']?$_REQUEST['ts_code']:'000001';
|
||||
$_REQUEST['t_start']=$_REQUEST['t_start']?$_REQUEST['t_start']:'2020-01-01';
|
||||
$_REQUEST['t_end']=$_REQUEST['t_end']?$_REQUEST['t_end']:date('Y-m-d');
|
||||
$ts_name = tscodeToName(ts_code_conv($_REQUEST['ts_code']));
|
||||
$title="股息率趋势:".$ts_name.'('.$_REQUEST['ts_code'].')';
|
||||
include_once "../html/head.php";
|
||||
?>
|
||||
<script src="../js/renderCharts.js?version=1.0"></script>
|
||||
<form name="main" id="main" method="get"> <div style="width:100%;text-align:center">
|
||||
股票代码: <input type='text' name='ts_code' id='ts_code' width="30px" value='<?=$_REQUEST['ts_code']?>' >
|
||||
开始时间: <input type='date' name='t_start' id='t_start' width='30px' value='<?=$_REQUEST['t_start']?>' >
|
||||
结束时间: <input type='date' name='t_end' id='t_end' width='30px' value='<?=$_REQUEST['t_end']?>' >
|
||||
<button id="submitBtn" class="btn-submit"><span>查询数据</span></button>
|
||||
<div > </div>
|
||||
|
||||
</div> </form>
|
||||
<div style="margin:0 auto;clear:both;left:100px;width:1000px;height:30px;text-align:left"><span style="color:grey">股息率=100*TTM每股派息/股价。如:股息率=3表示每股派息3%</span></div>
|
||||
<!-- 图表容器 -->
|
||||
<div id="container" style="width: 1000px;height:400px; margin: 0 auto 20px;">
|
||||
<div class="loading-overlay" id="loadingOverlay">
|
||||
<div class="spinner"></div>
|
||||
<p style="font-size:18px; color:#2c3e50;">正在加载数据,请稍候...</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
// 页面加载时初始化图表
|
||||
$(document).ready(function() {
|
||||
|
||||
// 加载初始数据
|
||||
loadChartData();
|
||||
|
||||
// 绑定按钮点击事件
|
||||
$('#submitBtn').click(function(e) {
|
||||
//e.preventDefault(); // 阻止表单提交刷新页面
|
||||
$('#loadingOverlay').addClass('active');
|
||||
loadChartData();
|
||||
$('#loadingOverlay').removeClass('active');
|
||||
});
|
||||
});
|
||||
|
||||
// 加载图表数据的函数
|
||||
function loadChartData() {
|
||||
// 显示加载动画
|
||||
$('#loadingOverlay').addClass('active');
|
||||
|
||||
let t_start = $('#t_start').val();
|
||||
let t_end = $('#t_end').val();
|
||||
let ts_code = $("#ts_code").val();
|
||||
|
||||
url = "https://api.doorcome.cn/api/getdiv/?tscode="+ts_code;
|
||||
url += "&start_date="+t_start+"&end_date="+t_end;
|
||||
Promise.all([
|
||||
fetch(url)
|
||||
])
|
||||
.then(responses => Promise.all(responses.map(r => r.json())))
|
||||
.then(([parsedData]) => {
|
||||
var params = {};
|
||||
params.chartid='container';
|
||||
params.legend = [ts_code,'股息率','每股股息'];
|
||||
params.text = params.legend[0]+' V.S '+params.legend[1];
|
||||
params.data1 = pickData(parsedData, 'trade_date', 'close');
|
||||
params.data2 = pickData(parsedData, 'trade_date', 'div_yield');
|
||||
params.data3 = pickData(parsedData, 'trade_date', 'cash_div_tax',fixed=3);
|
||||
params.data3 = params.data3.map(item => {
|
||||
let value = item.value[1];
|
||||
// 将字符串转为数字,并判断是否等于 0
|
||||
if (parseFloat(value) === 0) {
|
||||
return [item[0], null];
|
||||
} else {
|
||||
return item; // 非零值保持不变
|
||||
}
|
||||
});
|
||||
console.log(params.data3);
|
||||
dataCal = calculateStats(params.data2);
|
||||
params.sub_text = "TTM 股息 Max:"+dataCal['max'];
|
||||
params.sub_text += ", Min:"+dataCal['min'];
|
||||
params.sub_text += ", Average:"+dataCal['avg'];
|
||||
params.sub_text += ", Recent:"+dataCal['last'];
|
||||
var myChart = doubleLineChart(params);
|
||||
// 👇 动态添加第三条线,使用副Y轴(yAxisIndex: 1)
|
||||
myChart.setOption({
|
||||
yAxis: [
|
||||
{ // 主Y轴配置
|
||||
type: 'value'
|
||||
},
|
||||
{ // 副Y轴配置
|
||||
type: 'value',
|
||||
name: '股息率/股息',
|
||||
position: 'right'
|
||||
}
|
||||
],
|
||||
series: [
|
||||
// 前两个 series 保持不变(ECharts 会合并)
|
||||
{}, // 占位:对应第一个 series
|
||||
{}, // 占位:对应第二个 series
|
||||
{
|
||||
name: '每股股息',
|
||||
type: 'scatter',
|
||||
yAxisIndex:1,
|
||||
symbolSize: 10,
|
||||
smooth:false,
|
||||
data:params.data3
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
})
|
||||
.catch(error => console.error('数据加载失败:', error))
|
||||
.finally(() => {
|
||||
// 隐藏加载动画
|
||||
$('#loadingOverlay').removeClass('active');
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
</div>
|
||||
<?php include_once "../html/footer.php"; ?>
|
||||
|
||||
<?php
|
||||
include_once "../inc/getBasic.inc.php";
|
||||
$_REQUEST['ts_code']=$_REQUEST['ts_code']?$_REQUEST['ts_code']:'000001';
|
||||
$_REQUEST['t_start']=$_REQUEST['t_start']?$_REQUEST['t_start']:'2020-01-01';
|
||||
$_REQUEST['t_end']=$_REQUEST['t_end']?$_REQUEST['t_end']:date('Y-m-d');
|
||||
$ts_name = tscodeToName(ts_code_conv($_REQUEST['ts_code']));
|
||||
$title="股息率趋势:".$ts_name.'('.$_REQUEST['ts_code'].')';
|
||||
include_once "../html/head.php";
|
||||
?>
|
||||
<script src="../js/renderCharts.js?version=1.0"></script>
|
||||
<form name="main" id="main" method="get"> <div style="width:100%;text-align:center">
|
||||
股票代码: <input type='text' name='ts_code' id='ts_code' width="30px" value='<?=$_REQUEST['ts_code']?>' >
|
||||
开始时间: <input type='date' name='t_start' id='t_start' width='30px' value='<?=$_REQUEST['t_start']?>' >
|
||||
结束时间: <input type='date' name='t_end' id='t_end' width='30px' value='<?=$_REQUEST['t_end']?>' >
|
||||
<button id="submitBtn" class="btn-submit"><span>查询数据</span></button>
|
||||
<div > </div>
|
||||
|
||||
</div> </form>
|
||||
<div style="margin:0 auto;clear:both;left:100px;width:1000px;height:30px;text-align:left"><span style="color:grey">股息率=100*TTM每股派息/股价。如:股息率=3表示每股派息3%</span></div>
|
||||
<!-- 图表容器 -->
|
||||
<div id="container" style="width: 1000px;height:400px; margin: 0 auto 20px;">
|
||||
<div class="loading-overlay" id="loadingOverlay">
|
||||
<div class="spinner"></div>
|
||||
<p style="font-size:18px; color:#2c3e50;">正在加载数据,请稍候...</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
// 页面加载时初始化图表
|
||||
$(document).ready(function() {
|
||||
|
||||
// 加载初始数据
|
||||
loadChartData();
|
||||
|
||||
// 绑定按钮点击事件
|
||||
$('#submitBtn').click(function(e) {
|
||||
//e.preventDefault(); // 阻止表单提交刷新页面
|
||||
$('#loadingOverlay').addClass('active');
|
||||
loadChartData();
|
||||
$('#loadingOverlay').removeClass('active');
|
||||
});
|
||||
});
|
||||
|
||||
// 加载图表数据的函数
|
||||
function loadChartData() {
|
||||
// 显示加载动画
|
||||
$('#loadingOverlay').addClass('active');
|
||||
|
||||
let t_start = $('#t_start').val();
|
||||
let t_end = $('#t_end').val();
|
||||
let ts_code = $("#ts_code").val();
|
||||
|
||||
url = "https://api.doorcome.cn/api/getdiv/?tscode="+ts_code;
|
||||
url += "&start_date="+t_start+"&end_date="+t_end;
|
||||
Promise.all([
|
||||
fetch(url)
|
||||
])
|
||||
.then(responses => Promise.all(responses.map(r => r.json())))
|
||||
.then(([parsedData]) => {
|
||||
var params = {};
|
||||
params.chartid='container';
|
||||
params.legend = [ts_code,'股息率','每股股息'];
|
||||
params.text = params.legend[0]+' V.S '+params.legend[1];
|
||||
params.data1 = pickData(parsedData, 'trade_date', 'close');
|
||||
params.data2 = pickData(parsedData, 'trade_date', 'div_yield');
|
||||
params.data3 = pickData(parsedData, 'trade_date', 'cash_div_tax',fixed=3);
|
||||
params.data3 = params.data3.map(item => {
|
||||
let value = item.value[1];
|
||||
// 将字符串转为数字,并判断是否等于 0
|
||||
if (parseFloat(value) === 0) {
|
||||
return [item[0], null];
|
||||
} else {
|
||||
return item; // 非零值保持不变
|
||||
}
|
||||
});
|
||||
console.log(params.data3);
|
||||
dataCal = calculateStats(params.data2);
|
||||
params.sub_text = "TTM 股息 Max:"+dataCal['max'];
|
||||
params.sub_text += ", Min:"+dataCal['min'];
|
||||
params.sub_text += ", Average:"+dataCal['avg'];
|
||||
params.sub_text += ", Recent:"+dataCal['last'];
|
||||
var myChart = doubleLineChart(params);
|
||||
// 👇 动态添加第三条线,使用副Y轴(yAxisIndex: 1)
|
||||
myChart.setOption({
|
||||
yAxis: [
|
||||
{ // 主Y轴配置
|
||||
type: 'value'
|
||||
},
|
||||
{ // 副Y轴配置
|
||||
type: 'value',
|
||||
name: '股息率/股息',
|
||||
position: 'right'
|
||||
}
|
||||
],
|
||||
series: [
|
||||
// 前两个 series 保持不变(ECharts 会合并)
|
||||
{}, // 占位:对应第一个 series
|
||||
{}, // 占位:对应第二个 series
|
||||
{
|
||||
name: '每股股息',
|
||||
type: 'scatter',
|
||||
yAxisIndex:1,
|
||||
symbolSize: 10,
|
||||
smooth:false,
|
||||
data:params.data3
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
})
|
||||
.catch(error => console.error('数据加载失败:', error))
|
||||
.finally(() => {
|
||||
// 隐藏加载动画
|
||||
$('#loadingOverlay').removeClass('active');
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
</div>
|
||||
<?php include_once "../html/footer.php"; ?>
|
||||
|
||||
|
||||
+91
-91
@@ -1,91 +1,91 @@
|
||||
<?php
|
||||
include_once "../inc/getBasic.inc.php";
|
||||
$_REQUEST['ts_code']=$_REQUEST['ts_code']?$_REQUEST['ts_code']:'000001';
|
||||
$_REQUEST['t_start']=$_REQUEST['t_start']?$_REQUEST['t_start']:'2020-01-01';
|
||||
$_REQUEST['t_end']=$_REQUEST['t_end']?$_REQUEST['t_end']:date('Y-m-d');
|
||||
$ts_name = tscodeToName(ts_code_conv($_REQUEST['ts_code']));
|
||||
$title="股价VS EP趋势:".$ts_name.'('.$_REQUEST['ts_code'].')';
|
||||
include_once "../html/head.php";
|
||||
?>
|
||||
<script src="../js/renderCharts.js"></script>
|
||||
<form name="main" id="main" method="get"> <div style="width:100%;text-align:center">
|
||||
股票代码: <input type='text' name='ts_code' id='ts_code' width="30px" value='<?=$_REQUEST['ts_code']?>' >
|
||||
开始时间: <input type='date' name='t_start' id='t_start' width='30px' value='<?=$_REQUEST['t_start']?>' >
|
||||
结束时间: <input type='date' name='t_end' id='t_end' width='30px' value='<?=$_REQUEST['t_end']?>' >
|
||||
<button id="submitBtn" class="btn-submit"><span>查询数据</span></button>
|
||||
<div > </div>
|
||||
|
||||
</div> </form>
|
||||
<div style="margin:0 auto;clear:both;left:100px;width:1000px;height:30px;text-align:left"><span style="color:grey">EP=100*TTM每股收益/股价。如:EP=5表示每股收益率5%</span></div>
|
||||
<!-- 图表容器 -->
|
||||
<div id="container" style="width: 1000px;height:400px; margin: 0 auto 20px;">
|
||||
<div class="loading-overlay" id="loadingOverlay">
|
||||
<div class="spinner"></div>
|
||||
<p style="font-size:18px; color:#2c3e50;">正在加载数据,请稍候...</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
// 页面加载时初始化图表
|
||||
$(document).ready(function() {
|
||||
|
||||
// 加载初始数据
|
||||
loadChartData();
|
||||
|
||||
// 绑定按钮点击事件
|
||||
$('#submitBtn').click(function(e) {
|
||||
//e.preventDefault(); // 阻止表单提交刷新页面
|
||||
$('#loadingOverlay').addClass('active');
|
||||
loadChartData();
|
||||
$('#loadingOverlay').removeClass('active');
|
||||
});
|
||||
});
|
||||
|
||||
// 加载图表数据的函数
|
||||
function loadChartData() {
|
||||
// 显示加载动画
|
||||
$('#loadingOverlay').addClass('active');
|
||||
|
||||
let t_start = $('#t_start').val();
|
||||
let t_end = $('#t_end').val();
|
||||
let ts_code = $("#ts_code").val();
|
||||
|
||||
url = "https://api.doorcome.cn/api/stockep/?tscode="+ts_code;
|
||||
url += "&start_date="+t_start+"&end_date="+t_end;
|
||||
url2 = "https://api.doorcome.cn/api/stockinfo/?tscode="+ts_code;
|
||||
Promise.all([
|
||||
fetch(url),
|
||||
fetch(url2)
|
||||
])
|
||||
.then(responses => Promise.all(responses.map(r => r.json())))
|
||||
.then(([parsedData,stockInfo]) => {
|
||||
// 图表配置:pe_ttm
|
||||
let codeName = stockInfo[0].name;
|
||||
var params = {};
|
||||
params.chartid='container';
|
||||
params.legend = [codeName,'EP'];
|
||||
params.text = params.legend[0]+' V.S '+params.legend[1];
|
||||
params.data1 = pickData(parsedData, 'trade_date', 'close');
|
||||
params.data2 = pickData(parsedData, 'trade_date', 'basic_ep_ttm');
|
||||
dataCal = calculateStats(params.data2);
|
||||
params.sub_text = "TTM EP Max:"+dataCal['max'];
|
||||
params.sub_text += ", Min:"+dataCal['min'];
|
||||
params.sub_text += ", Average:"+dataCal['avg'];
|
||||
params.sub_text += ", Recent:"+dataCal['last'];
|
||||
doubleLineChart(params);
|
||||
|
||||
})
|
||||
.catch(error => console.error('数据加载失败:', error))
|
||||
.finally(() => {
|
||||
// 隐藏加载动画
|
||||
$('#loadingOverlay').removeClass('active');
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
</div>
|
||||
<?php include_once "../html/footer.php"; ?>
|
||||
|
||||
<?php
|
||||
include_once "../inc/getBasic.inc.php";
|
||||
$_REQUEST['ts_code']=$_REQUEST['ts_code']?$_REQUEST['ts_code']:'000001';
|
||||
$_REQUEST['t_start']=$_REQUEST['t_start']?$_REQUEST['t_start']:'2020-01-01';
|
||||
$_REQUEST['t_end']=$_REQUEST['t_end']?$_REQUEST['t_end']:date('Y-m-d');
|
||||
$ts_name = tscodeToName(ts_code_conv($_REQUEST['ts_code']));
|
||||
$title="股价VS EP趋势:".$ts_name.'('.$_REQUEST['ts_code'].')';
|
||||
include_once "../html/head.php";
|
||||
?>
|
||||
<script src="../js/renderCharts.js"></script>
|
||||
<form name="main" id="main" method="get"> <div style="width:100%;text-align:center">
|
||||
股票代码: <input type='text' name='ts_code' id='ts_code' width="30px" value='<?=$_REQUEST['ts_code']?>' >
|
||||
开始时间: <input type='date' name='t_start' id='t_start' width='30px' value='<?=$_REQUEST['t_start']?>' >
|
||||
结束时间: <input type='date' name='t_end' id='t_end' width='30px' value='<?=$_REQUEST['t_end']?>' >
|
||||
<button id="submitBtn" class="btn-submit"><span>查询数据</span></button>
|
||||
<div > </div>
|
||||
|
||||
</div> </form>
|
||||
<div style="margin:0 auto;clear:both;left:100px;width:1000px;height:30px;text-align:left"><span style="color:grey">EP=100*TTM每股收益/股价。如:EP=5表示每股收益率5%</span></div>
|
||||
<!-- 图表容器 -->
|
||||
<div id="container" style="width: 1000px;height:400px; margin: 0 auto 20px;">
|
||||
<div class="loading-overlay" id="loadingOverlay">
|
||||
<div class="spinner"></div>
|
||||
<p style="font-size:18px; color:#2c3e50;">正在加载数据,请稍候...</p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<script>
|
||||
// 页面加载时初始化图表
|
||||
$(document).ready(function() {
|
||||
|
||||
// 加载初始数据
|
||||
loadChartData();
|
||||
|
||||
// 绑定按钮点击事件
|
||||
$('#submitBtn').click(function(e) {
|
||||
//e.preventDefault(); // 阻止表单提交刷新页面
|
||||
$('#loadingOverlay').addClass('active');
|
||||
loadChartData();
|
||||
$('#loadingOverlay').removeClass('active');
|
||||
});
|
||||
});
|
||||
|
||||
// 加载图表数据的函数
|
||||
function loadChartData() {
|
||||
// 显示加载动画
|
||||
$('#loadingOverlay').addClass('active');
|
||||
|
||||
let t_start = $('#t_start').val();
|
||||
let t_end = $('#t_end').val();
|
||||
let ts_code = $("#ts_code").val();
|
||||
|
||||
url = "https://api.doorcome.cn/api/stockep/?tscode="+ts_code;
|
||||
url += "&start_date="+t_start+"&end_date="+t_end;
|
||||
url2 = "https://api.doorcome.cn/api/stockinfo/?tscode="+ts_code;
|
||||
Promise.all([
|
||||
fetch(url),
|
||||
fetch(url2)
|
||||
])
|
||||
.then(responses => Promise.all(responses.map(r => r.json())))
|
||||
.then(([parsedData,stockInfo]) => {
|
||||
// 图表配置:pe_ttm
|
||||
let codeName = stockInfo[0].name;
|
||||
var params = {};
|
||||
params.chartid='container';
|
||||
params.legend = [codeName,'EP'];
|
||||
params.text = params.legend[0]+' V.S '+params.legend[1];
|
||||
params.data1 = pickData(parsedData, 'trade_date', 'close');
|
||||
params.data2 = pickData(parsedData, 'trade_date', 'basic_ep_ttm');
|
||||
dataCal = calculateStats(params.data2);
|
||||
params.sub_text = "TTM EP Max:"+dataCal['max'];
|
||||
params.sub_text += ", Min:"+dataCal['min'];
|
||||
params.sub_text += ", Average:"+dataCal['avg'];
|
||||
params.sub_text += ", Recent:"+dataCal['last'];
|
||||
doubleLineChart(params);
|
||||
|
||||
})
|
||||
.catch(error => console.error('数据加载失败:', error))
|
||||
.finally(() => {
|
||||
// 隐藏加载动画
|
||||
$('#loadingOverlay').removeClass('active');
|
||||
});
|
||||
}
|
||||
</script>
|
||||
|
||||
</div>
|
||||
<?php include_once "../html/footer.php"; ?>
|
||||
|
||||
|
||||
+84
-84
@@ -1,84 +1,84 @@
|
||||
<?php
|
||||
include_once "../inc/getBasic.inc.php";
|
||||
include_once "../inc/getData.inc.php";
|
||||
include_once "../inc/postJson.inc.php";
|
||||
include_once "../inc/getFinanceData.class.php";
|
||||
|
||||
$_REQUEST['ts_code']=$_REQUEST['ts_code']?$_REQUEST['ts_code']:'000002';
|
||||
$_REQUEST['yst']=$_REQUEST['yst']?$_REQUEST['yst']:'2015';
|
||||
$_REQUEST['yed']=$_REQUEST['yed']?$_REQUEST['yed']:date('Y');
|
||||
$ts_name = tscodeToName(ts_code_conv($_REQUEST['ts_code']));
|
||||
$title="六段式表格:".$ts_name.'('.$_REQUEST['ts_code'].')';
|
||||
$years=yearList($_REQUEST['yst'],$_REQUEST['yed']);
|
||||
$thWidth = round(1/(count($years)+1)*100,1);
|
||||
$thWidth .='%';
|
||||
$urlAppend="ts_code={$_REQUEST['ts_code']}&yst={$_REQUEST['yst']}&yed={$_REQUEST['yed']}";
|
||||
|
||||
include_once "../html/head.php";
|
||||
?>
|
||||
|
||||
|
||||
<form name="main" id="main" method="get"> <div style="width:100%;text-align:center">
|
||||
|
||||
股票代码: <input type='text' name='ts_code' id='ts_code' width="30px" value='<?=$_REQUEST['ts_code']?>' >
|
||||
开始时间: <input type='input' name='yst' id='yst' width='20px' list='yearlist' autocomplete="off" >
|
||||
<datalist id="yearlist">
|
||||
<option value="2022"></option>
|
||||
<option value="2021"></option>
|
||||
<option value="2020"></option>
|
||||
<option value="2019"></option>
|
||||
<option value="2018"></option>
|
||||
<option value="2017"></option>
|
||||
<option value="2016"></option>
|
||||
<option value="2015"></option>
|
||||
</datalist>
|
||||
|
||||
结束时间: <input type='input' name='yed' id='yed' width='20px'list='yearlist' autocomplete="off" >
|
||||
|
||||
<script>
|
||||
$("#yst").val('<?=$_REQUEST['yst']?>');
|
||||
$("#yed").val('<?=$_REQUEST['yed']?>');
|
||||
</script>
|
||||
<input type='submit' value="给我查!">
|
||||
|
||||
<div > </div>
|
||||
|
||||
</div> </form>
|
||||
|
||||
<div id="container" style="margin:0 auto;height:auto;width: 90%">
|
||||
<table id="fina" class="display" style="width: 100%">
|
||||
<thead>
|
||||
<tr>
|
||||
<th> </th>
|
||||
<?php
|
||||
for($i=0;$i<count($years);$i++) echo "<th style='width:{$thWidth};text-align: left;'> ".yearToname($years[$i])."</th>\n";
|
||||
?>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<th> </th>
|
||||
<?php
|
||||
for($i=0;$i<count($years);$i++) echo "<th style='width:{$thWidth};text-align: left;'> ".yearToname($years[$i])."</th>\n";
|
||||
?>
|
||||
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
<?php include_once "../html/footer.php"; ?>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('#fina').DataTable( {
|
||||
paging:false,
|
||||
scrollY:950,
|
||||
ordering:false,
|
||||
"ajax": 'https://echart.doorcome.cn/inc/ajax.inc.php?t=financeData&<?=$urlAppend?>'
|
||||
|
||||
} );
|
||||
} );
|
||||
</script>
|
||||
|
||||
<?php
|
||||
include_once "../inc/getBasic.inc.php";
|
||||
include_once "../inc/getData.inc.php";
|
||||
include_once "../inc/postJson.inc.php";
|
||||
include_once "../inc/getFinanceData.class.php";
|
||||
|
||||
$_REQUEST['ts_code']=$_REQUEST['ts_code']?$_REQUEST['ts_code']:'000002';
|
||||
$_REQUEST['yst']=$_REQUEST['yst']?$_REQUEST['yst']:'2015';
|
||||
$_REQUEST['yed']=$_REQUEST['yed']?$_REQUEST['yed']:date('Y');
|
||||
$ts_name = tscodeToName(ts_code_conv($_REQUEST['ts_code']));
|
||||
$title="六段式表格:".$ts_name.'('.$_REQUEST['ts_code'].')';
|
||||
$years=yearList($_REQUEST['yst'],$_REQUEST['yed']);
|
||||
$thWidth = round(1/(count($years)+1)*100,1);
|
||||
$thWidth .='%';
|
||||
$urlAppend="ts_code={$_REQUEST['ts_code']}&yst={$_REQUEST['yst']}&yed={$_REQUEST['yed']}";
|
||||
|
||||
include_once "../html/head.php";
|
||||
?>
|
||||
|
||||
|
||||
<form name="main" id="main" method="get"> <div style="width:100%;text-align:center">
|
||||
|
||||
股票代码: <input type='text' name='ts_code' id='ts_code' width="30px" value='<?=$_REQUEST['ts_code']?>' >
|
||||
开始时间: <input type='input' name='yst' id='yst' width='20px' list='yearlist' autocomplete="off" >
|
||||
<datalist id="yearlist">
|
||||
<option value="2022"></option>
|
||||
<option value="2021"></option>
|
||||
<option value="2020"></option>
|
||||
<option value="2019"></option>
|
||||
<option value="2018"></option>
|
||||
<option value="2017"></option>
|
||||
<option value="2016"></option>
|
||||
<option value="2015"></option>
|
||||
</datalist>
|
||||
|
||||
结束时间: <input type='input' name='yed' id='yed' width='20px'list='yearlist' autocomplete="off" >
|
||||
|
||||
<script>
|
||||
$("#yst").val('<?=$_REQUEST['yst']?>');
|
||||
$("#yed").val('<?=$_REQUEST['yed']?>');
|
||||
</script>
|
||||
<input type='submit' value="给我查!">
|
||||
|
||||
<div > </div>
|
||||
|
||||
</div> </form>
|
||||
|
||||
<div id="container" style="margin:0 auto;height:auto;width: 90%">
|
||||
<table id="fina" class="display" style="width: 100%">
|
||||
<thead>
|
||||
<tr>
|
||||
<th> </th>
|
||||
<?php
|
||||
for($i=0;$i<count($years);$i++) echo "<th style='width:{$thWidth};text-align: left;'> ".yearToname($years[$i])."</th>\n";
|
||||
?>
|
||||
|
||||
</tr>
|
||||
</thead>
|
||||
<tfoot>
|
||||
<tr>
|
||||
<th> </th>
|
||||
<?php
|
||||
for($i=0;$i<count($years);$i++) echo "<th style='width:{$thWidth};text-align: left;'> ".yearToname($years[$i])."</th>\n";
|
||||
?>
|
||||
|
||||
</tr>
|
||||
</tfoot>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
|
||||
<?php include_once "../html/footer.php"; ?>
|
||||
<script>
|
||||
$(document).ready(function() {
|
||||
$('#fina').DataTable( {
|
||||
paging:false,
|
||||
scrollY:950,
|
||||
ordering:false,
|
||||
"ajax": 'https://echart.doorcome.cn/inc/ajax.inc.php?t=financeData&<?=$urlAppend?>'
|
||||
|
||||
} );
|
||||
} );
|
||||
</script>
|
||||
|
||||
|
||||
+93
-93
@@ -1,93 +1,93 @@
|
||||
<?php
|
||||
include_once "../inc/getBasic.inc.php";
|
||||
$_REQUEST['ts_code']=$_REQUEST['ts_code']?$_REQUEST['ts_code']:'000001';
|
||||
$_REQUEST['t_start']=$_REQUEST['t_start']?$_REQUEST['t_start']:'2015-01-01';
|
||||
$_REQUEST['t_end']=$_REQUEST['t_end']?$_REQUEST['t_end']:date('Y-m-d');
|
||||
$ts_name = tscodeToName(ts_code_conv($_REQUEST['ts_code']));
|
||||
$title="股价VS融资融券余额:".$ts_name.'('.$_REQUEST['ts_code'].')';
|
||||
|
||||
include_once "../html/head.php";
|
||||
?>
|
||||
<script src="../js/renderCharts.js"></script>
|
||||
<form name="main" id="main" method="get"> <div style="width:100%;text-align:center">
|
||||
股票代码: <input type='text' name='ts_code' id='ts_code' width="30px" value='<?=$_REQUEST['ts_code']?>' >
|
||||
开始时间: <input type='date' name='t_start' id='t_start' width='30px' value='<?=$_REQUEST['t_start']?>' >
|
||||
结束时间: <input type='date' name='t_end' id='t_end' width='30px' value='<?=$_REQUEST['t_end']?>' >
|
||||
<button id="submitBtn" class="btn-submit"><span>查询数据</span></button>
|
||||
<div > </div>
|
||||
|
||||
</div> </form>
|
||||
<div > </div>
|
||||
<div id="container" style="margin:0 auto;height: 400px;width: 1000px"></div>
|
||||
<div class="loading-overlay" id="loadingOverlay">
|
||||
<div class="spinner"></div>
|
||||
<p style="font-size:18px; color:#2c3e50;">正在加载数据,请稍候...</p>
|
||||
</div>
|
||||
<script>
|
||||
// 页面加载时初始化图表
|
||||
$(document).ready(function() {
|
||||
|
||||
// 加载初始数据
|
||||
loadChartData();
|
||||
|
||||
// 绑定按钮点击事件
|
||||
$('#submitBtn').click(function(e) {
|
||||
e.preventDefault(); // 阻止表单提交刷新页面
|
||||
loadChartData();
|
||||
});
|
||||
});
|
||||
|
||||
// 加载图表数据的函数
|
||||
function loadChartData() {
|
||||
// 显示加载动画
|
||||
$('#loadingOverlay').addClass('active');
|
||||
let t_start = $('#t_start').val();
|
||||
let t_end = $('#t_end').val();
|
||||
let ts_code = $("#ts_code").val();
|
||||
|
||||
url = "https://api.doorcome.cn/api/stockmargin/?tscode="+ts_code;
|
||||
url += "&start_date="+t_start+"&end_date="+t_end;
|
||||
url1 = "https://api.doorcome.cn/api/stockbasic/?tscode="+ts_code;
|
||||
url1 += "&start_date="+t_start+"&end_date="+t_end;
|
||||
url2 = "https://api.doorcome.cn/api/stockinfo/?tscode="+ts_code;
|
||||
Promise.all([
|
||||
fetch(url),
|
||||
fetch(url1),
|
||||
fetch(url2)
|
||||
])
|
||||
.then(responses => Promise.all(responses.map(r => r.json())))
|
||||
.then(([margindData,dailyData,stockInfo]) => {
|
||||
// 图表配置:pe_ttm
|
||||
let codeName = stockInfo[0].name;
|
||||
var params = {};
|
||||
params.chartid='container';
|
||||
params.legend = ['不复权股价','融资融券余额(亿元)'];
|
||||
params.text = codeName+'('+ts_code+')';
|
||||
params.data1 = pickData(dailyData, 'trade_date', 'close');
|
||||
params.data2 = pickData(margindData, 'trade_date', 'rzrqye');
|
||||
params.data2 = params.data2.map(item => {
|
||||
return {
|
||||
value: [
|
||||
item.value[0],
|
||||
parseFloat((parseFloat(item.value[1]) / 10000 /10000).toFixed(2))
|
||||
]
|
||||
};
|
||||
});
|
||||
dataCal = calculateStats(params.data2);
|
||||
params.sub_text = "TTM PE Max:"+dataCal['max'];
|
||||
params.sub_text += ", Min:"+dataCal['min'];
|
||||
params.sub_text += ", Average:"+dataCal['avg'];
|
||||
params.sub_text += ", Recent:"+dataCal['last'];
|
||||
doubleLineChart(params);
|
||||
})
|
||||
.catch(error => console.error('数据加载失败:', error))
|
||||
.finally(() => {
|
||||
// 隐藏加载动画
|
||||
$('#loadingOverlay').removeClass('active');
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
</script>
|
||||
<?php include_once "../html/footer.php"; ?>
|
||||
|
||||
<?php
|
||||
include_once "../inc/getBasic.inc.php";
|
||||
$_REQUEST['ts_code']=$_REQUEST['ts_code']?$_REQUEST['ts_code']:'000001';
|
||||
$_REQUEST['t_start']=$_REQUEST['t_start']?$_REQUEST['t_start']:'2015-01-01';
|
||||
$_REQUEST['t_end']=$_REQUEST['t_end']?$_REQUEST['t_end']:date('Y-m-d');
|
||||
$ts_name = tscodeToName(ts_code_conv($_REQUEST['ts_code']));
|
||||
$title="股价VS融资融券余额:".$ts_name.'('.$_REQUEST['ts_code'].')';
|
||||
|
||||
include_once "../html/head.php";
|
||||
?>
|
||||
<script src="../js/renderCharts.js"></script>
|
||||
<form name="main" id="main" method="get"> <div style="width:100%;text-align:center">
|
||||
股票代码: <input type='text' name='ts_code' id='ts_code' width="30px" value='<?=$_REQUEST['ts_code']?>' >
|
||||
开始时间: <input type='date' name='t_start' id='t_start' width='30px' value='<?=$_REQUEST['t_start']?>' >
|
||||
结束时间: <input type='date' name='t_end' id='t_end' width='30px' value='<?=$_REQUEST['t_end']?>' >
|
||||
<button id="submitBtn" class="btn-submit"><span>查询数据</span></button>
|
||||
<div > </div>
|
||||
|
||||
</div> </form>
|
||||
<div > </div>
|
||||
<div id="container" style="margin:0 auto;height: 400px;width: 1000px"></div>
|
||||
<div class="loading-overlay" id="loadingOverlay">
|
||||
<div class="spinner"></div>
|
||||
<p style="font-size:18px; color:#2c3e50;">正在加载数据,请稍候...</p>
|
||||
</div>
|
||||
<script>
|
||||
// 页面加载时初始化图表
|
||||
$(document).ready(function() {
|
||||
|
||||
// 加载初始数据
|
||||
loadChartData();
|
||||
|
||||
// 绑定按钮点击事件
|
||||
$('#submitBtn').click(function(e) {
|
||||
e.preventDefault(); // 阻止表单提交刷新页面
|
||||
loadChartData();
|
||||
});
|
||||
});
|
||||
|
||||
// 加载图表数据的函数
|
||||
function loadChartData() {
|
||||
// 显示加载动画
|
||||
$('#loadingOverlay').addClass('active');
|
||||
let t_start = $('#t_start').val();
|
||||
let t_end = $('#t_end').val();
|
||||
let ts_code = $("#ts_code").val();
|
||||
|
||||
url = "https://api.doorcome.cn/api/stockmargin/?tscode="+ts_code;
|
||||
url += "&start_date="+t_start+"&end_date="+t_end;
|
||||
url1 = "https://api.doorcome.cn/api/stockbasic/?tscode="+ts_code;
|
||||
url1 += "&start_date="+t_start+"&end_date="+t_end;
|
||||
url2 = "https://api.doorcome.cn/api/stockinfo/?tscode="+ts_code;
|
||||
Promise.all([
|
||||
fetch(url),
|
||||
fetch(url1),
|
||||
fetch(url2)
|
||||
])
|
||||
.then(responses => Promise.all(responses.map(r => r.json())))
|
||||
.then(([margindData,dailyData,stockInfo]) => {
|
||||
// 图表配置:pe_ttm
|
||||
let codeName = stockInfo[0].name;
|
||||
var params = {};
|
||||
params.chartid='container';
|
||||
params.legend = ['不复权股价','融资融券余额(亿元)'];
|
||||
params.text = codeName+'('+ts_code+')';
|
||||
params.data1 = pickData(dailyData, 'trade_date', 'close');
|
||||
params.data2 = pickData(margindData, 'trade_date', 'rzrqye');
|
||||
params.data2 = params.data2.map(item => {
|
||||
return {
|
||||
value: [
|
||||
item.value[0],
|
||||
parseFloat((parseFloat(item.value[1]) / 10000 /10000).toFixed(2))
|
||||
]
|
||||
};
|
||||
});
|
||||
dataCal = calculateStats(params.data2);
|
||||
params.sub_text = "TTM PE Max:"+dataCal['max'];
|
||||
params.sub_text += ", Min:"+dataCal['min'];
|
||||
params.sub_text += ", Average:"+dataCal['avg'];
|
||||
params.sub_text += ", Recent:"+dataCal['last'];
|
||||
doubleLineChart(params);
|
||||
})
|
||||
.catch(error => console.error('数据加载失败:', error))
|
||||
.finally(() => {
|
||||
// 隐藏加载动画
|
||||
$('#loadingOverlay').removeClass('active');
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
</script>
|
||||
<?php include_once "../html/footer.php"; ?>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user