事情是这样的,今天突发奇想,想用ai 做这个:帮我做一张图表,内容是中信证券A股和H股的比值月线图,时间从2012年开始至今,要充分考虑人民币和港元的汇率因素。
用了9个免费国产ai,只有扣子空间干完了,他先做了个详细的excel,然后分别查找a股,h股,汇率的数据,最后生成表格。我看了下,大致正确。其他的大模型都是直接罢工,给了一大堆没用的建议。豆包还好,给出了几个关键时间点的数据。灵光能绘图,但是数据能力不行。是因为免费的原因么?
用了9个免费国产ai,只有扣子空间干完了,他先做了个详细的excel,然后分别查找a股,h股,汇率的数据,最后生成表格。我看了下,大致正确。其他的大模型都是直接罢工,给了一大堆没用的建议。豆包还好,给出了几个关键时间点的数据。灵光能绘图,但是数据能力不行。是因为免费的原因么?
1
赞同来自: 海浪9999
送你了
import React, { useState } from 'react';
import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer } from 'recharts';
const CiticAHRatioChart = () => {
// 示例数据:从2012年至2024年的月度数据
// 实际应用中需要替换为真实的历史数据
const generateSampleData = () => {
const data = [];
const startYear = 2012;
const endYear = 2024;
for (let year = startYear; year <= endYear; year++) {
for (let month = 1; month <= 12; month++) {
if (year === endYear && month > 12) break;
const date =
// 模拟数据(实际需要真实历史数据)
// A股价格(人民币)
const aPrice = 15 + Math.random() * 15 + Math.sin((year - 2012) * 0.5 + month * 0.1) * 5;
// H股价格(港币)
const hPrice = 12 + Math.random() * 10 + Math.sin((year - 2012) * 0.5 + month * 0.1) * 4;
// 人民币兑港币汇率(1 CNY = X HKD)
// 历史上大致在 1.1 到 1.25 之间波动
const exchangeRate = 1.15 + Math.sin((year - 2012) * 0.3 + month * 0.05) * 0.08;
// A/H比值(调整汇率后)
// A股价格(CNY)/ [H股价格(HKD)/ 汇率] = A股价格 * 汇率 / H股价格
const ahRatio = (aPrice * exchangeRate) / hPrice;
// 未调整汇率的比值(仅供对比)
const ahRatioUnadjusted = aPrice / hPrice;
data.push({
date,
ahRatio: ahRatio.toFixed(4),
ahRatioUnadjusted: ahRatioUnadjusted.toFixed(4),
aPrice: aPrice.toFixed(2),
hPrice: hPrice.toFixed(2),
exchangeRate: exchangeRate.toFixed(4)
});
}
}
return data;
};
const [data] = useState(generateSampleData());
const [showUnadjusted, setShowUnadjusted] = useState(false);
const CustomTooltip = ({ active, payload, label }) => {
if (active && payload && payload.length) {
const data = payload[0].payload;
return (
<div className="bg-white p-4 border border-gray-300 rounded shadow-lg">
<p className="font-bold text-gray-800 mb-2">{label}</p>
<p className="text-blue-600">
A/H比值(调整汇率): {data.ahRatio}
</p>
{showUnadjusted && (
<p className="text-orange-500">
A/H比值(未调整): {data.ahRatioUnadjusted}
</p>
)}
<p className="text-gray-600 text-sm mt-2">
A股价格: ¥{data.aPrice}
</p>
<p className="text-gray-600 text-sm">
H股价格: HK${data.hPrice}
</p>
<p className="text-gray-600 text-sm">
汇率(CNY/HKD): {data.exchangeRate}
</p>
</div>
);
}
return null;
};
return (
<div className="w-full h-full bg-gradient-to-br from-slate-50 to-blue-50 p-6">
<div className="max-w-7xl mx-auto">
<div className="bg-white rounded-lg shadow-xl p-6">
<div className="mb-6">
<h1 className="text-3xl font-bold text-gray-800 mb-2">
中信证券 A/H股比值月线图
</h1>
<p className="text-gray-600 mb-4">
时间范围:2012年1月 - 2024年12月(考虑人民币/港币汇率因素)
</p>
<div className="bg-blue-50 border border-blue-200 rounded-lg p-4 mb-4">
<h3 className="font-semibold text-blue-900 mb-2">说明:</h3>
<ul className="text-sm text-blue-800 space-y-1">
<li>• A股代码:600030(上海证券交易所)</li>
<li>• H股代码:06030(香港联合交易所)</li>
<li>• 蓝色线表示调整汇率后的A/H比值 = A股价格(CNY) × 汇率(CNY/HKD) ÷ H股价格(HKD)</li>
<li>• 橙色线表示未调整汇率的名义比值(仅供对比)</li>
<li>• 当前显示为示例数据,实际使用需替换为真实历史数据</li>
</ul>
</div>
<div className="flex items-center gap-4 mb-4">
<label className="flex items-center gap-2 cursor-pointer">
<input
type="checkbox"
checked={showUnadjusted}
onChange={(e) => setShowUnadjusted(e.target.checked)}
className="w-4 h-4"
/>
<span className="text-sm text-gray-700">
显示未调整汇率的比值(对比用)
</span>
</label>
</div>
</div>
<ResponsiveContainer width="100%" height={500}>
<LineChart data={data} margin={{ top: 5, right: 30, left: 20, bottom: 5 }}>
<CartesianGrid strokeDasharray="3 3" stroke="#e0e0e0" />
<XAxis
dataKey="date"
tick={{ fontSize: 12 }}
interval={Math.floor(data.length / 20)}
angle={-45}
textAnchor="end"
height={80}
/>
<YAxis
label={{ value: 'A/H比值', angle: -90, position: 'insideLeft' }}
tick={{ fontSize: 12 }}
/>
<Tooltip content={<CustomTooltip />} />
<Legend />
<Line
type="monotone"
dataKey="ahRatio"
stroke="#2563eb"
strokeWidth={2}
name="A/H比值(调整汇率)"
dot={false}
/>
{showUnadjusted && (
<Line
type="monotone"
dataKey="ahRatioUnadjusted"
stroke="#f97316"
strokeWidth={2}
name="A/H比值(未调整汇率)"
dot={false}
strokeDasharray="5 5"
/>
)}
</LineChart>
</ResponsiveContainer>
<div className="mt-6 grid grid-cols-1 md:grid-cols-3 gap-4">
<div className="bg-gradient-to-br from-blue-50 to-blue-100 p-4 rounded-lg border border-blue-200">
<h4 className="font-semibold text-blue-900 mb-1">当前A/H比值</h4>
<p className="text-2xl font-bold text-blue-700">
{data[data.length - 1].ahRatio}
</p>
<p className="text-xs text-blue-600 mt-1">调整汇率后</p>
</div>
<div className="bg-gradient-to-br from-green-50 to-green-100 p-4 rounded-lg border border-green-200">
<h4 className="font-semibold text-green-900 mb-1">平均比值</h4>
<p className="text-2xl font-bold text-green-700">
{(data.reduce((sum, d) => sum + parseFloat(d.ahRatio), 0) / data.length).toFixed(4)}
</p>
<p className="text-xs text-green-600 mt-1">2012-2024期间</p>
</div>
<div className="bg-gradient-to-br from-purple-50 to-purple-100 p-4 rounded-lg border border-purple-200">
<h4 className="font-semibold text-purple-900 mb-1">当前汇率</h4>
<p className="text-2xl font-bold text-purple-700">
{data[data.length - 1].exchangeRate}
</p>
<p className="text-xs text-purple-600 mt-1">CNY/HKD</p>
</div>
</div>
<div className="mt-6 p-4 bg-yellow-50 border border-yellow-200 rounded-lg">
<p className="text-sm text-yellow-800">
<strong>注意:</strong>此图表使用模拟数据作为示例。要显示真实的历史数据,您需要:
</p>
<ol className="text-sm text-yellow-800 mt-2 ml-4 list-decimal space-y-1">
<li>获取中信证券A股(600030)和H股(06030)的历史月度收盘价</li>
<li>获取对应时期的人民币兑港币历史汇率数据</li>
<li>替换代码中的generateSampleData函数,使用真实数据</li>
</ol>
</div>
</div>
</div>
</div>
);
};
export default CiticAHRatioChart;
import React, { useState } from 'react';
import { LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, Legend, ResponsiveContainer } from 'recharts';
const CiticAHRatioChart = () => {
// 示例数据:从2012年至2024年的月度数据
// 实际应用中需要替换为真实的历史数据
const generateSampleData = () => {
const data = [];
const startYear = 2012;
const endYear = 2024;
for (let year = startYear; year <= endYear; year++) {
for (let month = 1; month <= 12; month++) {
if (year === endYear && month > 12) break;
const date =
${year}-${String(month).padStart(2, '0')};// 模拟数据(实际需要真实历史数据)
// A股价格(人民币)
const aPrice = 15 + Math.random() * 15 + Math.sin((year - 2012) * 0.5 + month * 0.1) * 5;
// H股价格(港币)
const hPrice = 12 + Math.random() * 10 + Math.sin((year - 2012) * 0.5 + month * 0.1) * 4;
// 人民币兑港币汇率(1 CNY = X HKD)
// 历史上大致在 1.1 到 1.25 之间波动
const exchangeRate = 1.15 + Math.sin((year - 2012) * 0.3 + month * 0.05) * 0.08;
// A/H比值(调整汇率后)
// A股价格(CNY)/ [H股价格(HKD)/ 汇率] = A股价格 * 汇率 / H股价格
const ahRatio = (aPrice * exchangeRate) / hPrice;
// 未调整汇率的比值(仅供对比)
const ahRatioUnadjusted = aPrice / hPrice;
data.push({
date,
ahRatio: ahRatio.toFixed(4),
ahRatioUnadjusted: ahRatioUnadjusted.toFixed(4),
aPrice: aPrice.toFixed(2),
hPrice: hPrice.toFixed(2),
exchangeRate: exchangeRate.toFixed(4)
});
}
}
return data;
};
const [data] = useState(generateSampleData());
const [showUnadjusted, setShowUnadjusted] = useState(false);
const CustomTooltip = ({ active, payload, label }) => {
if (active && payload && payload.length) {
const data = payload[0].payload;
return (
<div className="bg-white p-4 border border-gray-300 rounded shadow-lg">
<p className="font-bold text-gray-800 mb-2">{label}</p>
<p className="text-blue-600">
A/H比值(调整汇率): {data.ahRatio}
</p>
{showUnadjusted && (
<p className="text-orange-500">
A/H比值(未调整): {data.ahRatioUnadjusted}
</p>
)}
<p className="text-gray-600 text-sm mt-2">
A股价格: ¥{data.aPrice}
</p>
<p className="text-gray-600 text-sm">
H股价格: HK${data.hPrice}
</p>
<p className="text-gray-600 text-sm">
汇率(CNY/HKD): {data.exchangeRate}
</p>
</div>
);
}
return null;
};
return (
<div className="w-full h-full bg-gradient-to-br from-slate-50 to-blue-50 p-6">
<div className="max-w-7xl mx-auto">
<div className="bg-white rounded-lg shadow-xl p-6">
<div className="mb-6">
<h1 className="text-3xl font-bold text-gray-800 mb-2">
中信证券 A/H股比值月线图
</h1>
<p className="text-gray-600 mb-4">
时间范围:2012年1月 - 2024年12月(考虑人民币/港币汇率因素)
</p>
<div className="bg-blue-50 border border-blue-200 rounded-lg p-4 mb-4">
<h3 className="font-semibold text-blue-900 mb-2">说明:</h3>
<ul className="text-sm text-blue-800 space-y-1">
<li>• A股代码:600030(上海证券交易所)</li>
<li>• H股代码:06030(香港联合交易所)</li>
<li>• 蓝色线表示调整汇率后的A/H比值 = A股价格(CNY) × 汇率(CNY/HKD) ÷ H股价格(HKD)</li>
<li>• 橙色线表示未调整汇率的名义比值(仅供对比)</li>
<li>• 当前显示为示例数据,实际使用需替换为真实历史数据</li>
</ul>
</div>
<div className="flex items-center gap-4 mb-4">
<label className="flex items-center gap-2 cursor-pointer">
<input
type="checkbox"
checked={showUnadjusted}
onChange={(e) => setShowUnadjusted(e.target.checked)}
className="w-4 h-4"
/>
<span className="text-sm text-gray-700">
显示未调整汇率的比值(对比用)
</span>
</label>
</div>
</div>
<ResponsiveContainer width="100%" height={500}>
<LineChart data={data} margin={{ top: 5, right: 30, left: 20, bottom: 5 }}>
<CartesianGrid strokeDasharray="3 3" stroke="#e0e0e0" />
<XAxis
dataKey="date"
tick={{ fontSize: 12 }}
interval={Math.floor(data.length / 20)}
angle={-45}
textAnchor="end"
height={80}
/>
<YAxis
label={{ value: 'A/H比值', angle: -90, position: 'insideLeft' }}
tick={{ fontSize: 12 }}
/>
<Tooltip content={<CustomTooltip />} />
<Legend />
<Line
type="monotone"
dataKey="ahRatio"
stroke="#2563eb"
strokeWidth={2}
name="A/H比值(调整汇率)"
dot={false}
/>
{showUnadjusted && (
<Line
type="monotone"
dataKey="ahRatioUnadjusted"
stroke="#f97316"
strokeWidth={2}
name="A/H比值(未调整汇率)"
dot={false}
strokeDasharray="5 5"
/>
)}
</LineChart>
</ResponsiveContainer>
<div className="mt-6 grid grid-cols-1 md:grid-cols-3 gap-4">
<div className="bg-gradient-to-br from-blue-50 to-blue-100 p-4 rounded-lg border border-blue-200">
<h4 className="font-semibold text-blue-900 mb-1">当前A/H比值</h4>
<p className="text-2xl font-bold text-blue-700">
{data[data.length - 1].ahRatio}
</p>
<p className="text-xs text-blue-600 mt-1">调整汇率后</p>
</div>
<div className="bg-gradient-to-br from-green-50 to-green-100 p-4 rounded-lg border border-green-200">
<h4 className="font-semibold text-green-900 mb-1">平均比值</h4>
<p className="text-2xl font-bold text-green-700">
{(data.reduce((sum, d) => sum + parseFloat(d.ahRatio), 0) / data.length).toFixed(4)}
</p>
<p className="text-xs text-green-600 mt-1">2012-2024期间</p>
</div>
<div className="bg-gradient-to-br from-purple-50 to-purple-100 p-4 rounded-lg border border-purple-200">
<h4 className="font-semibold text-purple-900 mb-1">当前汇率</h4>
<p className="text-2xl font-bold text-purple-700">
{data[data.length - 1].exchangeRate}
</p>
<p className="text-xs text-purple-600 mt-1">CNY/HKD</p>
</div>
</div>
<div className="mt-6 p-4 bg-yellow-50 border border-yellow-200 rounded-lg">
<p className="text-sm text-yellow-800">
<strong>注意:</strong>此图表使用模拟数据作为示例。要显示真实的历史数据,您需要:
</p>
<ol className="text-sm text-yellow-800 mt-2 ml-4 list-decimal space-y-1">
<li>获取中信证券A股(600030)和H股(06030)的历史月度收盘价</li>
<li>获取对应时期的人民币兑港币历史汇率数据</li>
<li>替换代码中的generateSampleData函数,使用真实数据</li>
</ol>
</div>
</div>
</div>
</div>
);
};
export default CiticAHRatioChart;
2
赞同来自: happysam2018 、stylexf
@babebu
豆包不行的,很多错误信息,还一本正经胡说八道,我发现现在ai的普遍现象就是对自己不了解的事情,非要说一个所以然,然后全是胡说八道的,qmt交易函数,明明官方说明文档没有的函数,它给我编造一个,然后一直找原因都没找到,最后查官方才知道这是ai自己瞎编出来的函数,官方根本没有。还有一个ai数据被污染问题,现在大量自媒体瞎编乱造,把ai数据库很多都污染了。
7
数据概览与图表分析
2012 - 2014年(相对平稳期):中信证券的 A/H 比值多在 1.0 - 1.2 之间波动。此时 AH 溢价并不极端,甚至在 2013 年初由于 H 股走强,比值曾一度接近 1.0 附近。
2015年(牛市溢价扩张):随着 A 股杠杆牛市的到来,A 股涨幅远超 H 股,比值迅速拉升至 1.35 以上。
2020 - 2022年(高溢价期):这是中信证券 AH 溢价最显著的时期。由于 H 股市场持续低迷而 A 股相对抗跌,比值一度冲高至 1.8 左右。这意味着在汇率换算后,A 股的价格几乎是 H 股的 1.8 倍。
2024 - 2025年(近期回归):随着近期港股市场的估值修复以及对权重券商股的重新定价,中信证券的 A/H 比值出现了明显回落,目前向 1.1 - 1.15 区间靠拢,溢价水平处于近年来的低位。
您可以参考下方生成的图表和详细数据文件:
Download citic_ah_ratio_monthly.csv
(注:图表中的月线走势由关键历史收盘价及汇率数据点插值生成,反映了整体趋势。)
赞同来自: flybirdlee 、yuanhu 、llllpp2016 、happysam2018 、homanking 、 、更多 »
2012 - 2014年(相对平稳期):中信证券的 A/H 比值多在 1.0 - 1.2 之间波动。此时 AH 溢价并不极端,甚至在 2013 年初由于 H 股走强,比值曾一度接近 1.0 附近。
2015年(牛市溢价扩张):随着 A 股杠杆牛市的到来,A 股涨幅远超 H 股,比值迅速拉升至 1.35 以上。
2020 - 2022年(高溢价期):这是中信证券 AH 溢价最显著的时期。由于 H 股市场持续低迷而 A 股相对抗跌,比值一度冲高至 1.8 左右。这意味着在汇率换算后,A 股的价格几乎是 H 股的 1.8 倍。
2024 - 2025年(近期回归):随着近期港股市场的估值修复以及对权重券商股的重新定价,中信证券的 A/H 比值出现了明显回落,目前向 1.1 - 1.15 区间靠拢,溢价水平处于近年来的低位。
您可以参考下方生成的图表和详细数据文件:
Download citic_ah_ratio_monthly.csv
(注:图表中的月线走势由关键历史收盘价及汇率数据点插值生成,反映了整体趋势。)
3
赞同来自: happysam2018 、秋风客 、pppppp
你这需求现阶段肯定需要定开啊,数据喂给AI,让AI写代码画图,直接AI就想做至少现阶段还不太现实,除非你自己写agent,整个流程自己做,在哪个地方找数据,字段定义是什么,再怎么画图。。。。,现阶段,人家程序员业务智能体开发也是收费的,AI撒都能做,那真是现在搞技术的现在就可以直接失业了
Edge
Chrome
Firefox


京公网安备 11010802031449号