新能源与储能入市交易:现货报价、优化建模与结算核对实战
2026/9/23 3:41:01 网站建设 项目流程

简介:白皮书系统梳理了新能源及储能参与电力市场交易的核心知识体系,涵盖新能源概念与电力市场角色、储能技术原理及应用场景,并结合国内外交易现状剖析了出力预测难、市场机制不完善等挑战,同时整理了补贴、税收优惠、绿色证书等政策支持路径,适合能源行业从业者、电力市场研究人员及相关专业学生阅读参考。资源为PDF格式,共1个文件,包体大小2.09MB,便于在电脑、平板等多终端查阅。目前已有95人学习浏览,内容从新能源、储能的定义特征讲起,到现货市场、辅助服务市场等交易层次,再到未来清洁高效智能电力系统的展望逐层深入,既可用作入门科普,也可为理解新能源参与市场交易机制提供结构化知识框架,帮助读者快速建立从发电侧、储能侧到市场规则的整体认知。

1. 新能源及储能参与电力市场交易,为什么从“保障消纳”变成了“报价博弈”

过去五年里,新能源电站上线交易系统的工作流大多是“预测曲线+调度执行”,光伏和风电按保障小时数拿固定电价,储能作为附属设施配合调峰。现在各省现货市场陆续转入正式运行,新能源及储能参与电力市场交易的核心变成:在日前提交可竞价的申报曲线,在实时接受偏差结算,在月结账单里核对上百个子科目。这不再只是发电业务,而是带有交易属性的系统工程。电网侧、独立储能业主、聚合商和IT供应商都在补同一门课:把风电光伏的物理出力边界转成价格信号下的决策参数。本文会沿着交易品种、优化建模、结算核对和参数设置四条线,把一套可执行的落地方法拆开讲。

2. 交易品种与价格机制:新能源及储能入市的三道基础题

在新能源及储能参与电力市场交易的工程链条里,第一步不是训练预测模型,而是把所在省份的交易品种拆成可计算的字段。各省中长期规则、现货市场推进节奏不同,但骨架一致:一份合约差价结算单、一张日前出清结果、一张实时平衡账单,再加上辅助服务补偿与分摊。想清楚这三个市场的收入来源,后面所有模型才不会把参数方向搞反。

2.1 中长期与现货双层市场:储能收益为何不直接等于峰谷价差

新能源电站目前大部分电量仍然通过中长期合同锁定,典型比例在70%到90%之间,现货市场只对偏差电量起作用。这种安排保护了存量电站的收益下限,但也意味着新能源真正能从日内价格波动里拿到钱的部分并不多。储能没有对应的“优先消纳”政策,它在中长期里靠购电合同和售电合同分别锁定充电成本和放电收入,而更多收益要靠现货市场的96点价差来实现。

现货市场分为日前和实时两层。日前市场根据机组报价、负荷预测和新能源出力预测,安全约束经济调度出清得到96点价格;实际发电与日前计划的偏差进入实时市场处理。因此结算天然由三块构成:中长期合约差价结算、日前市场能量费用、实时平衡费用。独立储能做交易策略时,不能只盯现货价格曲线,还要把中长期合同分解后的充放电量一并纳入。

一个常见的认知误区是把储能收益简化成“峰谷价差收益”。实际上充电和放电都发生在现货市场里的特定时段,充电要多付一个效率折损。以92%的单程效率计算,往返效率为84.6%,当充电段价格为100元/MWh时,放电段至少要高于118元/MWh才有套利空间。如果再算上政府性基金及附加、辅助服务分摊等成本,实际价差门槛还要上浮5到15元。所以交易模型里必须显式放效率参数,而不是事后调整价差。

2.2 节点电价与限电率:新能源交易决策要吃透的两个信号

节点边际电价是现货市场里最直接影响结算金额的变量。它由能量分量、阻塞分量和网损分量组成,网架阻塞严重时,同一省份不同节点价差能拉到几百元/MWh。对独立储能而言,充电是负荷行为,放电是电源行为,两个方向在同一节点下被计费;对新能源而言,最终结算使用所在节点的节点电价,而不是全省统一价。

结算系统因此在数据结构上要保留三样东西:节点ID、96点节点电价、出清电量。很多交易平台默认拉取全网统一价格做分析,这在无阻塞时段问题不大,但一旦遇到输电断面越限,节点价差会成为策略的主要驱动。储能如果在充电时段恰好落在受阻塞的负荷侧,可能出现“低买”变成“高价买电”的反直觉结果。

限电率是新能源电站区别于常规电源的第二约束。现货市场放开后,限电不再只是调度指令,而是通过市场出清结果体现:新能源申报低价时优先出清,申报高价时可能被挤出。高渗透率省份的午间光伏时段,出清价跌到接近零甚至负数,这时候新能源与其抢发电量,不如主动压低申报价格换取晚高峰的腾挪空间。交易系统需要把限电率做成实时特征,而不是事后统计。

2.3 调频、备用与容量租赁:储能收益的三个可选场景

参与品种收益公式决定收益的关键量时间尺度对储能系统的约束
现货能量(峰谷套利)放电时段电价−充电时段电价,乘以实际电量再扣除损耗96点价格形状、充放电效率、SOC区间日清月结PCS功率、连续充放电时长
调频辅助服务里程补偿+容量补偿+机会成本补偿调节速率、调节精度、可用时间秒级响应,月度结算需要预留功率和SOC空间
备用/爬坡容量补偿×竞价中标容量备用容量、持续时间、调用概率小时级,月结中标后不得参与能量市场套利
容量租赁/共享储能合同租赁费用,通常按MW/年计价可用率、容量衰减、运维水平年度或季度实际可放出容量不能低于合同承诺

辅助服务和现货套利在同一个电池上存在天然冲突。调频需要功率快速双向调节,连续几小时的大功率充电放电会影响SOC可用范围;备用容量中标后,这部分功率不能再去现货市场里充当能量交易。实际项目中,独立储能通常先把主容量用于现货套利,再拿出一小部分调节能力做调频,或者把夜间低谷时段预留为备用。容量租赁则更像本金,用它覆盖固定成本,现货和辅助服务只贡献增量利润。

3. 从日前预测到申报曲线:新能源及储能交易模型的工程实现

交易系统的核心模块通常叫“交易模型”,它的输入是物理预测和边界条件,输出是一组功率-价格分段申报曲线。模型工程的难点不在于优化算法本身,而在于把效率、SOC、爬坡、申报截止时间这些运营细节落成参数。

3.1 出力预测与电价预测:交易模型的两个上游输入

新能源出力预测是交易申报的第一输入。行业内最常用的方案是数值天气预报加统计修正:从气象机构获取风速、辐照、温度等格点预报,再通过梯度提升回归或者GRU网络做后处理,生成未来72小时出力曲线。预测结果至少要给出分位数,不能只给期望值,因为日前申报需要在预测值上预留偏差空间,出力高估和低估在实时结算里的惩罚是不对称的。

电价预测是第二输入。现货出清价格主要受负荷、新能源出力、机组检修和报价行为影响,工程上用XGBoost做基模型已经足够,额外加入该时段气温、节假日标记和历史同期价格,就能得到可用的96点价格曲线。关键一点:要把新能源出力和价格联合起来看,光伏大发的中午时段往往对应低价,两者的误差高度相关。做交易策略时,应使用同一组风电光伏预测样本来生成对应的价格场景,而不是分别用均值预测。

3.2 用线性规划求解储能96点充放电计划

拿到预测价格后,独立储能充放电策略可以建模成一个线性规划:给定96点价格,决定每一段的充电功率和放电功率,使总收益最大化,同时满足SOC上下限、充放电功率上下限和日末SOC约束。下面是可运行的参考实现。

import numpy as np from scipy.optimize import linprog def optimize_battery(prices, energy_kwh=1000.0, pmax_kw=250.0, eta=0.92, soc0=0.5, soc_min=0.1, soc_max=0.9, soc_end_min=0.4, dt=0.25): """ 参数: prices: 96点日前价格数组, 单位 元/MWh energy_kwh: 电站可用的额定容量, kWh pmax_kw: PCS 最大充/放电功率, kW eta: 单程充放电效率(0~1), 往返效率约等于 eta*eta soc0, soc_min, soc_max: 起始SOC、下限、上限 soc_end_min: 日末最低SOC, 用于给次日留出调节空间 dt: 单个时段时长, 小时, 通常为0.25 返回: ch_kw, dis_kw: 96点充电和放电功率数组, 单位kW """ n = len(prices) # 目标系数: 充电成本为正, 放电收益为负, 均转换为元/kWh c = np.concatenate([prices / 1000.0 * dt, -prices / 1000.0 * dt]) A_ub, b_ub = [], [] # 1) 充放电功率上限 for i in range(n): row_ch = np.zeros(2 * n) row_ch[i] = 1.0 A_ub.append(row_ch) b_ub.append(pmax_kw) row_dis = np.zeros(2 * n) row_dis[n + i] = 1.0 A_ub.append(row_dis) b_ub.append(pmax_kw) # 2) SOC递推约束: SOC(k) = soc0 + Σ(充电增 - 放电减) ch_gain = eta * dt / energy_kwh # 每充1kW对SOC的增量 dis_loss = dt / (eta * energy_kwh) # 每放1kW对SOC的减少量 for k in range(n): # SOC 上限: soc0 + 累积增量 <= soc_max row_ub = np.zeros(2 * n) row_ub[0:k+1] = ch_gain row_ub[n:n+k+1] = -dis_loss A_ub.append(row_ub) b_ub.append(soc_max - soc0) # SOC 下限: soc0 + 累积增量 >= soc_min row_lb = np.zeros(2 * n) row_lb[0:k+1] = -ch_gain row_lb[n:n+k+1] = dis_loss A_ub.append(row_lb) b_ub.append(soc0 - soc_min) # 3) 日末SOC约束: 最后 SOC >= soc_end_min row_end = np.zeros(2 * n) row_end[0:n] = ch_gain row_end[n:2*n] = -dis_loss A_ub.append(-row_end) b_ub.append(-(soc_end_min - soc0)) bounds = [(0, None)] * (2 * n) res = linprog(c, A_ub=A_ub, b_ub=b_ub, bounds=bounds, method='highs') if not res.success: raise RuntimeError(f"优化不收敛: {res.message}") ch_kw = res.x[:n] dis_kw = res.x[n:] return ch_kw, dis_kw

目标系数把价格除以1000再乘以dt,单位统一为元/kWh,这样目标值就是全日度电收益。功率约束限制PCS输出不能超过额定功率。SOC约束把电池容量、充放电效率和时段长度映射成线性不等式,确保每一个时段结束时SOC都在安全区间。日末SOC约束防止模型在最后几个时段不计后果地放电,影响第二天的申报能力。

这里的易错点是效率口径。eta传入的是单程效率,如果误传往返效率,充电增益和放电损耗会被同时放大或缩小,优化结果偏保守或偏激进。我在实际项目里统一约定eta为单程效率,放电侧损耗单独按1/eta折算,代码里的dis_loss就是这么来的。

3.3 申报曲线的分段参数与执行约束

现货申报要求把充放电计划转成分段格式,常见的形式是电机组分成3到10段,每段给出功率和价格。储能申报要把充电段和放电段分开,放电价格段单调递增,充电价格段在最右侧按成本计。LP输出的连续功率曲线需要量化为阶梯段,量化步长常见为额定功率的10%或20%。

申报参数取值示例含义设置不当的后果
分段数放电5段,充电5段每段一个功率-价格对分段太少,出清结果偏离最优调度
最低价格0元/MWh低价时段保证优先出清段价设高导致负价时段不能充电
充电段价格负值或0把负电价视作充电收益用正报价会错失低价充电窗口
爬坡率限值不超过PCS每分钟变化率满足电网安全校核申报超出物理极限,实时偏差惩罚

申报完成后,系统还要做一次可执行性校验,把96点出清功率与PCS遥测、AGC容量进行比对。出清结果如果超出物理能力,实时市场会按偏差电量清算,这一项损失往往比策略优化省出来的钱更大,所以校验环节不能省。

4. 结算核对与异常识别:新能源及储能交易系统的数据校验层

交易系统的另一个硬任务是结算核对。电力交易中心每天生成结算明细,包含成百上千条记录,而本地SCADA、电能量采集系统各有一份电量数据。三套数据对不上,月结时就会产生“争议电量”,处理成本极高。因此结算模块要建在“先核对、后入账”的流程上。

4.1 结算文件解析:把96点流量还原成可核对的账单

交易中心的结算文件通常以XML或Excel导出,字段包括结算户名、交易品种、结算电量、结算电价、结算电费。储能的文件尤其要区分充电方向和放电方向,充电电量作为负荷购电,结算方向为负;放电电量作为电源出售,结算方向为正。解析后先做日汇总,再与本地计量点数据做交叉验证。

可用的SQL核对逻辑如下,假设结算明细已导入t_settlement_detail表:

WITH s AS ( SELECT trade_date, resource_id, SUM(CASE WHEN direction = 'DISCHARGE' THEN energy_mwh ELSE 0 END) AS dis_energy, SUM(CASE WHEN direction = 'CHARGE' THEN energy_mwh ELSE 0 END) AS ch_energy, SUM(fee_yuan) AS total_settled FROM t_settlement_detail WHERE market = 'spot' GROUP BY trade_date, resource_id ) SELECT s.trade_date, s.resource_id, s.dis_energy, m.scada_delivery_kwh / 1000.0 AS scada_discharge_mwh, ABS(s.dis_energy - m.scada_delivery_kwh / 1000.0) AS diff_mwh FROM s JOIN t_meter_daily m ON s.trade_date = m.trade_date AND s.resource_id = m.resource_id WHERE ABS(s.dis_energy - m.scada_delivery_kwh / 1000.0) > 0.5;

查询里的0.5 MWh是常见容差,用来吸收计量误差和结算时点差异。如果每天都差出几个MWh,优先排查时间基准:交易中心默认北京时间,个别SCADA系统按UTC存储时间戳,会导致每天的偏差恰好是8小时的固定偏移。这是我在现场遇到最多的结算核对问题。

4.2 结算科目拆分:独立储能最容易算漏的四个科目

结算科目计算口径独立储能最容易忽略的要点
中长期合约差价(合同电价−现货参考价)×合同分解电量充电时段的购电合同也可能参与差价结算
日前市场能量日前出清价×日前出清电量充电和放电要分开计,不能按净电量算
实时平衡实时节点价×(实际电量−日前电量)偏差部分按实时价结算,方向不同结果不同
政府性基金及附加按结算电量或购电量分摊储能充电量作为负荷,也要分摊这部分费用

很多储能项目的测算模型没有考虑政府性基金及附加,月结账单出来后会惊讶地发现充电成本比预期高。这部分费用跟辅助服务分摊一样,是作为独立科目进入结算单的,交易模型应在充电成本里显式加上预测值,否则套利阈值会被低估。

4.3 负电价与限电时段的自动识别规则

新能源占比高的省份,午间光伏大发时现货价格经常跌到0元甚至负值。对储能来说,负电价意味着充电不再是成本,而是负成本——充电功率越大,当日结算收益越高。但识别规则要在交易系统里做成自动事件:当预测价格低于阈值且持续时间超过某个区间,自动标记为负电价充电窗口,并把LP策略里的充电功率上限放开。

新能源电站的应对逻辑正好相反,负电价时段应申报高价避免出清,把发电量挪到高电价时段;如果日前预测已经看到负价,还可以适当下调日前申报电量以减少实时偏差。结算数据落地后,把负价时段限电补偿、充电电量、放电电量放在同一张报表里,一眼就能看出策略是否执行到位。

提示:负价时段储能充电产生的“收益”本质上是成本节省,不是账单里的正向电费。做经营分析时建议把充电收益和放电收益分开统计,避免被财务口径误判。

5. 入市前要核对的五组参数,以及读白皮书时抓重点

无论交易模型写得多完整,真实上线前总要过一遍参数核对。以下五组参数是新能源及储能参与电力市场交易项目里最容易埋雷的地方。

第一组是申报截止时间与预测更新节奏。多数省级现货市场要求交易日在申报前数小时提交运行日计划,而新能源出力预测在截止时间之后还会更新。如果锁死日前预测而不做滚动修正,遇到天气突变就会产生大偏差。常见做法是预测系统按小时滚动,在申报截止前取最新快照生成报价。

第二组是电池SOC初值和真实可用容量。策略模块读取EMS的SOC值,而不是用设计容量推算。电池经过一段运行后可用容量会衰减,系统若仍按铭牌容量优化,SOC约束会失准,充电计划可能超过实际可充空间。

第三组是中长期分解曲线。储能的中长期购售电合同要按96点分解,分解结果直接决定现货市场里的剩余套利空间。若分解曲线与现货低价时段重叠,充电成本就会被合同价格锁死,价差策略失效。

第四组是AGC调节范围。申报调频容量必须小于PCS可调范围,且要预留SOC活动空间。若申报容量超出实际调节能力,性能考核指标会连续不达标,补偿变成考核扣罚。

第五组是结算争议时限。各省交易规则通常规定结算单发布后有一定期限内可提出争议,逾期不再受理。结算核对脚本要在账单发布当天自动触发,值班人员确认无异常后归档,绝不能拖到月底。

关于交易白皮书和规则汇编的读法,我习惯不从头翻,而是先查五个位置:结算公式章节、节点电价定义、市场限价表、市场主体资格条款、争议处理流程。白皮书的价值在于完整描述了一套状态转换规则,只要把这五个位置提取出来,再和系统参数或代码里的常量对应,就能很快定位边界条件。阅读时发现新版本规则与旧版不一致,应该在参数管理表里记录版本号和生效时间,交易模型按日期路由到不同版本参数,这样才不会在规则切换的时间节点上把报价算错。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询