我正在处理一张处理商品未来数据(财务数据,几乎像股票数据,但每月的到期日可以延伸到未来两到三年)的工作表。
我的数据有符号、到期日和收盘价,大约有 600 行。例如,每种商品都有一个两个字符的代码;
商品代码/符号
标普 500 E-迷你 ES
纳斯达克 100 E-迷你 NQ
罗素 2000 E-迷你 RTY
道琼斯期货迷你YM
金牌 GC
玉米ZC
大豆ZS
每种商品都有多个月度到期日,最长可达 3 年或更长时间,但我只想使用两年。每个月都有一个字符代码来表示月份,以及年份的最后两位数字。例如,2024 年 1 月编码为“F24”。
月份:一月 二月 三月 四月 五月 六月 七月 八月 九月 十月 十一月 十二月
符号:FGHJKMNQUVXZ
准备数据表的懒惰方法(FIXED SHEET): [懒惰的到期日历数据:图像](https://isstatic.askoverflow.dev/nSp9NBQP.png)
在惰性方法四年(48 列“月份”)日历中,表示未来到期月份,在“锚定列 C4”中唯一的动态值是年份。月份列有固定的月份代码,从一月代码“F”开始,依此类推;
|← Current year - 1 →|← Current year → | ← Current year+1 → |← Current year+2 →|
明显的问题是,例如,当当前月份是八月“Q”时,前8列是空的,而我想在另一张紧凑的表格中显示这个日历的范围,因此空值对表格没有好处!
**动态数据表(动态表):** 要显示 24 个月的数据(~两年),固定列 B1(用于月份)和 B2(用于月份和年份代码),在第一列中将当前月份作为 MONTH(NOW()) 获取,然后在 C1 到 Z1 中计算接下来的 24 个月我使用这个公式;
=MONTH(EOMONTH(NOW(),0)+30+(IF(MOD(B1,2)=1,1,0)))
后续列将 30、60、90、120..天数固定到 B1 列。如果月份有 31 天,则通过公式 IF(MOD(B1,2)=1,1,0) 添加一天
为了对年份和月份代码的最后两位数字进行编码,我在锚列 B2 中使用了此公式;
=CHOOSE(B1,"F","G","H","J","K","M","N","Q","U","V","X","Z") & RIGHT(YEAR(NOW()),2) 然后后续到期列 C2,D2...Z2 计算如下:
=CHOOSE(C1,"F","G","H","J","K","M","N","Q","U","V","X","Z")&RIGHT(YEAR(EOMONTH(NOW(),0)+30+(IF(MOD(A1,2)=1,1,0))),2)
为了自动计算年份,我添加了额外的天数 30,30..720。
要使用 sheet,请进行复制:
https://docs.google.com/spreadsheets/d/1ThGY8cH0zRTQSWM2k7aHCwZrnVpd88gXXS7jgx9Iy2s/edit?usp=sharing
到目前为止,我的应用程序正在运行,我正在用它来交易期货合约,我想知道我是否可以提高性能或效率。
行
DYNAMIC!1:2
重复now()
很多。每次编辑电子表格时,该函数都会刷新。在CONFIG
工作表中,放入=today()
一个单元格,然后将所有实例替换now()
为对该单元格的引用。每个公式中的公式
DYNAMIC!1:2
分别过滤数据,这比仅进行查找需要更多的计算。您可以filter()
像这样删除:清除行
DYNAMIC!B3:3
并将公式放入单元格中B3
。它将给出与您当前在该行中的多个公式相同的结果。要进一步提高电子表格性能,请参阅我的优化技巧。