资讯详情

资讯详情

新能源与储能的电力市场交易:规则决定收益上限

简介白皮书系统梳理新能源与储能参与电力市场交易的核心概念、市场角色、交易现状与政策展望适合能源行业研究者、电力市场从业者及高校相关专业学生阅读。文档以PDF形式收录共1个文件压缩包大小2.09MB内容结构清晰涵盖新能源出力特性、储能调峰调频价值、现货与辅助服务市场机制、投资回报与政策支持等关键模块帮助读者快速建立电力市场与新能源融合的知识框架。已有97人学习下载可作为行业入门、课题研究与政策分析的实用参考资料。1. 新能源及储能参与电力市场交易规则才是收益的天花板新能源场站和独立储能真正走出「靠补贴算账」的阶段是从进入电力市场交易开始的。很多从业者接手交易申报时都有个错觉发电量高、充放电勤快就能多赚。实际跑完一轮中长期加现货的完整结算之后才发现收益上限根本不是发电能力而是市场规则、预测精度和申报边界共同决定的。这份白皮书把新能源出力特性、储能调节能力与交易品种之间的对应关系梳理成了一套可复用的分析框架从市场架构、申报流程到结算口径都有完整交代。适合正在做新能源项目收益测算的投资分析人员、储能电站的运行负责人以及刚接手电力交易申报、对偏差考核心里还没底的新手交易员。2. 市场三层架构中长期、现货与辅助服务怎么分工2.1 中长期交易基础收益的锚但别把它当保险柜中长期交易是新能源参与市场的第一道门槛通常以年、月、周为周期通过双边协商或集中竞价锁定未来一段时间的电量与价格。它的价值是确定性签约那一刻未来收益的底线就锁定了。对新能源项目来说这部分相当于还贷现金流的安全垫银行做项目融资时也主要看中长期合约的覆盖比例。但把中长期合约当成保险柜会出问题。新能源出力本身波动如果合约电量签得过高实际发电不足时要去现货市场高价买电来补足合约这就是「买入平仓」亏损可能比少卖电还大。反过来签低了现货价格走高时又只能看着别人吃肉。我一般建议按保守发电能力签中长期比例压在年发电量的七成以内剩下的敞口留给现货。白皮书里对中长期合约的签约窗口、曲线分解方式都有说明实操中最关键的是曲线分解——把年度合约拆到每个小时的曲线形状要跟预测出力形状尽量贴合否则同样合约电量分解不合理会导致日内出现大量正负偏差对冲。2.2 现货市场偏差电量才是真正的利润调节阀现货市场是日前和实时两套价格体系。新能源场站在日前申报预测出力曲线实际运行偏差进了实时市场。很多刚入场的人只盯着日前价格高低忽略了日前和实时的价差方向才是利润来源的关键。一个常见策略逻辑是这样日前价格高、实时预期走低时可以在日前多申报一些实际少发相当于在高价时段做了「虚拟售电」反过来日前价格低、实时预期走高日前少申报实际多发等于把电量挪到实时高价时段。这个操作的前提是预测准、并且对实时价格方向有判断否则就是两头挨打。储能在这个环节的优势是可以主动制造「可控偏差」。充电时段在日前申报用电放电时段申报发电本质上是用申报曲线向系统声明自己的充放电计划。现货市场对储能申报的灵活性通常比对新能源机组的约束更宽这也是为什么独立储能参与现货的收益弹性远大于单纯做峰谷套利。2.3 辅助服务储能不该只盯峰谷价差辅助服务市场包括调频、备用、转动惯量等品种。储能参与调频的收益逻辑和现货套利完全不同调频按调节里程和调节性能付费不看你发了多少电而是看你响应速度快不快、调节精度高不高。磷酸铁锂电池的响应时间通常在百毫秒级天然适合高频次小幅度调节。但调频收益有天花板。储能容量固定频繁充放会快速消耗循环寿命调频里程上去了电池衰减也上去了这是很多电站运营方没算进去的隐性成本。我见过的做法是把储能容量做功能分区一部分用于调频一部分用于现货套利比例根据市场品种收益和电池寿命折损动态调整。白皮书里对不同品种的收益特征做了对比分析实操中建议先把本省辅助服务市场的补偿规则拿到手算清楚每次调节里程对应的电池损耗成本再决定要不要把容量切给调频。下表是三类交易品种的特征对比适合做收益优先级判断交易品种收益确定性对预测精度要求对储能寿命损耗适合的角色中长期合约高低无收益底线现货日前/实时中高中利润调节辅助服务调频中高低高增量收益2.4 三层之间的衔接申报流程先算清楚再动手三层市场不是孤立申报而是共用一套机组运行边界。典型流程分四步第一步根据短期预测出力确定中长期合约需要买入或卖出的电量第二步在日前市场申报发电曲线或充放电曲线第三步实时运行中跟踪偏差第四步月度结算时核对三块费用——中长期合约结算、现货偏差结算、辅助服务考核费用。常见做法是用一张 Excel 或者一个小脚本把这四步串起来输入预测出力、合约分解曲线、日前价格、实时价格四个数据集输出当月预计收益。很多团队把精力全放在报价策略上反而忽略了流程里的数据口径对齐后面第 5 章会专门展开讲。3. 出力预测与申报策略从气象数据到报价曲线的完整链路3.1 短期功率预测数值天气预报加统计修正的常见组合新能源出力预测是整个交易策略的地基。目前主流做法是数值天气预报NWP驱动功率预测模型再用场站历史实际出力做统计修正。NWP 提供风速、辐照度、温度等气象要素功率预测模型把它们映射成出力这一步的误差来源很多NWP 本身的空间分辨率不够、场站局部 microclimate 影响、风机或光伏组件的实际运行状态和老化程度。我常用的修正方法是滚动误差反馈把过去 30 天同一预报时效的预测值与实际值做对比算出平均偏差和标准差然后对新的预测结果做线性修正。这一步看似简单但很多新手直接跳过导致申报曲线系统性偏高或偏低。# 滚动偏差修正对功率预测结果做系统性校正 import pandas as pd import numpy as np # df 包含三列forecast模型原始预测、actual实际出力、hour预测时刻 # 窗口取过去 30 天同一小时的数据 df pd.read_csv(wind_farm_power.csv, parse_dates[time]) df[hour] df[time].dt.hour # 计算每个小时的历史平均偏差 correction {} for h in range(24): hist df[(df[hour] h) df[actual].notna()].tail(30 * 24) if len(hist) 0: bias (hist[actual] - hist[forecast]).mean() correction[h] bias else: correction[h] 0.0 # 应用修正 df[forecast_corrected] df.apply( lambda row: row[forecast] correction.get(row[hour], 0.0), axis1) print(df[[forecast, forecast_corrected]].describe())这段代码的核心是分小时统计系统性偏差。风电和光伏的偏差特征差异很大光伏在中午辐照度稳定时段偏差小日出和日落时段偏差大风电则随天气过程变化分小时建模比不分时段直接校正更合理。参数说明tail(30 * 24)取的是过去 30 天的逐小时样本如果你的场站刚并网、运行数据不足 30 天可以把窗口缩到 15 天但对应偏差修正的稳定性也会下降。bias是平均偏差正值说明模型系统性低估负值说明高估。3.2 从预测曲线到申报曲线要过三道手预测曲线不能直接拿去申报至少还要过三道处理。第一道是限电约束检查新能源场站的送出通道可能存在断面约束预测出力超出通道上限的部分必须剔除否则申报电量无法被市场接受。第二道是爬坡约束检查部分省份对场站申报曲线的爬坡率有限制尤其是光伏在早晨和傍晚的剧烈波动需要在申报前做平滑处理。第三道是风险偏好调整预测曲线本身是一个期望值你可以选择按期望值申报也可以按 P90 或 P10 的分位数申报取决于你对考核风险的承受能力。# 申报曲线生成预测值 风险系数 爬坡平滑 def build_bid_curve(forecast, risk_factor1.0, max_ramp0.1): forecast: 修正后的预测出力数组单位 MW risk_factor: 风险系数1.0 保守1.0 激进 max_ramp: 最大爬坡率 MW/min bid np.array(forecast) * risk_factor # 爬坡平滑确保相邻时段出力变化不超过限值 # 假设时间间隔为 15 分钟则爬坡限制为 max_ramp * 15 ramp_limit max_ramp * 15 for i in range(1, len(bid)): diff bid[i] - bid[i-1] if diff ramp_limit: bid[i] bid[i-1] ramp_limit elif diff -ramp_limit: bid[i] bid[i-1] - ramp_limit return bid逻辑说明risk_factor是最直接的风险调节旋钮。如果这个月已经产生了较大偏差考核费用下一轮申报适当降低系数牺牲一些收益弹性换考核安全。爬坡平滑的循环判断保证了申报曲线在实际运行中「可执行」申报做得到但设备跑不到是交易部门和生产部门最常吵架的地方。参数说明max_ramp0.1表示每分钟最多 0.1MW 的变化率具体要根据风机或光伏电站的实际调节能力来定一般风电场的小时级爬坡能力在装机容量的 5%-10% 之间光伏在云层快速移动时会更大。3.3 储能现货申报的时段拆解充电、放电、备用三个身份分开算独立储能在现货市场的申报和新能源场站不同它可以在同一个运行日里既申报充电用电、又申报放电发电还能部分容量参与备用。很多交易员把储能当成一个大号的「可调度负荷」申报时只报一条充放电曲线其实应该拆成三个身份分别计算。充电时段的选择逻辑很简单在日前预测价格低的时段申报充电放电时段则选价格高的时段两者之间的价差就是毛收益。真正需要精细计算的是充放电切换的边界条件——储能不能在同一时刻既充电又放电而且从充电到放电的转换需要考虑 PCS 的响应时间。# 储能日前充放电申报基于日前预测价格的时段优化 prices [0.35, 0.28, 0.22, 0.19, 0.20, 0.24, 0.58, 0.72, 0.65, 0.55, 0.42, 0.38, 0.41, 0.62, 0.88, 0.91, 0.74, 0.52, 0.45, 0.49, 0.53, 0.47, 0.39, 0.33] # 假设储能参数容量 100MWh功率 50MW # 充电效率 0.92放电效率 0.92则综合效率约 0.85 # 约束夜间低价的连续 6 小时充电午后高价的连续 3 小时放电 charge_hours [2, 3, 4, 5, 6, 7] # 凌晨低价时段 discharge_hours [13, 14, 15] # 午后高峰时段 charge_energy 50 * len(charge_hours) * 0.92 # 充电侧计入效率 discharge_energy 50 * len(discharge_hours) # 实际充入电量要除以充电效率放出电量要乘以放电效率 net_energy discharge_energy * 0.92 - charge_energy / 0.92 revenue_charge sum(prices[h] for h in charge_hours) * 50 revenue_discharge sum(prices[h] for h in discharge_hours) * 50 * 0.92 profit revenue_discharge - revenue_charge print(f充电成本: {revenue_charge:.2f} 元) print(f放电收入: {revenue_discharge:.2f} 元) print(f日内套利利润: {profit:.2f} 元)逻辑说明充电和放电不能机械地只看价差。充电侧电流经过变压器和 PCS 有损耗实际从电网吸收的电量大于充入电池的电量所以充电成本要除以充电效率放电侧同样要乘以放电效率。这套脚本里net_energy变量算的是电池侧实际的能量变化。参数说明效率值 0.92 是磷酸铁锂储能电站的典型端到端效率实际项目要参照 PCS 说明书和并网测试报告。建议留一个效率参数的变量位因为低温环境下电池效率会下降冬夏两季要分别取值。4. 储能收益测算模型容量租赁、峰谷套利与调频的优先级排序4.1 收入结构先拆开哪些是确定项哪些是概率项储能电站的收益来源往往被宣传材料写成四项容量租赁、峰谷套利、调频辅助服务、容量补偿。但做投资测算是另一个视角要看每一项的确定性。容量租赁是最确定的收入合同签了、容量占用了每月租金固定到账。缺点在于租赁价格高度依赖当地新能源配储政策有些市场供大于求租金被压得很低。峰谷套利是概率项依赖现货价格日内波动每个月行情不同。调频收益最不稳定跟系统调频需求紧密相关冬天和夏天负荷高峰时段调频需求大春秋季可能整月都没多少调用。容量补偿要看当地有没有建立容量机制目前多数市场还在探索期。我给客户做测算时习惯把四项收入拆成两层确定项做估值底线概率项做弹性空间。容量租赁覆盖运营成本峰谷套利和调频决定项目 IRR 能不能达标。如果一个项目算下来全靠套利撑收益那打包方案时一定要做压力测试。4.2 用 Python 搭一个可复现的收益测算脚本收益测算模型的第一版不用做复杂核心是让参数可调、逻辑透明。我通常先搭月度收益框架再扩展成 10 年生命周期模型。# 独立储能电站月度收益测算简化版 # 适用场景50MW/100MWh 磷酸铁锂独立储能电站 class StorageRevenueModel: def __init__(self, capacity_mwh100, power_mw50, efficiency0.85): self.capacity capacity_mwh # 额定容量 MWh self.power power_mw # 额定功率 MW self.efficiency efficiency # 综合充放电效率含损耗 def calc_monthly_revenue(self, lease_price, peak_valley_spread, freq_revenue, capacity_compensation): # 1. 容量租赁收入按 MW 月租金计算 lease self.power * lease_price # 2. 峰谷套利假设每天 1 个完整循环可放电容量按 90% DOD 计 daily_discharge self.capacity * 0.9 # 放电量为充入电量乘效率实际充电成本要折算 daily_profit daily_discharge * (peak_valley_spread * self.efficiency - peak_valley_spread * (1 - self.efficiency)) monthly_arbitrage daily_profit * 30 # 3. 调频里程收入按日结算 monthly_freq freq_revenue * 30 # 4. 容量补偿按月和 MW 结算 monthly_capacity self.power * capacity_compensation total lease monthly_arbitrage monthly_freq monthly_capacity return { rental: lease, arbitrage: monthly_arbitrage, frequency: monthly_freq, capacity: monthly_capacity, total: total } # 参数输入 model StorageRevenueModel() result model.calc_monthly_revenue( lease_price30000, # 元/MW/月 peak_valley_spread0.5, # 元/kWh高峰放电和低谷充电的价差 freq_revenue8000, # 元/日调频里程折算日均收入 capacity_compensation0 # 容量补偿元/MW/月暂按 0 ) print(result)逻辑说明这个脚本把四类收入分拆方便你逐项填真实数据。lease_price单位是元/月/MW50MW 电站每月租赁收入就是50 * lease_price。peak_valley_spread是现货市场高峰放电时段与低谷充电时段的价差注意套利利润是用放电量乘以价差再乘效率折算这里的效率处理做了简化精细模型应该把充电损耗和放电损耗分开。参数说明capacity * 0.9代表按 90% 放电深度DOD运行。磷酸铁锂电池推荐 DOD 在 90%-95% 之间但实际运行为了延长寿命很多电站控制在 85%-90%。freq_revenue是日均调频收益的折算值实际应按里程单价乘日均可调用里程计算这里为了方便观察启动了简化入口。4.3 敏感性参数循环寿命、衰减率和放电深度是三个黑匣子收益测算里最容易翻车的是电池衰减参数。很多测算模型假设电池 10 年 6000 次循环容量保持 80%实际运行中温度控制、充放电倍率、DOD 设置都会显著影响衰减速度。放电深度越高单次循环的容量衰减越大这是电池电化学特性决定的但收益模型里经常被忽略。我一般做三档敏感性分析乐观档按 DOD 90%、每年衰减 2%基准档按 DOD 85%、每年衰减 3%悲观档按 DOD 80%、每年衰减 4%。每档对应一个 IRR向决策层汇报时三档全展示而不是只报基准档。另一个黑匣子是现货价格的长期走势。做 10 年测算时很多人直接把当前峰谷价差线性外推这在电力现货市场建设初期特别危险。随着新能源渗透率提升午间光伏大发时段价格可能趋近于零甚至负值但晚间高价时段价格也可能因为系统净负荷曲线变陡而抬升峰谷价差短期看扩大、长期看受储能竞争影响可能收窄。白皮书里对市场演进方向的判断值得仔细读测算模型中至少要做「价差持稳」和「价差缩减 20%」两组场景。5. 避坑与常见问题申报偏差、结算口径与数据不一致5.1 预测偏差考核费最隐蔽的一笔隐性成本现象月度结算单出来预测偏差考核费占到了总收益的 8% 到 15%很多刚入场的团队完全没想到会有这笔费用。原因省间现货和省内现货普遍对新能源申报出力和实际出力的偏差设置考核机制。预测偏差超过一定阈值后超出部分按实时市场价格的一定比例扣罚。很多电站只知道要申报没人研究考核细则的阈值和计算方式。解决第一步从交易中心拿到偏差考核的完整计算公式把阈值、考核系数、豁免条款逐项看明白。第二步申报策略上留安全边际——预测曲线按 P90 区间申报而不是按期望值申报。第三步建立逐日偏差台账每周复盘偏差率和考核费用趋势出现连续超标马上调整风险系数。注意部分省份对极端天气台风、寒潮期间的预测偏差有豁免机制但需要提前向调度报备错过报备窗口就只能硬扛考核。5.2 储能 SOC 申报与实际运行状态不一致现象储能电站申报了 50MW 调频容量实际调用时只能出 30MW导致调频里程收入被考核扣减。原因申报时按 SOC 90% 乐观估计可调功率实际运行中电池温度偏高、BMS 限功率保护触发可调功率打了折扣。SOC 和可调功率不是线性关系尤其在 SOC 低于 30% 或高于 90% 时内阻增大、限功率明显。解决申报前用实测数据建立「SOC-可调功率」对照表每 10% SOC 间隔标定一次实际可出力的功率值。申报容量按对照表保守取值宁可在申报时少报不在调用时少出。另外在交易系统中申报储能运行参数时把最大充放电倍率按厂家推荐值再乘一个 0.95 的安全系数。5.3 节点电价与系统边际电价结算口径没对齐现象内部测算按系统边际电价算的收益是正数实际结算却亏了差在小数点后两位的结算电价上。原因电力现货市场普遍采用节点电价机制新能源场站和储能电站所在节点的电价可能和系统边际电价有较大偏差尤其在送出断面受限时节点电价可能被压低甚至变为负值。交易员如果拿错价格口径所有测算全部失真。解决结算分析一律以交易中心发布的节点电价结算单为准。做日内策略时如果市场发布的是系统边际电价要额外关注本节点与系统边际价格的差价历史规律建一个「节点价格差」的时间序列申报前先判断今天的价差方向。5.4 中长期持仓比例过高现货优化空间被自己锁死现象某月现货价格持续走高但电站收益率反而低于上月因为中长期合约锁定的售电价格远低于现货价格少赚了。原因签约时为了保障收益确定性把中长期合约比例提到了九成以上。现货市场一旦出现高价时段可用敞口太小现货利润无法弥补中长期的低价损失。解决中长期持仓比例按季节动态调整。来水丰、风光大发、现货价格大概率走低的季节提高中长期比例极端天气频发、现货价格大概率波动的季节降低到五成左右。每月做一次持仓复盘对比中长期合约均价和现货价格走势超过两个月的趋势背离就要调整下月签约策略。5.5 关口计量与并网点口径不一致现象内部统计的发电量、充放电量和交易中心的结算电量对不上差距在 1% 到 2%。原因交易结算以并网点关口表为准而场站内部统计很多用的是升压变高压侧或低压侧的表计数据。线损、厂用电、变压器损耗导致两侧电量不一致。解决在收益台账中单独建立「关口电量」和「关口内电量」两个字段所有交易相关的计算一律用关口电量口径。每个月结算单出来后主动跟交易中心核对关口表读数偏差超过 0.5% 就申请重新核验表计。这个过程很琐碎但结算底数错了后面所有分析都白做。6. 用历史数据回测申报策略一套六个步骤的验证流程策略好不好不能靠感觉要靠历史数据回测。我给自己定了一套固定流程每次调整申报策略都强制走一遍包括六个步骤。第一步准备数据。至少取三个月的日前价格、实时价格、新能源预测出力和实际出力数据颗粒度要跟市场申报周期一致15 分钟或 1 小时。数据质量是第一位的缺失率超过 5% 的数据段直接剔除不要用插值硬补。第二步定义策略。把策略写成可量化的规则比如「预测出力乘 0.95 申报实时价格高于日前价格 20% 时主动增发」。第三步搭建回测框架。每一小时根据当时可得的预测数据和价格数据生成申报值再拿实际出力和实时价格计算结算结果。# 回测框架核心逐小时模拟申报与结算 def backtest_strategy(forecast, actual, day_ahead_price, realtime_price, risk_factor0.95): forecast: 预测出力数组 (MW) actual: 实际出力数组 (MW) day_ahead_price: 日前节点电价 (元/MWh) realtime_price: 实时节点电价 (元/MWh) # 申报量 预测值 * 风险系数 bid forecast * risk_factor # 偏差 实际出力 - 申报量 deviation actual - bid # 收入 申报量按日前价结算 偏差量按实时价结算 revenue bid * day_ahead_price deviation * realtime_price # 偏差考核按当地规则简化处理超过阈值部分扣罚 penalty_rate 0.2 # 考核系数 threshold 0.08 # 偏差阈值 ±8% penalty 0.0 for i in range(len(deviation)): dev_ratio abs(deviation[i]) / max(actual[i], 1) if dev_ratio threshold: over dev_ratio - threshold penalty over * bid[i] * day_ahead_price[i] * penalty_rate return revenue.sum() - penalty逻辑说明这套回测把结算过程简化成了两个价格口径申报量按日前价结算偏差量按实时价结算这是国内现货市场通行的双结算模式。penalty部分做了简化实际市场规则更复杂通常对正偏差和负偏差适用不同考核公式建议结合当地规则把罚函数替换成真实公式。参数说明risk_factor0.95是策略参数回测时应该循环遍历一组值比如 0.85 到 1.10画出收益和考核费用的曲线找到最优平衡点。第四步设置对比基准。没有基准的回测没有意义基准建议用「全额按预测申报」的零策略也就是风险系数等于 1.0 的原始方案。第五步分批回测。三个月数据分成前两个月训练、后一个月验证不要在全部数据上反复调参。第六步最关键看结果不能只看总收益要看逐日收益分布。一个策略总收益高但某几天巨亏实际运行中心理压力和执行连贯性都会出问题。我会额外统计三个指标日均收益、最大单日亏损、收益为正的天数占比。三个指标组合起来才是一套策略能否落地的依据。另外建议做一次「相似日复盘」。回测期结束后找出回测期内价格形态和最近一周最相似的几日样本用那几天的策略表现来推断最近一周的适用性。这个习惯帮我避免过拟合也比全样本收益更有参考价值。这些方法都不是什么先进算法就是一线做下来最扎实的路子。从那以后我每次做策略调整都强制走一遍这六步哪怕市场规则没大变也不跳过因为吃过太多「感觉差不多」的亏。交易这行玄学只存在结算之前结算之后全是数字。希望帮到你。本文还有配套的精品资源点击获取
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →