sbd-npm 1.4.95 → 1.4.97
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/status.js +175 -177
- package/stock_basics.js +232 -232
- package/summary_daily.js +73 -73
- package/util.js +351 -352
package/stock_basics.js
CHANGED
|
@@ -86,10 +86,10 @@ let Stock = {
|
|
|
86
86
|
Stock.fetch_report_organization();
|
|
87
87
|
break;
|
|
88
88
|
case "public_fund":
|
|
89
|
-
Util.fetch_public_fund(Stock
|
|
89
|
+
Util.fetch_public_fund(Stock.code);
|
|
90
90
|
break;
|
|
91
91
|
case "public_fund_change":
|
|
92
|
-
Util.fetch_public_fund_change(Stock
|
|
92
|
+
Util.fetch_public_fund_change(Stock.code);
|
|
93
93
|
break;
|
|
94
94
|
case "big_deal":
|
|
95
95
|
Stock.fetch_big_deal();
|
|
@@ -168,39 +168,39 @@ let Stock = {
|
|
|
168
168
|
let cf_obj = $("#currency_funds");
|
|
169
169
|
cf_obj.html(Util.to_unit(cf_obj.attr("title"), 2, 0));
|
|
170
170
|
//获取股票详情数据
|
|
171
|
-
Util.post("/stock/" + Stock
|
|
172
|
-
Util.init_profile_component("profile", item
|
|
173
|
-
if (item
|
|
174
|
-
Stock.hist_end_date = Util.seconds_to_format(item
|
|
175
|
-
Stock.hist_start_date = Util.seconds_to_format(item
|
|
171
|
+
Util.post("/stock/" + Stock.code, {action: "code_detail"}, function (item) {
|
|
172
|
+
Util.init_profile_component("profile", item.intro);
|
|
173
|
+
if (item.latest_date && !Stock.hist_end_date) {
|
|
174
|
+
Stock.hist_end_date = Util.seconds_to_format(item.latest_date, "%Y-%m-%d");
|
|
175
|
+
Stock.hist_start_date = Util.seconds_to_format(item.latest_date - 60 * Util.one_day_second, "%Y-%m-%d");
|
|
176
176
|
}
|
|
177
|
-
item
|
|
178
|
-
Stock.price = item
|
|
179
|
-
$("#price").html(Util.digit_compare_trend(item
|
|
180
|
-
$("#year_price").html(Util.year_price_rate(item
|
|
177
|
+
item.price = (item.price && item.price > 0) ? item.price : parseFloat($("#price").html());
|
|
178
|
+
Stock.price = item.price;
|
|
179
|
+
$("#price").html(Util.digit_compare_trend(item.price, item.pre_close));
|
|
180
|
+
$("#year_price").html(Util.year_price_rate(item.price, item.year_price));
|
|
181
181
|
let high_52week = $("#high_52week");
|
|
182
|
-
high_52week.html(Util.digit_compare_trend(high_52week.text(), item
|
|
182
|
+
high_52week.html(Util.digit_compare_trend(high_52week.text(), item.price));
|
|
183
183
|
let low_52week = $("#low_52week");
|
|
184
|
-
low_52week.html(Util.digit_compare_trend(low_52week.text(), item
|
|
184
|
+
low_52week.html(Util.digit_compare_trend(low_52week.text(), item.price));
|
|
185
185
|
if (item["high_history"]["close"]) {
|
|
186
186
|
let high_history = $("#high_history");
|
|
187
|
-
high_history.html(Util.digit_compare_trend(item["high_history"]["close"], item
|
|
187
|
+
high_history.html(Util.digit_compare_trend(item["high_history"]["close"], item.price));
|
|
188
188
|
high_history.attr("title", Util.seconds_to_format(item["high_history"]["date"], "%Y-%m-%d"))
|
|
189
189
|
}
|
|
190
190
|
if (item["low_history"]["close"]) {
|
|
191
191
|
let low_history = $("#low_history");
|
|
192
|
-
low_history.html(Util.digit_compare_trend(item["low_history"]["close"], item
|
|
192
|
+
low_history.html(Util.digit_compare_trend(item["low_history"]["close"], item.price));
|
|
193
193
|
low_history.attr("title", Util.seconds_to_format(item["low_history"]["date"], "%Y-%m-%d"))
|
|
194
194
|
}
|
|
195
195
|
// 备注
|
|
196
196
|
let remark_html = [];
|
|
197
|
-
if (item
|
|
197
|
+
if (item.is_bull_trend) {
|
|
198
198
|
remark_html.push("<a class='btn btn-xs btn-danger' href='" + Util.get_url("trend_bull_trend") + "'>多头趋势</a>");
|
|
199
199
|
}
|
|
200
|
-
if (item
|
|
200
|
+
if (item.is_kdj_cross) {
|
|
201
201
|
remark_html.push("<a class='btn btn-xs btn-danger' href='" + Util.get_url("trend_kdj") + "'>KDJ金叉</a>");
|
|
202
202
|
}
|
|
203
|
-
if (item
|
|
203
|
+
if (item.is_macd_cross) {
|
|
204
204
|
remark_html.push("<a class='btn btn-xs btn-danger' href='" + Util.get_url("trend_macd_cross") + "'>MACD金叉</a>");
|
|
205
205
|
}
|
|
206
206
|
if (item["is_margin_minimum"]) {
|
|
@@ -210,28 +210,28 @@ let Stock = {
|
|
|
210
210
|
let xsg_date = Util.seconds_to_format(item["xsg_date"], "%Y-%m-%d");
|
|
211
211
|
remark_html.push("<b class='text-success'>最近解禁<a href='" + Util.get_url("holder_restricted") + "?tab=xsg_list&date=" + xsg_date + "'>" + xsg_date + "</a></b>, ");
|
|
212
212
|
}
|
|
213
|
-
if (item
|
|
214
|
-
remark_html.push("<b class='text-danger'>当前价小于最近<a href='" + Util.get_url("daily_block") + "?code=" + item
|
|
213
|
+
if (item.price > 0 && item.price < item["block_trade_price"]) {
|
|
214
|
+
remark_html.push("<b class='text-danger'>当前价小于最近<a href='" + Util.get_url("daily_block") + "?code=" + item.code + "&start_date=" + Util.seconds_to_format(Stock.ttm_second, "%Y-%m-%d") + "'>大宗交易价(" + item["block_trade_price"] + ")</a></b>, ");
|
|
215
215
|
}
|
|
216
216
|
if (remark_html.length > 0) {
|
|
217
217
|
remark_html.push("<br>");
|
|
218
218
|
}
|
|
219
|
-
if (item
|
|
220
|
-
remark_html.push("<br><p>" + item
|
|
219
|
+
if (item.description) {
|
|
220
|
+
remark_html.push("<br><p>" + item.description + "</p>");
|
|
221
221
|
}
|
|
222
222
|
remark_html = remark_html.join("");
|
|
223
223
|
// 同花顺|申万行业板块数据
|
|
224
|
-
if (item
|
|
224
|
+
if (item.industry_data && item.industry_data.length > 0) {
|
|
225
225
|
if (remark_html.length > 0) {
|
|
226
226
|
remark_html += "<br>";
|
|
227
227
|
}
|
|
228
228
|
remark_html += " <b>行业板块:</b> ";
|
|
229
|
-
item
|
|
229
|
+
item.industry_data.forEach(function (i_d) {
|
|
230
230
|
let url = Util.get_url("summary_industry") + "?code=" + i_d["code"] + "&industry_type=" + i_d["industry_type"];
|
|
231
231
|
remark_html += " <a href='" + url + "' class='btn btn-xs btn-warning'>" + i_d["name"] + "</a>";
|
|
232
232
|
});
|
|
233
233
|
}
|
|
234
|
-
if (item
|
|
234
|
+
if (item.is_sh50) {
|
|
235
235
|
remark_html += " <a href='" + (Util.get_url("summary_index") + "?index_code=SH000016") + "' class='btn btn-xs btn-warning'>上证50</a>";
|
|
236
236
|
}
|
|
237
237
|
if (item["is_star50"]) {
|
|
@@ -243,16 +243,16 @@ let Stock = {
|
|
|
243
243
|
if (item["is_hs300"]) {
|
|
244
244
|
remark_html += " <a href='" + (Util.get_url("summary_index") + "?index_code=SH000300") + "' class='btn btn-xs btn-warning'>沪深300</a>";
|
|
245
245
|
}
|
|
246
|
-
if (item
|
|
247
|
-
item
|
|
246
|
+
if (item.etf_data) {
|
|
247
|
+
item.etf_data.forEach(function (etf) {
|
|
248
248
|
remark_html += " <a class='btn btn-xs btn-warning' data-toggle='modal' data-target='.public_fund_modal' data-val='" + etf["etf_code"] + "'>" + etf["etf_name"] + "</a>";
|
|
249
249
|
});
|
|
250
250
|
}
|
|
251
|
-
if (item
|
|
251
|
+
if (item.links) {
|
|
252
252
|
if (remark_html.length > 0) {
|
|
253
253
|
remark_html += "<br>";
|
|
254
254
|
}
|
|
255
|
-
remark_html += item
|
|
255
|
+
remark_html += item.links;
|
|
256
256
|
}
|
|
257
257
|
let remark_obj = $("#remark");
|
|
258
258
|
remark_obj.html(remark_html);
|
|
@@ -262,12 +262,12 @@ let Stock = {
|
|
|
262
262
|
});
|
|
263
263
|
// 日均线/抵扣价数据
|
|
264
264
|
Util.render_ma_deduction(item, "ma_deduction");
|
|
265
|
-
if (item
|
|
266
|
-
$("#boll").html("<a title='当前上轨线 / 当前下轨线' target='_blank' rel='noopener noreferrer nofollow' href='" + Util.get_url("trend_boll_lower_band") + "'><b class='text-danger'>" + Util.to_float(item
|
|
265
|
+
if (item.boll_up && item.boll_up > 0 && item.boll_down && item.boll_down > 0) {
|
|
266
|
+
$("#boll").html("<a title='当前上轨线 / 当前下轨线' target='_blank' rel='noopener noreferrer nofollow' href='" + Util.get_url("trend_boll_lower_band") + "'><b class='text-danger'>" + Util.to_float(item.boll_up, 2) + "</b> / <b class='text-success'>" + Util.to_float(item.boll_down, 2) + "</b></a>");
|
|
267
267
|
}
|
|
268
|
-
if (item
|
|
268
|
+
if (item.usd_exchange_rate && item.usd_exchange_rate > 0) {
|
|
269
269
|
let market_capital = $("#market_capital").attr("data-val");
|
|
270
|
-
let usd_exchange_rate = Util.to_float((market_capital * 100) / item
|
|
270
|
+
let usd_exchange_rate = Util.to_float((market_capital * 100) / item.usd_exchange_rate, 2);
|
|
271
271
|
$("#usd_market_capital").html("($" + usd_exchange_rate + "亿)");
|
|
272
272
|
}
|
|
273
273
|
// 雪球人数关注排名数据
|
|
@@ -275,12 +275,12 @@ let Stock = {
|
|
|
275
275
|
// 股东户数
|
|
276
276
|
let holder_num_url = Util.get_url("holder_num");
|
|
277
277
|
Util.post(holder_num_url, {action: "holder_num_info", code: Stock.code}, function (j) {
|
|
278
|
-
if (j
|
|
279
|
-
let holder_num = Util.digit_compare_trend(j
|
|
278
|
+
if (j.holder_num > 0 && j.pre_holder_num) {
|
|
279
|
+
let holder_num = Util.digit_compare_trend(j.holder_num, j.pre_holder_num);
|
|
280
280
|
$("#holder_num").html(Util.pack_html_link(holder_num_url + "?code=" + Stock.code, holder_num));
|
|
281
281
|
}
|
|
282
282
|
});
|
|
283
|
-
if (item
|
|
283
|
+
if (item.is_retire && item.is_retire === 1) {
|
|
284
284
|
let code_a_obj = $('#code a').first();
|
|
285
285
|
if (!code_a_obj.hasClass('label-default')) {
|
|
286
286
|
code_a_obj.addClass('label label-default');
|
|
@@ -303,40 +303,40 @@ let Stock = {
|
|
|
303
303
|
hist_type: hist_type,
|
|
304
304
|
is_init: Stock.data.hasOwnProperty(localStorage[Stock.tab_token]) ? 1 : 0
|
|
305
305
|
};
|
|
306
|
-
Util.post("/stock/" + Stock
|
|
307
|
-
if (j
|
|
308
|
-
let init_start_date = Util.seconds_to_format(j
|
|
306
|
+
Util.post("/stock/" + Stock.code, payload, function (j) {
|
|
307
|
+
if (j.init_start_date) {
|
|
308
|
+
let init_start_date = Util.seconds_to_format(j.init_start_date, "%Y-%m-%d");
|
|
309
309
|
$("#hist_start_date").val(init_start_date).data('daterangepicker').setStartDate(init_start_date);
|
|
310
310
|
}
|
|
311
|
-
if (j
|
|
312
|
-
let init_end_date = Util.seconds_to_format(j
|
|
311
|
+
if (j.init_end_date) {
|
|
312
|
+
let init_end_date = Util.seconds_to_format(j.init_end_date, "%Y-%m-%d");
|
|
313
313
|
$("#hist_end_date").val(init_end_date).data('daterangepicker').setStartDate(init_end_date);
|
|
314
314
|
}
|
|
315
315
|
Stock.hist_type = "";
|
|
316
316
|
let html = [], hist_low_price = 0, hist_high_price = 0, total_amount = 0, total_volume = 0;
|
|
317
|
-
j
|
|
318
|
-
if (hist_low_price === 0 || hist_low_price > item
|
|
319
|
-
hist_low_price = item
|
|
317
|
+
j.data.forEach(function (item) {
|
|
318
|
+
if (hist_low_price === 0 || hist_low_price > item.low) {
|
|
319
|
+
hist_low_price = item.low;
|
|
320
320
|
}
|
|
321
|
-
hist_high_price = Math.max(hist_high_price, item
|
|
322
|
-
total_amount += item
|
|
323
|
-
total_volume += item
|
|
321
|
+
hist_high_price = Math.max(hist_high_price, item.high);
|
|
322
|
+
total_amount += item.amount;
|
|
323
|
+
total_volume += item.volume * 100;
|
|
324
324
|
html.push("<tr>");
|
|
325
|
-
let tick_time = Util.seconds_to_format(item
|
|
325
|
+
let tick_time = Util.seconds_to_format(item.date, "%Y%m%d");
|
|
326
326
|
let tick_url = "/tick?c=" + Stock.code + "&s=" + tick_time + "&e=" + tick_time;
|
|
327
|
-
html.push("<td><a href='", tick_url, "'>", Util.seconds_to_format(item
|
|
328
|
-
html.push("<td>", item
|
|
329
|
-
html.push("<td class='price_low'>", item
|
|
330
|
-
html.push("<td class='price_high'>", item
|
|
331
|
-
let cls = Util.text_color(item
|
|
332
|
-
html.push("<td><b class='", cls, "'>", item
|
|
333
|
-
html.push("<td><b class='", cls, "'>", item
|
|
334
|
-
html.push("<td>", Util.to_float(item
|
|
335
|
-
html.push("<td class='volume-td'>", Util.to_float(item
|
|
336
|
-
html.push("<td class='volume_ratio-td'>", item
|
|
337
|
-
html.push("<td class='volume_ratio30-td'>", (item
|
|
338
|
-
html.push("<td class='amount-td'>", Util.to_hundred_million(item
|
|
339
|
-
html.push("<td>", (item
|
|
327
|
+
html.push("<td><a href='", tick_url, "'>", Util.seconds_to_format(item.date, "%Y-%m-%d"), "</a></td>");
|
|
328
|
+
html.push("<td>", item.open, "</td>");
|
|
329
|
+
html.push("<td class='price_low'>", item.low, "</td>");
|
|
330
|
+
html.push("<td class='price_high'>", item.high, "</td>");
|
|
331
|
+
let cls = Util.text_color(item.p_change);
|
|
332
|
+
html.push("<td><b class='", cls, "'>", item.close, "</b></td>");
|
|
333
|
+
html.push("<td><b class='", cls, "'>", item.p_change, "%</b></td>");
|
|
334
|
+
html.push("<td>", Util.to_float(item.amount / (item.volume * 100), 2), "</td>");
|
|
335
|
+
html.push("<td class='volume-td'>", Util.to_float(item.volume / 10000, 2), "万手</td>");
|
|
336
|
+
html.push("<td class='volume_ratio-td'>", item.volume_ratio, "</td>");
|
|
337
|
+
html.push("<td class='volume_ratio30-td'>", (item.volume_ratio30 ? item.volume_ratio30 : "--"), "</td>");
|
|
338
|
+
html.push("<td class='amount-td'>", Util.to_hundred_million(item.amount), "亿</td>");
|
|
339
|
+
html.push("<td>", (item.turnover > 0 ? (item.turnover + "%") : "--"), "</td>");
|
|
340
340
|
html.push("</tr>");
|
|
341
341
|
});
|
|
342
342
|
Util.render_table_html("hist_table_body", html);
|
|
@@ -359,8 +359,8 @@ let Stock = {
|
|
|
359
359
|
Util.parse_value_trend("rzmre-td");
|
|
360
360
|
Util.parse_value_trend("rzye-td");
|
|
361
361
|
let stock_hist_summary = "";
|
|
362
|
-
if (j
|
|
363
|
-
stock_hist_summary += "<b>历史最高成交额(<a class='hist_summary_link' href='#'>" + Util.seconds_to_format(j
|
|
362
|
+
if (j.high_amount && j.high_amount > 0) {
|
|
363
|
+
stock_hist_summary += "<b>历史最高成交额(<a class='hist_summary_link' href='#'>" + Util.seconds_to_format(j.high_amount_date, "%Y-%m-%d") + "</a>):<span class='label label-danger'>" + Util.to_unit(j.high_amount) + "</span></b>,";
|
|
364
364
|
}
|
|
365
365
|
if (j["high_volume"] && j["high_volume"] > 0) {
|
|
366
366
|
stock_hist_summary += "<b>历史最高成交量(<a class='hist_summary_link' href='#'>" + Util.seconds_to_format(j["high_volume_date"], "%Y-%m-%d") + "</a>):<span class='label label-danger'>" + Util.to_unit(j["high_volume"]) + "手</span></b>,";
|
|
@@ -411,41 +411,41 @@ let Stock = {
|
|
|
411
411
|
]
|
|
412
412
|
});
|
|
413
413
|
Util.post("/stock/" + Stock.code, {action: "big_deal"}, function (j) {
|
|
414
|
-
if (j
|
|
415
|
-
let date = j
|
|
416
|
-
//Stock.pack_big_deal("big_deal1", j
|
|
414
|
+
if (j.data && j.data["date"]) {
|
|
415
|
+
let date = j.data["date"];
|
|
416
|
+
//Stock.pack_big_deal("big_deal1", j.data, "最近一天", date, date);
|
|
417
417
|
}
|
|
418
418
|
if (j["money_net_inflow"]) {
|
|
419
419
|
let html = [], i = 0, total_net_inflow = 0;
|
|
420
420
|
let day3_net_inflow = 0, day5_net_inflow = 0, day10_net_inflow = 0, day20_net_inflow = 0, day60_net_inflow = 0;
|
|
421
421
|
j["money_net_inflow"].forEach(function (item) {
|
|
422
422
|
i++;
|
|
423
|
-
total_net_inflow += item
|
|
423
|
+
total_net_inflow += item.main_net_inflow;
|
|
424
424
|
if (i <= 3) {
|
|
425
|
-
day3_net_inflow += item
|
|
425
|
+
day3_net_inflow += item.main_net_inflow;
|
|
426
426
|
}
|
|
427
427
|
if (i <= 5) {
|
|
428
|
-
day5_net_inflow += item
|
|
428
|
+
day5_net_inflow += item.main_net_inflow;
|
|
429
429
|
}
|
|
430
430
|
if (i <= 10) {
|
|
431
|
-
day10_net_inflow += item
|
|
431
|
+
day10_net_inflow += item.main_net_inflow;
|
|
432
432
|
}
|
|
433
433
|
if (i <= 20) {
|
|
434
|
-
day20_net_inflow += item
|
|
434
|
+
day20_net_inflow += item.main_net_inflow;
|
|
435
435
|
}
|
|
436
436
|
if (i <= 60) {
|
|
437
|
-
day60_net_inflow += item
|
|
437
|
+
day60_net_inflow += item.main_net_inflow;
|
|
438
438
|
}
|
|
439
439
|
html.push("<tr>");
|
|
440
|
-
html.push("<td>", Util.seconds_to_format(item
|
|
441
|
-
html.push("<td><b class='", Util.text_color(item
|
|
442
|
-
html.push("<td data-val='", item
|
|
440
|
+
html.push("<td>", Util.seconds_to_format(item.date, "%Y-%m-%d"), "</td>");
|
|
441
|
+
html.push("<td><b class='", Util.text_color(item.price_change), "'>", item.price, "(", item.price_change, "%)</b></td>");
|
|
442
|
+
html.push("<td data-val='", item.main_net_inflow, "'><b class='", Util.text_color(item.main_net_inflow), "'>", Util.to_unit(item.main_net_inflow), "</b></td>");
|
|
443
443
|
html.push("<td data-val='", item["large_net_inflow"], "'><b class='", Util.text_color(item["large_net_inflow"]), "'>", Util.to_unit(item["large_net_inflow"]), "</b></td>");
|
|
444
444
|
html.push("<td data-val='", item["big_net_inflow"], "'><b class='", Util.text_color(item["big_net_inflow"]), "'>", Util.to_unit(item["big_net_inflow"]), "</b></td>");
|
|
445
445
|
html.push("<td data-val='", item["middle_net_inflow"], "'><b class='", Util.text_color(item["middle_net_inflow"]), "'>", Util.to_unit(item["middle_net_inflow"]), "</b></td>");
|
|
446
446
|
html.push("<td data-val='", item["small_net_inflow"], "'><b class='", Util.text_color(item["small_net_inflow"]), "'>", Util.to_unit(item["small_net_inflow"]), "</b></td>");
|
|
447
|
-
html.push("<td class='volume-td'>", Util.to_float(item
|
|
448
|
-
html.push("<td class='amount-td'>", Util.to_hundred_million(item
|
|
447
|
+
html.push("<td class='volume-td'>", Util.to_float(item.volume / 10000, 2), "万手</td>");
|
|
448
|
+
html.push("<td class='amount-td'>", Util.to_hundred_million(item.amount), "亿</td>");
|
|
449
449
|
html.push("</tr>");
|
|
450
450
|
});
|
|
451
451
|
Util.render_table_html("big_deal_table_body", html);
|
|
@@ -503,13 +503,13 @@ let Stock = {
|
|
|
503
503
|
let payload = {action: "top_holder"};
|
|
504
504
|
let date = $("#holder_top_date").val();
|
|
505
505
|
if (date) {
|
|
506
|
-
payload
|
|
506
|
+
payload.date = date;
|
|
507
507
|
}
|
|
508
|
-
Util.post("/stock/" + Stock
|
|
508
|
+
Util.post("/stock/" + Stock.code, payload, function (j) {
|
|
509
509
|
let main_html = [], circulation_html = [];
|
|
510
510
|
let main_volume = 0, pre_main_volume = 0, circulation_volume = 0, pre_circulation_volume = 0;
|
|
511
|
-
j
|
|
512
|
-
let change = item
|
|
511
|
+
j.data.forEach(function (item) {
|
|
512
|
+
let change = item.change;
|
|
513
513
|
if (change === "None") {
|
|
514
514
|
change = "<b class='text-danger'>新增</b>";
|
|
515
515
|
} else if (parseInt(change) === 0) {
|
|
@@ -519,33 +519,33 @@ let Stock = {
|
|
|
519
519
|
} else if (parseFloat(change) < 0) {
|
|
520
520
|
change = "<b class='text-success'>" + change + "%</b>";
|
|
521
521
|
}
|
|
522
|
-
if (parseInt(item
|
|
523
|
-
main_volume += item
|
|
522
|
+
if (parseInt(item.type) === 1) {
|
|
523
|
+
main_volume += item.volume;
|
|
524
524
|
main_html.push("<tr>");
|
|
525
|
-
main_html.push("<td>", item
|
|
526
|
-
main_html.push("<td>", item
|
|
527
|
-
main_html.push("<td>", Util.to_unit(item
|
|
528
|
-
main_html.push("<td>", Util.to_unit(item
|
|
529
|
-
main_html.push("<td>", item
|
|
525
|
+
main_html.push("<td>", item.rank, "</td>");
|
|
526
|
+
main_html.push("<td>", item.holder_name, "</td>");
|
|
527
|
+
main_html.push("<td>", Util.to_unit(item.volume), "</td>");
|
|
528
|
+
main_html.push("<td>", Util.to_unit(item.volume * Stock.price), "</td>");
|
|
529
|
+
main_html.push("<td>", item.holder_ratio, "%</td>");
|
|
530
530
|
main_html.push("<td>", change, "</td>");
|
|
531
531
|
main_html.push("</tr>");
|
|
532
532
|
} else {
|
|
533
|
-
circulation_volume += item
|
|
533
|
+
circulation_volume += item.volume;
|
|
534
534
|
circulation_html.push("<tr>");
|
|
535
|
-
circulation_html.push("<td>", item
|
|
536
|
-
circulation_html.push("<td>", item
|
|
537
|
-
circulation_html.push("<td>", Util.to_unit(item
|
|
538
|
-
circulation_html.push("<td>", Util.to_unit(item
|
|
539
|
-
circulation_html.push("<td>", item
|
|
535
|
+
circulation_html.push("<td>", item.rank, "</td>");
|
|
536
|
+
circulation_html.push("<td>", item.holder_name, "</td>");
|
|
537
|
+
circulation_html.push("<td>", Util.to_unit(item.volume), "</td>");
|
|
538
|
+
circulation_html.push("<td>", Util.to_unit(item.volume * Stock.price), "</td>");
|
|
539
|
+
circulation_html.push("<td>", item.holder_ratio, "%</td>");
|
|
540
540
|
circulation_html.push("<td>", change, "</td>");
|
|
541
541
|
circulation_html.push("</tr>");
|
|
542
542
|
}
|
|
543
543
|
});
|
|
544
544
|
j["pre_data"].forEach(function (item) {
|
|
545
|
-
if (parseInt(item
|
|
546
|
-
pre_main_volume += item
|
|
545
|
+
if (parseInt(item.type) === 1) {
|
|
546
|
+
pre_main_volume += item.volume;
|
|
547
547
|
} else {
|
|
548
|
-
pre_circulation_volume += item
|
|
548
|
+
pre_circulation_volume += item.volume;
|
|
549
549
|
}
|
|
550
550
|
});
|
|
551
551
|
let circulation_tips = "", main_tips = "";
|
|
@@ -556,7 +556,7 @@ let Stock = {
|
|
|
556
556
|
circulation_tips += " 持股数环比: " + Util.year_price_rate(circulation_volume, pre_circulation_volume, 1);
|
|
557
557
|
}
|
|
558
558
|
if (j["date_price"]) {
|
|
559
|
-
circulation_tips += ", 当时价: " + Util.digit_compare_trend1(Stock
|
|
559
|
+
circulation_tips += ", 当时价: " + Util.digit_compare_trend1(Stock.price, j["date_price"]);
|
|
560
560
|
}
|
|
561
561
|
circulation_tips += " ]";
|
|
562
562
|
}
|
|
@@ -575,9 +575,9 @@ let Stock = {
|
|
|
575
575
|
$("#circulation_holder_url").attr("href", "https://xueqiu.com/snowman/S/" + symbol + "/detail#/LTGD");
|
|
576
576
|
Util.render_table_html("main_holder_table_body", main_html);
|
|
577
577
|
$("#main_holder_url").attr("href", "https://xueqiu.com/snowman/S/" + symbol + "/detail#/SDGD");
|
|
578
|
-
if (j
|
|
578
|
+
if (j.date_list) {
|
|
579
579
|
let date_html = [];
|
|
580
|
-
j
|
|
580
|
+
j.date_list.forEach(function (date) {
|
|
581
581
|
date = Util.seconds_to_format(date, "%Y-%m-%d");
|
|
582
582
|
date_html.push("<option value='", date, "'>", date, "</option>");
|
|
583
583
|
});
|
|
@@ -649,7 +649,7 @@ let Stock = {
|
|
|
649
649
|
{"name": "扣净环比", "tooltip": "(当前扣非净利润 - 上一季度的扣非净利润) / 上一季度的扣非净利润 × 100%"},
|
|
650
650
|
]
|
|
651
651
|
});
|
|
652
|
-
Util.post("/stock/" + Stock
|
|
652
|
+
Util.post("/stock/" + Stock.code, {action: "finance"}, function (j) {
|
|
653
653
|
// 现金流量表
|
|
654
654
|
let html = [], total_ncf_from_oa = 0, total_cash_paid_for_assets = 0, total_free_cash_flow = 0, total_ncf_from_fa = 0;
|
|
655
655
|
j["cash_flow_data"].forEach(function (item) {
|
|
@@ -659,7 +659,7 @@ let Stock = {
|
|
|
659
659
|
total_free_cash_flow += free_cash_flow;
|
|
660
660
|
total_ncf_from_fa += item["ncf_from_fa"];
|
|
661
661
|
html.push("<tr>");
|
|
662
|
-
html.push("<td>", Util.seconds_to_format(item
|
|
662
|
+
html.push("<td>", Util.seconds_to_format(item.date, "%Y"), "</td>");
|
|
663
663
|
html.push("<td>", Util.to_unit(item["ncf_from_oa"]), "</td>");
|
|
664
664
|
html.push("<td>", Util.to_unit(item["cash_paid_for_assets"]), "</td>");
|
|
665
665
|
html.push("<td>", Util.to_unit(free_cash_flow), "</td>");
|
|
@@ -675,21 +675,21 @@ let Stock = {
|
|
|
675
675
|
// 资产负债表
|
|
676
676
|
html = [];
|
|
677
677
|
j["assets_liabilities_data"].forEach(function (item) {
|
|
678
|
-
let net_assets = item
|
|
678
|
+
let net_assets = item.total_assets - item.total_liabilities;
|
|
679
679
|
let goodwill = "--";
|
|
680
680
|
let goodwill_rate = "--";
|
|
681
|
-
if (item
|
|
682
|
-
goodwill = Util.to_unit(item
|
|
683
|
-
goodwill_rate = Util.to_float((item
|
|
681
|
+
if (item.goodwill > 0) {
|
|
682
|
+
goodwill = Util.to_unit(item.goodwill);
|
|
683
|
+
goodwill_rate = Util.to_float((item.goodwill / net_assets) * 100, 2) + "%";
|
|
684
684
|
}
|
|
685
685
|
let debt_asset_ratio = "--";
|
|
686
686
|
if (item["debt_asset_ratio"] > 0) {
|
|
687
687
|
debt_asset_ratio = Util.to_float(item["debt_asset_ratio"], 2) + "%";
|
|
688
688
|
}
|
|
689
689
|
html.push("<tr>");
|
|
690
|
-
html.push("<td>", item
|
|
691
|
-
html.push("<td>", Util.to_unit(item
|
|
692
|
-
html.push("<td>", Util.to_unit(item
|
|
690
|
+
html.push("<td>", item.year, "(", item.quarter, ")</td>");
|
|
691
|
+
html.push("<td>", Util.to_unit(item.total_assets), "</td>");
|
|
692
|
+
html.push("<td>", Util.to_unit(item.total_liabilities), "</td>");
|
|
693
693
|
html.push("<td>", Util.to_unit(net_assets), "</td>");
|
|
694
694
|
html.push("<td>", debt_asset_ratio, "</td>");
|
|
695
695
|
html.push("<td>", Util.to_unit(item["currency_funds"]), "</td>");
|
|
@@ -722,21 +722,21 @@ let Stock = {
|
|
|
722
722
|
let html = [];
|
|
723
723
|
let quarter = parseInt($("#quarter").val());
|
|
724
724
|
Stock["income_statement_data"].forEach(function (item) {
|
|
725
|
-
item
|
|
726
|
-
if (quarter === 0 || quarter === item
|
|
727
|
-
let tr_cls = (quarter === 0 && item
|
|
725
|
+
item.quarter = Util.get_quarter(item.date);
|
|
726
|
+
if (quarter === 0 || quarter === item.quarter) {
|
|
727
|
+
let tr_cls = (quarter === 0 && item.quarter === 4) ? "success" : "";
|
|
728
728
|
html.push("<tr class='", tr_cls, "'>");
|
|
729
|
-
html.push("<td>", Util.get_year(item
|
|
730
|
-
html.push("<td>", item
|
|
731
|
-
html.push("<td>", Util.to_float(item
|
|
732
|
-
html.push("<td>", Util.to_float(item
|
|
733
|
-
html.push("<td>", item
|
|
734
|
-
let total_revenue = Util.to_unit(item
|
|
729
|
+
html.push("<td>", Util.get_year(item.date), "-", item.quarter, "</td>");
|
|
730
|
+
html.push("<td>", item.net_profit_rate, "%</td>");
|
|
731
|
+
html.push("<td>", Util.to_float(item.gross_profit_rate, 2), "%</td>");
|
|
732
|
+
html.push("<td>", Util.to_float(item.eps, 2), "元</td>");
|
|
733
|
+
html.push("<td>", item.roe, "%</td>");
|
|
734
|
+
let total_revenue = Util.to_unit(item.total_revenue, 3);
|
|
735
735
|
html.push("<td>", total_revenue, "</td>");
|
|
736
736
|
let total_revenue_yoy_title = "", total_revenue_yoy_ratio = "--";
|
|
737
737
|
if (item["yoy_total_revenue"]) {
|
|
738
738
|
total_revenue_yoy_title = " title='" + Util.to_unit(item["yoy_total_revenue"], 2, 0) + " - " + Util.strip_html(total_revenue) + "'";
|
|
739
|
-
total_revenue_yoy_ratio = Util.to_float(((item
|
|
739
|
+
total_revenue_yoy_ratio = Util.to_float(((item.total_revenue - item["yoy_total_revenue"]) / item["yoy_total_revenue"]) * 100, 2);
|
|
740
740
|
total_revenue_yoy_ratio = Util.parse_ratio(total_revenue_yoy_ratio);
|
|
741
741
|
}
|
|
742
742
|
html.push("<td", total_revenue_yoy_title, ">", total_revenue_yoy_ratio, "</td>");
|
|
@@ -747,12 +747,12 @@ let Stock = {
|
|
|
747
747
|
total_revenue_qoq_ratio = Util.parse_ratio(total_revenue_qoq_ratio);
|
|
748
748
|
}
|
|
749
749
|
html.push("<td", total_revenue_qoq_title, ">", total_revenue_qoq_ratio, "</td>");
|
|
750
|
-
let net_profit = Util.to_unit(item
|
|
750
|
+
let net_profit = Util.to_unit(item.net_profit, 3);
|
|
751
751
|
html.push("<td>", net_profit, "</td>");
|
|
752
752
|
let net_profit_yoy_title = "", net_profit_yoy_ratio = "--";
|
|
753
753
|
if (item["yoy_net_profit"]) {
|
|
754
754
|
net_profit_yoy_title = " title='" + Util.to_unit(item["yoy_net_profit"], 2, 0) + " - " + Util.strip_html(net_profit) + "'";
|
|
755
|
-
net_profit_yoy_ratio = Util.to_float(((item
|
|
755
|
+
net_profit_yoy_ratio = Util.to_float(((item.net_profit - item["yoy_net_profit"]) / item["yoy_net_profit"]) * 100, 2);
|
|
756
756
|
net_profit_yoy_ratio = Util.parse_ratio(net_profit_yoy_ratio);
|
|
757
757
|
}
|
|
758
758
|
html.push("<td", net_profit_yoy_title, ">", net_profit_yoy_ratio, "</td>");
|
|
@@ -763,12 +763,12 @@ let Stock = {
|
|
|
763
763
|
net_profit_qoq_ratio = Util.parse_ratio(net_profit_qoq_ratio);
|
|
764
764
|
}
|
|
765
765
|
html.push("<td", net_profit_qoq_title, ">", net_profit_qoq_ratio, "</td>");
|
|
766
|
-
let adjusted_net_profit = Util.to_unit(item
|
|
766
|
+
let adjusted_net_profit = Util.to_unit(item.adjusted_net_profit, 3);
|
|
767
767
|
html.push("<td>", adjusted_net_profit, "</td>");
|
|
768
768
|
let adjusted_net_profit_yoy_title = "", adjusted_net_profit_yoy_ratio = "--";
|
|
769
769
|
if (item["yoy_adjusted_net_profit"]) {
|
|
770
770
|
adjusted_net_profit_yoy_title = " title='" + Util.to_unit(item["yoy_adjusted_net_profit"], 2, 0) + " - " + Util.strip_html(adjusted_net_profit) + "'";
|
|
771
|
-
adjusted_net_profit_yoy_ratio = Util.to_float(((item
|
|
771
|
+
adjusted_net_profit_yoy_ratio = Util.to_float(((item.adjusted_net_profit - item["yoy_adjusted_net_profit"]) / item["yoy_adjusted_net_profit"]) * 100, 2);
|
|
772
772
|
adjusted_net_profit_yoy_ratio = Util.parse_ratio(adjusted_net_profit_yoy_ratio);
|
|
773
773
|
}
|
|
774
774
|
html.push("<td", adjusted_net_profit_yoy_title, ">", adjusted_net_profit_yoy_ratio, "</td>");
|
|
@@ -797,36 +797,36 @@ let Stock = {
|
|
|
797
797
|
{"name": "人均持股市值", "table_sort": 1},
|
|
798
798
|
]
|
|
799
799
|
});
|
|
800
|
-
Util.post("/stock/" + Stock
|
|
800
|
+
Util.post("/stock/" + Stock.code, {action: "holder_num"}, function (j) {
|
|
801
801
|
Stock["holder_chart"].hideLoading();
|
|
802
802
|
let html = [], date_data = [], holder_data = [], price_data = [];
|
|
803
803
|
let latest_date = 0, max_holder_num = 0, max_holder_num_date = 0, min_holder_num = Util.max_32bit_integer, min_holder_num_date = 0;
|
|
804
|
-
j
|
|
805
|
-
let date_format = Util.seconds_to_format(item
|
|
806
|
-
latest_date = Math.max(latest_date, item
|
|
807
|
-
if (item
|
|
808
|
-
max_holder_num = item
|
|
804
|
+
j.data.forEach(function (item) {
|
|
805
|
+
let date_format = Util.seconds_to_format(item.date, "%Y-%m-%d");
|
|
806
|
+
latest_date = Math.max(latest_date, item.date);
|
|
807
|
+
if (item.holder_num > max_holder_num) {
|
|
808
|
+
max_holder_num = item.holder_num;
|
|
809
809
|
max_holder_num_date = date_format;
|
|
810
810
|
}
|
|
811
|
-
if (item
|
|
812
|
-
min_holder_num = item
|
|
811
|
+
if (item.holder_num < min_holder_num) {
|
|
812
|
+
min_holder_num = item.holder_num;
|
|
813
813
|
min_holder_num_date = date_format;
|
|
814
814
|
}
|
|
815
815
|
date_data.push(date_format);
|
|
816
|
-
holder_data.push(item
|
|
817
|
-
price_data.push(item
|
|
816
|
+
holder_data.push(item.holder_num);
|
|
817
|
+
price_data.push(item.price);
|
|
818
818
|
html.push("<tr>");
|
|
819
819
|
html.push("<td>", date_format, "</td>");
|
|
820
|
-
html.push("<td>", Util.digit_compare_trend(item
|
|
821
|
-
html.push("<td><b class='", Util.text_color(item
|
|
822
|
-
html.push("<td>", item
|
|
823
|
-
html.push("<td>", Util.to_unit(item
|
|
820
|
+
html.push("<td>", Util.digit_compare_trend(item.holder_num, item.pre_holder_num), "</td>");
|
|
821
|
+
html.push("<td><b class='", Util.text_color(item.price_change), "'>", item.price, "(", item.price_change, "%)</b></td>");
|
|
822
|
+
html.push("<td>", item.avg_num, "</td>");
|
|
823
|
+
html.push("<td>", Util.to_unit(item.avg_num * item.price), "</td>");
|
|
824
824
|
html.push("</tr>");
|
|
825
825
|
});
|
|
826
826
|
let holder_num_summary = "";
|
|
827
|
-
if (j
|
|
828
|
-
let latest_date_format = Util.seconds_to_format(j
|
|
829
|
-
if (j
|
|
827
|
+
if (j.latest_date) {
|
|
828
|
+
let latest_date_format = Util.seconds_to_format(j.latest_date, "%Y-%m-%d");
|
|
829
|
+
if (j.latest_date > latest_date) {
|
|
830
830
|
latest_date = latest_date_format;
|
|
831
831
|
date_data.unshift(latest_date);
|
|
832
832
|
holder_data.unshift(j["latest_holder_num"]);
|
|
@@ -871,13 +871,13 @@ let Stock = {
|
|
|
871
871
|
});
|
|
872
872
|
let symbol = Util.code_to_symbol(Stock.code).toLowerCase();
|
|
873
873
|
$("#notice_url").attr("href", "https://vip.stock.finance.sina.com.cn/corp/view/vCB_BulletinGather.php?stock_str=" + symbol);
|
|
874
|
-
Util.post("/stock/" + Stock
|
|
874
|
+
Util.post("/stock/" + Stock.code, {action: "notice"}, function (j) {
|
|
875
875
|
let html = [];
|
|
876
|
-
j
|
|
877
|
-
html.push("<tr title='", item
|
|
876
|
+
j.data.forEach(function (item, index) {
|
|
877
|
+
html.push("<tr title='", item.title, "'>");
|
|
878
878
|
html.push("<td>", (index + 1), "</td>");
|
|
879
|
-
html.push("<td>", Util.pack_html_link(item
|
|
880
|
-
html.push("<td>", Util.seconds_to_format(item
|
|
879
|
+
html.push("<td>", Util.pack_html_link(item.url, Util.substring(item.title, 70)), "</td>");
|
|
880
|
+
html.push("<td>", Util.seconds_to_format(item.date, "%Y-%m-%d"), "</td>");
|
|
881
881
|
html.push("</tr>");
|
|
882
882
|
});
|
|
883
883
|
Util.render_table_html("notice_table_body", html);
|
|
@@ -888,8 +888,8 @@ let Stock = {
|
|
|
888
888
|
Util.post(Util.get_url("notice_report_annual"), {action: "report", code: Stock.code}, function (j) {
|
|
889
889
|
let html = [];
|
|
890
890
|
html.push("<option value=''>年度报告</option>");
|
|
891
|
-
j
|
|
892
|
-
html.push("<option value='", item
|
|
891
|
+
j.data.forEach(function (item) {
|
|
892
|
+
html.push("<option value='", item.url, "'>", item.year, "年度报告</option>");
|
|
893
893
|
});
|
|
894
894
|
let report_obj = $("#report");
|
|
895
895
|
report_obj.html(html.join(""));
|
|
@@ -919,16 +919,16 @@ let Stock = {
|
|
|
919
919
|
{"name": "价格变化", "table_sort": 1},
|
|
920
920
|
]
|
|
921
921
|
});
|
|
922
|
-
Util.post("/stock/" + Stock
|
|
922
|
+
Util.post("/stock/" + Stock.code, {action: "report_organization"}, function (j) {
|
|
923
923
|
let html = [];
|
|
924
|
-
j
|
|
925
|
-
html.push("<tr title='", item
|
|
924
|
+
j.data.forEach(function (item, i) {
|
|
925
|
+
html.push("<tr title='", item.title, "'>");
|
|
926
926
|
html.push("<td>", i + 1, "</td>");
|
|
927
|
-
html.push("<td>", Util.pack_html_link("https://data.eastmoney.com/report/info/" + item
|
|
928
|
-
html.push("<td>", item
|
|
929
|
-
html.push("<td>", item
|
|
930
|
-
html.push("<td>", Util.seconds_to_format(item
|
|
931
|
-
html.push("<td>", Util.digit_compare_trend1(Stock
|
|
927
|
+
html.push("<td>", Util.pack_html_link("https://data.eastmoney.com/report/info/" + item.id + ".html", Util.substring(item.title, 70)), "</td>");
|
|
928
|
+
html.push("<td>", item.organization, "</td>");
|
|
929
|
+
html.push("<td>", item.analysts, "</td>");
|
|
930
|
+
html.push("<td>", Util.seconds_to_format(item.ctime, "%Y-%m-%d"), "</td>");
|
|
931
|
+
html.push("<td>", Util.digit_compare_trend1(Stock.price, item.day_price), "</td>");
|
|
932
932
|
html.push("</tr>");
|
|
933
933
|
});
|
|
934
934
|
Util.render_table_html("report_organization_table_body", html);
|
|
@@ -949,7 +949,7 @@ let Stock = {
|
|
|
949
949
|
}
|
|
950
950
|
let metrics_drop_down_btn_id = metrics + "_btn_" + date_type;
|
|
951
951
|
let interval = parseInt($("#" + metrics_drop_down_btn_id).text());
|
|
952
|
-
Util.post("/stock/" + Stock
|
|
952
|
+
Util.post("/stock/" + Stock.code, {
|
|
953
953
|
action: "metrics_statistics",
|
|
954
954
|
metrics: metrics,
|
|
955
955
|
date_type: date_type,
|
|
@@ -960,16 +960,16 @@ let Stock = {
|
|
|
960
960
|
let value_data = [];
|
|
961
961
|
let price_data = [];
|
|
962
962
|
let color_data = [];
|
|
963
|
-
j
|
|
964
|
-
date_data.push(item
|
|
965
|
-
value_data.push(item
|
|
966
|
-
price_data.push(item
|
|
963
|
+
j.data.forEach(function (item) {
|
|
964
|
+
date_data.push(item.date);
|
|
965
|
+
value_data.push(item.value);
|
|
966
|
+
price_data.push(item.price);
|
|
967
967
|
color_data.push("#E74C3C");
|
|
968
968
|
});
|
|
969
|
-
if (j
|
|
970
|
-
date_data.push(j
|
|
971
|
-
value_data.push(j
|
|
972
|
-
price_data.push(j
|
|
969
|
+
if (j.current && j.current.value && j.current.value > 0) {
|
|
970
|
+
date_data.push(j.current.date);
|
|
971
|
+
value_data.push(j.current.value);
|
|
972
|
+
price_data.push(j.current.price);
|
|
973
973
|
color_data.push("#C9CBCF");
|
|
974
974
|
}
|
|
975
975
|
let title = Util.strip_bracket_string($("#" + metrics + "_title").text());
|
|
@@ -1037,21 +1037,21 @@ let Stock = {
|
|
|
1037
1037
|
|
|
1038
1038
|
fetch_bias_data: function () {
|
|
1039
1039
|
Util.show_loading();
|
|
1040
|
-
Util.post("/stock/" + Stock
|
|
1040
|
+
Util.post("/stock/" + Stock.code, {action: "bias"}, function (j) {
|
|
1041
1041
|
let date_data = [], bias20_data = [], bias60_data = [], bias120_data = [], price_data = [], color_data = [];
|
|
1042
1042
|
let current_date = 0, current_bias20 = 0, current_bias60 = 0, current_bias120 = 0;
|
|
1043
|
-
j
|
|
1044
|
-
if (item
|
|
1045
|
-
current_date = item
|
|
1046
|
-
current_bias20 = item
|
|
1047
|
-
current_bias60 = item
|
|
1048
|
-
current_bias120 = item
|
|
1043
|
+
j.data.forEach(function (item) {
|
|
1044
|
+
if (item.date > current_date) {
|
|
1045
|
+
current_date = item.date;
|
|
1046
|
+
current_bias20 = item.bias20;
|
|
1047
|
+
current_bias60 = item.bias60;
|
|
1048
|
+
current_bias120 = item.bias120;
|
|
1049
1049
|
}
|
|
1050
|
-
date_data.push(Util.seconds_to_format(item
|
|
1051
|
-
bias20_data.push(item
|
|
1052
|
-
bias60_data.push(item
|
|
1053
|
-
bias120_data.push(item
|
|
1054
|
-
price_data.push(item
|
|
1050
|
+
date_data.push(Util.seconds_to_format(item.date, "%Y-%m-%d"));
|
|
1051
|
+
bias20_data.push(item.bias20);
|
|
1052
|
+
bias60_data.push(item.bias60);
|
|
1053
|
+
bias120_data.push(item.bias120);
|
|
1054
|
+
price_data.push(item.price);
|
|
1055
1055
|
color_data.push("#C9CBCF");
|
|
1056
1056
|
});
|
|
1057
1057
|
Stock["bias_chart"] = Util.bias_bar_line(Stock["bias_chart"], "bias_line_chart", date_data, bias120_data, color_data, bias20_data, bias60_data, price_data);
|
|
@@ -1066,7 +1066,7 @@ let Stock = {
|
|
|
1066
1066
|
*/
|
|
1067
1067
|
fetch_margin: function () {
|
|
1068
1068
|
Stock["rzye_chart"] = Util.show_chart_loading(Stock["rzye_chart"], "rzye_line_canvas");
|
|
1069
|
-
let margin_url = "https://data.10jqka.com.cn/market/rzrqgg/code/" + Stock
|
|
1069
|
+
let margin_url = "https://data.10jqka.com.cn/market/rzrqgg/code/" + Stock.code;
|
|
1070
1070
|
$("#margin_panel_title").html(Util.pack_html_link(margin_url, "[" + Stock.name + "]融资余额"));
|
|
1071
1071
|
let payload = {
|
|
1072
1072
|
action: "margin",
|
|
@@ -1074,20 +1074,20 @@ let Stock = {
|
|
|
1074
1074
|
start_date: $("#margin_start_date").val(),
|
|
1075
1075
|
end_date: $("#margin_end_date").val()
|
|
1076
1076
|
};
|
|
1077
|
-
Util.post("/stock/" + Stock
|
|
1077
|
+
Util.post("/stock/" + Stock.code, payload, function (j) {
|
|
1078
1078
|
Stock["rzye_chart"].hideLoading();
|
|
1079
1079
|
let date_data = [], rzye_data = [], rqye_data = [], price_data = [], rqye_color_data = [], rzye_low = Number.MAX_SAFE_INTEGER, rzye_high = 0, rqye_low = Number.MAX_SAFE_INTEGER, rqye_high = 0;
|
|
1080
1080
|
let latest_date = 0, margin_summary = "", rqye_summary = "";
|
|
1081
|
-
j
|
|
1082
|
-
latest_date = Math.max(latest_date, item
|
|
1083
|
-
date_data.push(Util.seconds_to_format(item
|
|
1084
|
-
rzye_low = Math.min(rzye_low, item
|
|
1085
|
-
rzye_high = Math.max(rzye_high, item
|
|
1086
|
-
rzye_data.push(Util.to_hundred_million(item
|
|
1087
|
-
rqye_low = Math.min(rqye_low, item
|
|
1088
|
-
rqye_high = Math.max(rqye_high, item
|
|
1089
|
-
rqye_data.push(Util.to_ten_thousand(item
|
|
1090
|
-
price_data.push(item
|
|
1081
|
+
j.data.forEach(function (item) {
|
|
1082
|
+
latest_date = Math.max(latest_date, item.date);
|
|
1083
|
+
date_data.push(Util.seconds_to_format(item.date, "%Y-%m-%d"));
|
|
1084
|
+
rzye_low = Math.min(rzye_low, item.rzye);
|
|
1085
|
+
rzye_high = Math.max(rzye_high, item.rzye);
|
|
1086
|
+
rzye_data.push(Util.to_hundred_million(item.rzye, 3));
|
|
1087
|
+
rqye_low = Math.min(rqye_low, item.rqye);
|
|
1088
|
+
rqye_high = Math.max(rqye_high, item.rqye);
|
|
1089
|
+
rqye_data.push(Util.to_ten_thousand(item.rqye, 3));
|
|
1090
|
+
price_data.push(item.price);
|
|
1091
1091
|
rqye_color_data.push("#E74C3C");
|
|
1092
1092
|
});
|
|
1093
1093
|
latest_date = Util.seconds_to_format(latest_date, "%Y-%m-%d");
|
|
@@ -1138,10 +1138,10 @@ let Stock = {
|
|
|
1138
1138
|
let flow_data = [], color_data = [];
|
|
1139
1139
|
date_data = [];
|
|
1140
1140
|
j["flow_data"].forEach(function (item) {
|
|
1141
|
-
if (item
|
|
1142
|
-
date_data.push(item
|
|
1143
|
-
flow_data.push(Util.to_ten_thousand(item
|
|
1144
|
-
color_data.push(item
|
|
1141
|
+
if (item.value !== 0) {
|
|
1142
|
+
date_data.push(item.date);
|
|
1143
|
+
flow_data.push(Util.to_ten_thousand(item.value, 2));
|
|
1144
|
+
color_data.push(item.value > 0 ? "#E74C3C" : "#1ABB9C");
|
|
1145
1145
|
}
|
|
1146
1146
|
});
|
|
1147
1147
|
Stock["margin_month_flow_chart"] = Util.chart_basic_bar(Stock["margin_month_flow_chart"], "margin_month_flow_bar_chart", date_data, flow_data, "增幅(单位:万)", color_data);
|
|
@@ -1174,17 +1174,17 @@ let Stock = {
|
|
|
1174
1174
|
{"name": "涨跌", "table_sort": 1},
|
|
1175
1175
|
]
|
|
1176
1176
|
});
|
|
1177
|
-
Util.post("/stock/" + Stock
|
|
1177
|
+
Util.post("/stock/" + Stock.code, {action: "margin_detail"}, function (j) {
|
|
1178
1178
|
let html = [];
|
|
1179
|
-
j
|
|
1179
|
+
j.data.forEach(function (item, index) {
|
|
1180
1180
|
html.push("<tr>");
|
|
1181
|
-
html.push("<td>", Util.seconds_to_format(item
|
|
1182
|
-
html.push("<td title='", item
|
|
1183
|
-
html.push("<td title='", item
|
|
1184
|
-
html.push("<td title='", item
|
|
1181
|
+
html.push("<td>", Util.seconds_to_format(item.date, "%Y-%m-%d"), "</td>");
|
|
1182
|
+
html.push("<td title='", item.rzye, "' data-val='", item.rzye, "'>", Util.to_unit(item.rzye, 3), "</td>");
|
|
1183
|
+
html.push("<td title='", item.rzmre, "' data-val='", item.rzmre, "'>", Util.to_unit(item.rzmre, 3), "</td>");
|
|
1184
|
+
html.push("<td title='", item.rzche, "' data-val='", item.rzche, "'>", Util.to_unit(item.rzche, 3), "</td>");
|
|
1185
1185
|
let net_rzye = "--", gap_rzye = 0;
|
|
1186
|
-
if (j
|
|
1187
|
-
gap_rzye = item
|
|
1186
|
+
if (j.data[index + 1] && j.data[index + 1]["rzye"]) {
|
|
1187
|
+
gap_rzye = item.rzye - j.data[index + 1]["rzye"];
|
|
1188
1188
|
if (gap_rzye > 0) {
|
|
1189
1189
|
net_rzye = "<b class='text-danger'>+" + Util.to_unit(gap_rzye, 3) + "</b>";
|
|
1190
1190
|
} else if (gap_rzye < 0) {
|
|
@@ -1192,18 +1192,18 @@ let Stock = {
|
|
|
1192
1192
|
}
|
|
1193
1193
|
}
|
|
1194
1194
|
html.push("<td title='", gap_rzye, "' data-val='", gap_rzye, "'>", net_rzye, "</td>");
|
|
1195
|
-
html.push("<td title='", item
|
|
1196
|
-
html.push("<td title='", item
|
|
1197
|
-
let text_color = Util.text_color(item
|
|
1198
|
-
html.push("<td><b class='", text_color, "'>", item
|
|
1199
|
-
item
|
|
1200
|
-
html.push("<td><b class='", text_color, "'>", item
|
|
1195
|
+
html.push("<td title='", item.rqye, "' data-val='", item.rqye, "'>", (item.rqye > 0 ? Util.to_unit(item.rqye, 3) : "--"), "</td>");
|
|
1196
|
+
html.push("<td title='", item.rqyl, "' data-val='", item.rqyl, "'>", Util.to_unit(item.rqyl, 3), "</td>");
|
|
1197
|
+
let text_color = Util.text_color(item.p_change);
|
|
1198
|
+
html.push("<td><b class='", text_color, "'>", item.close, "</b></td>");
|
|
1199
|
+
item.p_change = item.p_change > 0 ? ("+" + Util.to_float(item.p_change, 2)) : Util.to_float(item.p_change, 2);
|
|
1200
|
+
html.push("<td><b class='", text_color, "'>", item.p_change, "%</b></td>");
|
|
1201
1201
|
html.push("</tr>");
|
|
1202
1202
|
});
|
|
1203
1203
|
Util.render_table_html("margin_modal_body_body", html);
|
|
1204
|
-
if (j
|
|
1205
|
-
let margin_modal_summary = " [当前最新(" + Util.seconds_to_format(j
|
|
1206
|
-
let gap_rzye = j
|
|
1204
|
+
if (j.data.length > 1) {
|
|
1205
|
+
let margin_modal_summary = " [当前最新(" + Util.seconds_to_format(j.data[0]["date"], "%Y-%m-%d") + ")的融资余额: <b class='text-info'>" + Util.to_unit(j.data[0]["rzye"]) + "</b>";
|
|
1206
|
+
let gap_rzye = j.data[0]["rzye"] - j.data[1]["rzye"];
|
|
1207
1207
|
if (gap_rzye > 0) {
|
|
1208
1208
|
margin_modal_summary += ",相对于前一天余额增加 <b class='text-danger'>+" + Util.to_unit(gap_rzye) + "</b>";
|
|
1209
1209
|
} else if (gap_rzye < 0) {
|
|
@@ -1229,15 +1229,15 @@ let Stock = {
|
|
|
1229
1229
|
start_date: $("#hkex_start_date").val(),
|
|
1230
1230
|
end_date: $("#hkex_end_date").val()
|
|
1231
1231
|
};
|
|
1232
|
-
Util.post("/stock/" + Stock
|
|
1232
|
+
Util.post("/stock/" + Stock.code, payload, function (j) {
|
|
1233
1233
|
Stock["hkex_holding_chart"].hideLoading();
|
|
1234
1234
|
let date_data = [], volume_data = [], price_data = [];
|
|
1235
|
-
j
|
|
1236
|
-
date_data.push(Util.seconds_to_format(item
|
|
1237
|
-
volume_data.push(item
|
|
1238
|
-
price_data.push(item
|
|
1235
|
+
j.data.forEach(function (item) {
|
|
1236
|
+
date_data.push(Util.seconds_to_format(item.date, "%Y-%m-%d"));
|
|
1237
|
+
volume_data.push(item.volume);
|
|
1238
|
+
price_data.push(item.price);
|
|
1239
1239
|
});
|
|
1240
|
-
let hkex_holding_summary = "[" + Util.pack_html_link(j
|
|
1240
|
+
let hkex_holding_summary = "[" + Util.pack_html_link(j.url + "&code=" + Stock.code + "&name=" + Stock["name"], Stock["name"]) + "]";
|
|
1241
1241
|
if (j["latest"].length > 0) {
|
|
1242
1242
|
let latest_html = "最新(" + Util.seconds_to_format(j["latest"][0]["date"], "%Y-%m-%d") + "): <span style='color: #FFF;' class='label label-info'>" + Util.to_hundred_million(j["latest"][0]["volume"], 4) + "</span>亿股";
|
|
1243
1243
|
let dist_tips = "";
|
|
@@ -1260,9 +1260,9 @@ let Stock = {
|
|
|
1260
1260
|
let flow_data = [], color_data = [];
|
|
1261
1261
|
date_data = [];
|
|
1262
1262
|
j["flow_data"].forEach(function (item) {
|
|
1263
|
-
date_data.push(item
|
|
1264
|
-
flow_data.push(item
|
|
1265
|
-
color_data.push(item
|
|
1263
|
+
date_data.push(item.date);
|
|
1264
|
+
flow_data.push(item.value);
|
|
1265
|
+
color_data.push(item.value > 0 ? "#E74C3C" : "#1ABB9C");
|
|
1266
1266
|
});
|
|
1267
1267
|
Stock["hkex_holding_month_flow_chart"] = Util.chart_basic_bar(Stock["hkex_holding_month_flow_chart"], "hkex_holding_month_flow_chart", date_data, flow_data, "增幅", color_data);
|
|
1268
1268
|
if ($("#hkex_holding_modal_body").length === 0) {
|
|
@@ -1291,15 +1291,15 @@ let Stock = {
|
|
|
1291
1291
|
{"name": "持股比例", "table_sort": 1, "title": "内地港股通账户持仓股数 / 流通股本数"},
|
|
1292
1292
|
]
|
|
1293
1293
|
});
|
|
1294
|
-
Util.post("/stock/" + Stock
|
|
1294
|
+
Util.post("/stock/" + Stock.code, {action: "hk_mutual"}, function (j) {
|
|
1295
1295
|
let html = [];
|
|
1296
|
-
j
|
|
1296
|
+
j.data.forEach(function (item, index) {
|
|
1297
1297
|
html.push("<tr>");
|
|
1298
|
-
html.push("<td>", Util.seconds_to_format(item
|
|
1299
|
-
html.push("<td title='", item
|
|
1298
|
+
html.push("<td>", Util.seconds_to_format(item.date, "%Y-%m-%d"), "</td>");
|
|
1299
|
+
html.push("<td title='", item.volume, "' data-val='", item.volume, "'>", Util.to_ten_thousand(item.volume, 4), "万股</td>");
|
|
1300
1300
|
let net_volume = "--", gap_volume = 0;
|
|
1301
|
-
if (j
|
|
1302
|
-
gap_volume = item
|
|
1301
|
+
if (j.data[index + 1] && j.data[index + 1]["volume"]) {
|
|
1302
|
+
gap_volume = item.volume - j.data[index + 1]["volume"];
|
|
1303
1303
|
if (gap_volume > 0) {
|
|
1304
1304
|
net_volume = "<b class='text-danger'>+" + Util.to_ten_thousand(gap_volume, 4) + "万股</b>";
|
|
1305
1305
|
} else if (gap_volume < 0) {
|
|
@@ -1307,16 +1307,16 @@ let Stock = {
|
|
|
1307
1307
|
}
|
|
1308
1308
|
}
|
|
1309
1309
|
html.push("<td data-val='", gap_volume, "'>", net_volume, "</td>");
|
|
1310
|
-
let text_color = Util.text_color(item
|
|
1311
|
-
html.push("<td><b class='", text_color, "'>", item
|
|
1312
|
-
item
|
|
1313
|
-
html.push("<td><b class='", text_color, "'>", item
|
|
1314
|
-
html.push("<td>", item
|
|
1310
|
+
let text_color = Util.text_color(item.p_change);
|
|
1311
|
+
html.push("<td><b class='", text_color, "'>", item.close, "</b></td>");
|
|
1312
|
+
item.p_change = item.p_change > 0 ? ("+" + item.p_change) : item.p_change;
|
|
1313
|
+
html.push("<td><b class='", text_color, "'>", item.p_change, "%</b></td>");
|
|
1314
|
+
html.push("<td>", item.ratio, "%</td>");
|
|
1315
1315
|
html.push("</tr>");
|
|
1316
1316
|
});
|
|
1317
|
-
if (j
|
|
1318
|
-
let hkex_holding_modal_summary = " [当前最新(" + Util.seconds_to_format(j
|
|
1319
|
-
let gap_volume = j
|
|
1317
|
+
if (j.data.length > 1) {
|
|
1318
|
+
let hkex_holding_modal_summary = " [当前最新(" + Util.seconds_to_format(j.data[0]["date"], "%Y-%m-%d") + ")的持股比例: <b class='text-info'>" + j.data[0]["ratio"] + "%</b>";
|
|
1319
|
+
let gap_volume = j.data[0]["volume"] - j.data[1]["volume"];
|
|
1320
1320
|
if (gap_volume > 0) {
|
|
1321
1321
|
hkex_holding_modal_summary += ",相对于前一天持股增加 <b class='text-danger'>+" + Util.to_ten_thousand(gap_volume) + "万股</b>";
|
|
1322
1322
|
} else if (gap_volume < 0) {
|