@sdelsad/commodity-desk-daily 1.0.54 → 1.0.56

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/ep09.html ADDED
@@ -0,0 +1,754 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en" data-theme="light">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <title>Ep 9 — Vegetable oils and biofuels · Soft Commodity Trading</title>
7
+ <meta name="description" content="Four oils that trade as one market, and how a fuel rule in Jakarta becomes a bid for a crop and a flood of animal feed.">
8
+ <meta name="author" content="Sébastien Delsad">
9
+ <link rel="canonical" href="https://storage.googleapis.com/podcast-audio-2647223968/commodity-desk-daily/ep09.html">
10
+ <meta property="og:type" content="article">
11
+ <meta property="og:site_name" content="Soft Commodity Trading">
12
+ <meta property="og:title" content="Ep 9 — Vegetable oils and biofuels">
13
+ <meta property="og:description" content="Four oils that trade as one market, and how a fuel rule in Jakarta becomes a bid for a crop and a flood of animal feed.">
14
+ <meta property="og:url" content="https://storage.googleapis.com/podcast-audio-2647223968/commodity-desk-daily/ep09.html">
15
+ <meta property="og:image" content="https://cdn.jsdelivr.net/npm/@sdelsad/commodity-desk-daily@1.0.15/cover.jpg">
16
+ <meta property="og:image:alt" content="Soft Commodity Trading cover art">
17
+ <meta property="og:audio" content="https://storage.googleapis.com/podcast-audio-2647223968/commodity-desk-daily/ep09v2.mp3">
18
+ <meta property="og:audio:type" content="audio/mpeg">
19
+ <meta property="article:published_time" content="2026-08-20">
20
+ <meta name="twitter:card" content="summary_large_image">
21
+ <meta name="twitter:title" content="Ep 9 — Vegetable oils and biofuels">
22
+ <meta name="twitter:description" content="Four oils that trade as one market, and how a fuel rule in Jakarta becomes a bid for a crop and a flood of animal feed.">
23
+ <meta name="twitter:image" content="https://cdn.jsdelivr.net/npm/@sdelsad/commodity-desk-daily@1.0.15/cover.jpg">
24
+ <meta name="theme-color" content="#faf7f1" media="(prefers-color-scheme: light)">
25
+ <meta name="theme-color" content="#14110e" media="(prefers-color-scheme: dark)">
26
+ <link rel="alternate" type="application/rss+xml" title="Soft Commodity Trading" href="https://storage.googleapis.com/podcast-audio-2647223968/commodity-desk-daily/feed.xml">
27
+ <link rel="icon" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 64 64'%3E%3Crect width='64' height='64' rx='12' fill='%231d4032'/%3E%3Ctext x='32' y='44' font-family='Georgia,serif' font-size='34' fill='%23c9a45c' text-anchor='middle'%3ES%3C/text%3E%3C/svg%3E">
28
+ <script type="application/ld+json">
29
+ {
30
+ "@context": "https://schema.org",
31
+ "@type": "PodcastEpisode",
32
+ "url": "https://storage.googleapis.com/podcast-audio-2647223968/commodity-desk-daily/ep09.html",
33
+ "name": "Ep 9 — Vegetable oils and biofuels",
34
+ "episodeNumber": 9,
35
+ "duration": "PT23M47S",
36
+ "description": "Four oils that trade as one market, and how a fuel rule in Jakarta becomes a bid for a crop and a flood of animal feed.",
37
+ "image": "https://cdn.jsdelivr.net/npm/@sdelsad/commodity-desk-daily@1.0.15/cover.jpg",
38
+ "inLanguage": "en",
39
+ "author": {
40
+ "@type": "Person",
41
+ "name": "Sébastien Delsad"
42
+ },
43
+ "associatedMedia": {
44
+ "@type": "MediaObject",
45
+ "contentUrl": "https://storage.googleapis.com/podcast-audio-2647223968/commodity-desk-daily/ep09v2.mp3",
46
+ "encodingFormat": "audio/mpeg"
47
+ },
48
+ "partOfSeries": {
49
+ "@type": "PodcastSeries",
50
+ "name": "Soft Commodity Trading",
51
+ "url": "https://storage.googleapis.com/podcast-audio-2647223968/index.html",
52
+ "image": "https://cdn.jsdelivr.net/npm/@sdelsad/commodity-desk-daily@1.0.15/cover.jpg",
53
+ "webFeed": "https://storage.googleapis.com/podcast-audio-2647223968/commodity-desk-daily/feed.xml"
54
+ },
55
+ "datePublished": "2026-08-20"
56
+ }
57
+ </script>
58
+ <style>
59
+ :root{
60
+ --ink:#16110c; --ink-soft:#4a4238; --line:#e3ddd2; --paper:#faf7f1;
61
+ --accent:#1d4032; --gold:#a8813c; --spoiler:#8a2f2f;
62
+ --tint:rgba(128,110,70,.07); --tint-2:rgba(128,110,70,.045);
63
+ --up:#215c44; --down:#8a2f2f; --shadow:rgba(22,17,12,.14);
64
+ --sans:ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
65
+ --serif:Georgia,"Iowan Old Style","Times New Roman",serif;
66
+ --col:680px;
67
+ }
68
+ html[data-theme="dark"]{
69
+ --ink:#ece6dc; --ink-soft:#a49c90; --line:#2f2a24; --paper:#14110e;
70
+ --accent:#7fae95; --gold:#c9a45c; --spoiler:#d98a8a;
71
+ --tint:rgba(200,180,130,.06); --tint-2:rgba(200,180,130,.035);
72
+ --up:#7fae95; --down:#d98a8a; --shadow:rgba(0,0,0,.55);
73
+ color-scheme:dark;
74
+ }
75
+ *{box-sizing:border-box}
76
+ html{scroll-behavior:smooth;scroll-padding-top:64px}
77
+ html,body{transition:background-color .25s ease,color .25s ease}
78
+ body{margin:0;background:var(--paper);color:var(--ink);
79
+ font:18px/1.72 var(--serif);-webkit-font-smoothing:antialiased;
80
+ text-rendering:optimizeLegibility}
81
+ .wrap{max-width:var(--col);margin:0 auto;padding:0 24px 40px}
82
+ .vh{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);
83
+ white-space:nowrap}
84
+
85
+ /* ---------- reading progress ---------- */
86
+ #bar{position:fixed;top:0;left:0;height:2px;width:0;z-index:30;
87
+ background:var(--gold);transition:width .12s linear}
88
+
89
+ /* ---------- masthead ---------- */
90
+ header{padding:52px 0 30px}
91
+ .masthead{display:flex;justify-content:space-between;align-items:baseline;gap:16px;
92
+ padding-bottom:12px;border-bottom:1px solid var(--ink);
93
+ font:600 13px/1 var(--sans);letter-spacing:.13em;text-transform:uppercase}
94
+ .masthead a{color:inherit;text-decoration:none}
95
+ .masthead .epno{color:var(--gold);letter-spacing:.1em}
96
+ h1{font-size:clamp(31px,5.6vw,44px);line-height:1.12;margin:26px 0 0;
97
+ letter-spacing:-.017em;font-weight:400;text-wrap:balance}
98
+ .dek{color:var(--ink-soft);font-size:20px;line-height:1.5;margin:16px 0 0;
99
+ max-width:34em;text-wrap:pretty}
100
+ .meta{margin-top:22px;font:12.5px/1.6 var(--sans);color:var(--ink-soft);
101
+ letter-spacing:.05em;text-transform:uppercase}
102
+ .meta b{font-weight:600;color:var(--ink)}
103
+
104
+ /* ---------- listen ---------- */
105
+ .listen{margin-top:26px;border:1px solid var(--line);border-radius:12px;
106
+ background:var(--tint-2);padding:16px 18px 14px}
107
+ audio{width:100%;height:38px;display:block}
108
+ .listenrow{display:flex;flex-wrap:wrap;gap:8px 16px;align-items:center;
109
+ margin-top:12px;font:12.5px/1 var(--sans);color:var(--ink-soft)}
110
+ .listenrow a{color:var(--ink-soft);text-decoration:none;border-bottom:1px solid var(--line)}
111
+ .listenrow a:hover{color:var(--accent);border-color:var(--accent)}
112
+ .rates{display:flex;gap:6px;margin-right:auto}
113
+ .rate{background:none;border:1px solid var(--line);color:var(--ink-soft);
114
+ border-radius:99px;padding:4px 10px;cursor:pointer;
115
+ font:600 11.5px/1 var(--sans);letter-spacing:.04em;transition:all .2s}
116
+ .rate:hover{border-color:var(--gold);color:var(--ink)}
117
+ .rate[aria-pressed="true"]{background:var(--ink);color:var(--paper);border-color:var(--ink)}
118
+ .offline{background:none;border:1px solid var(--accent);color:var(--accent);
119
+ border-radius:99px;padding:5px 12px;cursor:pointer;
120
+ font:600 11.5px/1 var(--sans);letter-spacing:.04em;transition:all .2s}
121
+ .offline:hover{background:var(--accent);color:var(--paper)}
122
+ .offline[disabled]{opacity:.7;cursor:progress}
123
+ .offline.saved{background:var(--accent);color:var(--paper)}
124
+ .offnote{margin:10px 0 0;font:12.5px/1.45 var(--sans);color:var(--ink-soft)}
125
+
126
+ /* ---------- contents ---------- */
127
+ .toc{margin:34px 0 6px;padding:16px 0 4px;border-top:1px solid var(--line);
128
+ border-bottom:1px solid var(--line)}
129
+ .tochead{font:600 11px/1 var(--sans);letter-spacing:.18em;text-transform:uppercase;
130
+ color:var(--gold);margin:0 0 12px}
131
+ .toc ol{list-style:none;margin:0 0 12px;padding:0;
132
+ font:14.5px/1.5 var(--sans);columns:2;column-gap:26px}
133
+ .toc li{margin:0 0 7px;break-inside:avoid}
134
+ .toc li.t3{padding-left:12px;font-size:13.5px}
135
+ .toc a{color:var(--ink-soft);text-decoration:none;border-bottom:1px solid transparent}
136
+ .toc a:hover{color:var(--ink);border-color:var(--gold)}
137
+ .toc li.on>a{color:var(--ink);font-weight:600}
138
+
139
+ /* ---------- body ---------- */
140
+ main{padding-top:8px}
141
+ h2{font:400 27px/1.25 var(--serif);color:var(--gold);margin:56px 0 18px;
142
+ font-variant-caps:all-small-caps;letter-spacing:.045em;
143
+ padding-bottom:9px;border-bottom:1px solid var(--line)}
144
+ h3{font-size:23px;line-height:1.3;margin:38px 0 10px;letter-spacing:-.012em;
145
+ font-weight:400}
146
+ h4{font:600 17px/1.4 var(--sans);margin:26px 0 6px;letter-spacing:-.005em}
147
+ p{margin:0 0 18px}
148
+ h2+p,h3+p,h4+p{margin-top:0}
149
+ ul,ol{margin:0 0 18px;padding-left:24px}
150
+ li{margin:0 0 9px}
151
+ li::marker{color:var(--gold)}
152
+ strong{font-weight:700}
153
+ a{color:var(--accent);text-underline-offset:2px;text-decoration-thickness:1px}
154
+ .anchor{float:right;margin-left:12px;color:var(--line);text-decoration:none;
155
+ font:400 16px/1 var(--sans);opacity:0;transition:opacity .2s}
156
+ h2:hover .anchor,h3:hover .anchor,.anchor:focus{opacity:1;color:var(--gold)}
157
+ .secnote{font:14.5px/1.6 var(--sans);color:var(--ink-soft);margin:-4px 0 18px}
158
+ code{background:var(--tint);padding:1px 5px;border-radius:3px;
159
+ font:15px/1 ui-monospace,Menlo,Consolas,monospace}
160
+ blockquote{border-left:2px solid var(--gold);margin:26px 0;padding:6px 0 6px 20px;
161
+ font-style:italic;color:var(--ink-soft);font-size:17.5px}
162
+ blockquote strong{font-style:normal;color:var(--ink);font-weight:600}
163
+ hr{border:none;border-top:1px solid var(--line);margin:40px 0}
164
+ .charterr{color:var(--spoiler);font:14px/1.5 var(--sans)}
165
+
166
+ /* ---------- tables ---------- */
167
+ .tablewrap{margin:26px 0;overflow-x:auto;overscroll-behavior-x:contain;
168
+ background:
169
+ linear-gradient(to right,var(--paper) 34%,rgba(255,255,255,0)) left center,
170
+ linear-gradient(to left,var(--paper) 34%,rgba(255,255,255,0)) right center,
171
+ radial-gradient(farthest-side at 0 50%,var(--shadow),rgba(255,255,255,0)) left center,
172
+ radial-gradient(farthest-side at 100% 50%,var(--shadow),rgba(255,255,255,0)) right center;
173
+ background-repeat:no-repeat;
174
+ background-size:44px 100%,44px 100%,13px 100%,13px 100%;
175
+ background-attachment:local,local,scroll,scroll}
176
+ .tablewrap:focus-visible{outline:2px solid var(--gold);outline-offset:3px}
177
+ table{width:100%;border-collapse:collapse;font:15.5px/1.5 var(--sans);
178
+ font-variant-numeric:tabular-nums lining-nums}
179
+ th{text-align:left;font-size:11.5px;letter-spacing:.1em;text-transform:uppercase;
180
+ color:var(--ink-soft);border-bottom:1px solid var(--ink);padding:0 14px 9px 0;
181
+ font-weight:600;white-space:nowrap}
182
+ td{padding:10px 14px 10px 0;border-bottom:1px solid var(--line);vertical-align:top}
183
+ th:last-child,td:last-child{padding-right:0}
184
+ th.num,td.num{text-align:right;white-space:nowrap}
185
+ tbody tr:last-child td{border-bottom:none}
186
+ tr td:first-child{font-weight:600;padding-right:20px;min-width:9em}
187
+ .mv{font-weight:600;font-variant-numeric:tabular-nums}
188
+ .mv.up{color:var(--up)} .mv.down{color:var(--down)} .mv.flat{color:var(--ink-soft)}
189
+
190
+ /* ---------- quiz and solutions ---------- */
191
+ .qq{scroll-margin-top:70px}
192
+ .solnbar{display:flex;gap:8px;margin:0 0 16px}
193
+ .ghost{background:none;border:1px solid var(--line);color:var(--ink-soft);
194
+ border-radius:99px;padding:6px 14px;cursor:pointer;
195
+ font:600 11.5px/1 var(--sans);letter-spacing:.06em;text-transform:uppercase;
196
+ transition:all .2s}
197
+ .ghost:hover{border-color:var(--gold);color:var(--ink)}
198
+ details.soln{margin:0 0 10px;scroll-margin-top:70px}
199
+ details.soln>summary{cursor:pointer;list-style:none;display:flex;align-items:center;
200
+ gap:12px;border:1px solid var(--line);border-left:3px solid var(--spoiler);
201
+ border-radius:7px;padding:11px 16px;transition:all .2s;background:var(--tint-2)}
202
+ summary::-webkit-details-marker{display:none}
203
+ details.soln>summary:hover{border-color:var(--spoiler);background:var(--tint)}
204
+ .qn{font:700 13px/1 var(--sans);letter-spacing:.08em;color:var(--spoiler);
205
+ text-transform:uppercase}
206
+ .sl{font:500 12.5px/1 var(--sans);color:var(--ink-soft);letter-spacing:.05em}
207
+ details[open]>summary .sl{opacity:.6}
208
+ .solnbody{border-left:2px solid var(--accent);margin:14px 0 22px 3px;
209
+ padding:2px 0 2px 20px;font-size:17.5px}
210
+ .backq{font:12.5px/1 var(--sans);margin:0}
211
+ .backq a{color:var(--ink-soft);text-decoration:none}
212
+ .backq a:hover{color:var(--accent)}
213
+
214
+ /* ---------- glossary ---------- */
215
+ details.gloss>summary,details.archive>summary{cursor:pointer;list-style:none;
216
+ display:flex;align-items:baseline;justify-content:space-between;gap:14px;
217
+ border:1px solid var(--line);border-radius:8px;padding:13px 18px;
218
+ font:600 14px/1 var(--sans);letter-spacing:.03em;transition:all .2s;
219
+ background:var(--tint-2)}
220
+ details.gloss>summary:hover,details.archive>summary:hover{border-color:var(--gold)}
221
+ .glossbody{padding:22px 2px 6px}
222
+ .gsearch input{width:100%;padding:11px 14px;border:1px solid var(--line);
223
+ border-radius:8px;background:var(--paper);color:var(--ink);
224
+ font:15px/1 var(--sans)}
225
+ .gsearch input:focus{outline:none;border-color:var(--gold)}
226
+ .gchips{display:flex;flex-wrap:wrap;gap:7px;margin:14px 0 0}
227
+ .gchip{background:none;border:1px solid var(--line);color:var(--ink-soft);
228
+ border-radius:99px;padding:6px 12px;cursor:pointer;display:flex;align-items:center;
229
+ gap:6px;font:600 12px/1 var(--sans);letter-spacing:.04em;transition:all .2s}
230
+ .gchip:hover{border-color:var(--gold);color:var(--ink)}
231
+ .gchip.on{background:var(--ink);color:var(--paper);border-color:var(--ink)}
232
+ .gn{font-weight:400;opacity:.65;font-variant-numeric:tabular-nums}
233
+ dl{margin:20px 0 0}
234
+ .gterm{padding:11px 0;border-top:1px solid var(--line)}
235
+ .gterm dt{font:600 15.5px/1.4 var(--sans)}
236
+ .gterm dd{margin:3px 0 0;font-size:16.5px;color:var(--ink-soft)}
237
+ .gep{font:600 10.5px/1 var(--sans);letter-spacing:.09em;text-transform:uppercase;
238
+ color:var(--ink-soft);border:1px solid var(--line);border-radius:99px;
239
+ padding:3px 7px;white-space:nowrap;margin-left:4px}
240
+ .gep.now{color:var(--gold);border-color:var(--gold)}
241
+ .gnone{font:15px/1.5 var(--sans);color:var(--ink-soft);padding:16px 0}
242
+
243
+ /* ---------- episode navigation ---------- */
244
+ .epnav{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin:56px 0 20px;
245
+ padding-top:26px;border-top:1px solid var(--ink)}
246
+ .epnav a{display:flex;flex-direction:column;gap:5px;text-decoration:none;
247
+ border:1px solid var(--line);border-radius:10px;padding:16px 18px;
248
+ color:var(--ink);transition:all .25s}
249
+ .epnav a:hover{border-color:var(--gold);background:var(--tint-2)}
250
+ .epnav .epnext{text-align:right}
251
+ .epnav .dir{font:600 11px/1 var(--sans);letter-spacing:.14em;text-transform:uppercase;
252
+ color:var(--gold)}
253
+ .epnav .ept{font:19px/1.3 var(--serif)}
254
+ .epnav .epn{font:12px/1 var(--sans);color:var(--ink-soft);letter-spacing:.05em}
255
+ .epnav a:only-child{grid-column:1/-1;max-width:60%}
256
+ .epnav .epnext:only-child{margin-left:auto}
257
+ details.archive{margin:0 0 12px}
258
+ .arclist{list-style:none;margin:18px 0 6px;padding:0;font:15px/1.5 var(--sans)}
259
+ .arclist li{margin:0;border-top:1px solid var(--line)}
260
+ .arclist a{display:flex;gap:14px;padding:11px 4px;text-decoration:none;
261
+ color:var(--ink);transition:background .2s}
262
+ .arclist a:hover{background:var(--tint-2)}
263
+ .arclist b{color:var(--gold);font-variant-numeric:tabular-nums;font-weight:600}
264
+ .arclist li.here a{color:var(--ink-soft)}
265
+ .arclist li.here b:after{content:" · you are here";font-weight:400;
266
+ font-size:11px;letter-spacing:.1em;text-transform:uppercase}
267
+
268
+ /* ---------- theme button + footer ---------- */
269
+ .themebtn{position:fixed;top:14px;right:14px;z-index:20;background:var(--paper);
270
+ color:var(--ink-soft);border:1px solid var(--line);border-radius:99px;
271
+ padding:8px 14px;cursor:pointer;font:500 12px/1 var(--sans);letter-spacing:.06em;
272
+ display:flex;align-items:center;gap:7px;box-shadow:0 1px 4px var(--shadow);
273
+ transition:all .2s}
274
+ .themebtn:hover{color:var(--ink);border-color:var(--gold)}
275
+ .themebtn svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.8;
276
+ stroke-linecap:round;stroke-linejoin:round}
277
+ html[data-theme="dark"] .themebtn{box-shadow:none}
278
+ .themebtn .moon{display:block} .themebtn .sun{display:none}
279
+ html[data-theme="dark"] .themebtn .moon{display:none}
280
+ html[data-theme="dark"] .themebtn .sun{display:block}
281
+ .themebtn .lbl:after{content:"Dark"}
282
+ html[data-theme="dark"] .themebtn .lbl:after{content:"Light"}
283
+ footer{margin-top:40px;padding:24px 0 70px;border-top:1px solid var(--line);
284
+ font:14px/1.7 var(--sans);color:var(--ink-soft);
285
+ display:flex;flex-wrap:wrap;gap:8px 22px;justify-content:space-between}
286
+ footer a{color:var(--ink-soft)}
287
+ footer a:hover{color:var(--accent)}
288
+ footer .sig b{color:var(--ink);font-weight:600}
289
+
290
+ /* ---------- wide screens: the rail, and the breakout ---------- */
291
+ @media (min-width:1240px){
292
+ .toc{position:fixed;top:96px;left:max(24px,calc(50% - 596px));width:216px;
293
+ max-height:74vh;overflow-y:auto;margin:0;padding:0;border:none;
294
+ border-left:1px solid var(--line);padding-left:18px;z-index:5}
295
+ .toc ol{columns:1;font-size:14px}
296
+ .toc li{margin-bottom:9px}
297
+ /* charts break out of the measure; tables stay aligned with the prose,
298
+ because a table that starts left of the paragraph above it reads as a
299
+ layout fault rather than as emphasis */
300
+ .chartfig{margin-left:-38px;margin-right:-38px;
301
+ padding-left:26px;padding-right:26px}
302
+ }
303
+ @media (min-width:1240px) and (max-height:620px){ .toc{display:none} }
304
+
305
+ /* ---------- phones ---------- */
306
+ @media (max-width:640px){
307
+ body{font-size:17px;line-height:1.68}
308
+ .wrap{padding:0 18px 32px}
309
+ header{padding-top:34px}
310
+ .dek{font-size:18px}
311
+ h2{font-size:24px;margin-top:44px}
312
+ h3{font-size:20.5px}
313
+ /* a phone gets the sections, not every subhead: eleven rows of contents
314
+ is a screenful of scrolling before the article even starts */
315
+ .toc li.t3{display:none}
316
+ .toc ol{columns:2;column-gap:18px;font-size:14px}
317
+ .themebtn{top:9px;right:9px;padding:7px 11px}
318
+ table{font-size:14.5px}
319
+ th{font-size:10.5px;padding-right:12px}
320
+ td{padding-right:12px}
321
+ tr td:first-child{min-width:7.5em;padding-right:14px}
322
+ .epnav{grid-template-columns:1fr}
323
+ .epnav .epnext{text-align:left}
324
+ .epnav a:only-child{max-width:none}
325
+ .solnbody{font-size:17px;padding-left:15px}
326
+ /* charts earn the full width of a phone */
327
+ .chartfig{margin-left:-18px;margin-right:-18px;border-radius:0;
328
+ border-left:none;border-right:none;padding:16px 14px 12px}
329
+ }
330
+
331
+ /* ---------- print ---------- */
332
+ @page{margin:16mm 14mm}
333
+ @media print{
334
+ :root{--ink:#000;--ink-soft:#333;--line:#bbb;--paper:#fff;--tint:#f4f2ec;
335
+ --tint-2:#f8f7f3;--gold:#7a5c24;--accent:#123024;--up:#123024;
336
+ --down:#7a1f1f;--shadow:transparent}
337
+ html[data-theme="dark"]{--ink:#000;--ink-soft:#333;--line:#bbb;--paper:#fff;
338
+ --tint:#f4f2ec;--tint-2:#f8f7f3;--gold:#7a5c24;--accent:#123024}
339
+ body{font-size:11pt;line-height:1.5;background:#fff}
340
+ .wrap{max-width:none;padding:0}
341
+ #bar,.themebtn,.toc,.listen,.solnbar,.gsearch,.epnav,.anchor,.backq{display:none!important}
342
+ header{padding-top:0}
343
+ .masthead{border-color:#000}
344
+ h1{font-size:23pt;margin-top:14pt}
345
+ .dek{font-size:12pt}
346
+ h2{font-size:15pt;margin:22pt 0 8pt;break-after:avoid}
347
+ h3{font-size:13pt;margin:14pt 0 5pt;break-after:avoid}
348
+ p,li{orphans:3;widows:3}
349
+ .tablewrap{overflow:visible;background:none;break-inside:avoid}
350
+ .chartfig{break-inside:avoid;border-color:#ccc;background:none}
351
+ details{break-inside:avoid;margin:0}
352
+ /* the answers print open, labelled by question, without a button */
353
+ details.soln>summary{display:flex;border:none;background:none;
354
+ padding:10pt 0 2pt;border-top:1px solid #ddd}
355
+ summary .sl{display:none}
356
+ .solnbody{border-color:#999;margin:2pt 0 8pt;padding-left:0}
357
+ /* the cumulative glossary is a reference, not part of the article:
358
+ eighty-odd terms would add pages to every printout */
359
+ .glossec,details.archive{display:none}
360
+ a{color:#000;text-decoration:none}
361
+ footer{border-color:#000}
362
+ }
363
+ @media (prefers-reduced-motion:reduce){
364
+ html{scroll-behavior:auto}
365
+ *{animation-duration:.001ms!important;transition-duration:.001ms!important}
366
+ }
367
+
368
+ .chartfig{margin:36px 0;padding:22px 22px 16px;border:1px solid var(--line);
369
+ border-radius:10px;background:var(--tint-2,var(--tint))}
370
+ .charttitle{font:600 17.5px/1.3 var(--serif,Georgia,serif);color:var(--ink);
371
+ margin:0 0 16px;letter-spacing:-.012em}
372
+ .chartcap{font:italic 15.5px/1.55 var(--serif,Georgia,serif);color:var(--ink-soft);
373
+ margin:14px 2px 0;text-wrap:pretty}
374
+ .chartsrc{display:block;font:500 11.5px/1.5 var(--sans,ui-sans-serif,system-ui,sans-serif);
375
+ font-style:normal;letter-spacing:.05em;opacity:.8;margin-top:7px}
376
+ .chart{display:block;overflow:visible;font-variant-numeric:tabular-nums}
377
+ @media (max-width:640px){
378
+ .charttitle{font-size:16.5px;margin-bottom:12px}
379
+ .chartcap{font-size:15px}
380
+ }
381
+ </style>
382
+ <script>
383
+ try{
384
+ var s = localStorage.getItem('cdd-theme');
385
+ if(s){ document.documentElement.setAttribute('data-theme', s); }
386
+ else if(window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches){
387
+ document.documentElement.setAttribute('data-theme','dark');
388
+ }
389
+ }catch(e){}
390
+ </script>
391
+ </head>
392
+ <body>
393
+ <div id="bar" aria-hidden="true"></div>
394
+ <button class="themebtn" type="button" aria-label="Switch colour theme">
395
+ <svg class="moon" viewBox="0 0 24 24" aria-hidden="true"><path d="M21 12.8A9 9 0 1 1 11.2 3a7 7 0 0 0 9.8 9.8z"/></svg>
396
+ <svg class="sun" viewBox="0 0 24 24" aria-hidden="true"><circle cx="12" cy="12" r="4.2"/><path d="M12 2v2M12 20v2M4.9 4.9l1.4 1.4M17.7 17.7l1.4 1.4M2 12h2M20 12h2M4.9 19.1l1.4-1.4M17.7 6.3l1.4-1.4"/></svg>
397
+ <span class="lbl"></span>
398
+ </button>
399
+ <div class="wrap">
400
+ <header>
401
+ <div class="masthead">
402
+ <a href="https://storage.googleapis.com/podcast-audio-2647223968/index.html">Soft Commodity Trading</a>
403
+ <span class="epno">Ep 09</span>
404
+ </div>
405
+ <h1>Vegetable oils and biofuels</h1>
406
+ <p class="dek">Four oils that trade as one market, and how a fuel rule in Jakarta becomes a bid for a crop and a flood of animal feed.</p>
407
+ <div class="meta">Thursday 20 August 2026 · <b>23 min 47</b></div>
408
+ <div class="listen">
409
+ <audio controls preload="none" src="https://storage.googleapis.com/podcast-audio-2647223968/commodity-desk-daily/ep09v2.mp3"></audio>
410
+ <div class="listenrow">
411
+ <span class="rates" role="group" aria-label="Playback speed">
412
+ <button type="button" class="rate" data-rate="1" aria-pressed="true">1×</button>
413
+ <button type="button" class="rate" data-rate="1.25" aria-pressed="false">1.25×</button>
414
+ <button type="button" class="rate" data-rate="1.5" aria-pressed="false">1.5×</button>
415
+ </span>
416
+ <button type="button" class="offline" id="offline" hidden aria-live="polite">Save offline</button>
417
+ <a href="https://storage.googleapis.com/podcast-audio-2647223968/commodity-desk-daily/ep09v2.mp3" download>Download MP3</a>
418
+ <a href="https://storage.googleapis.com/podcast-audio-2647223968/commodity-desk-daily/feed.xml">Subscribe · RSS</a>
419
+ </div>
420
+ <p class="offnote" id="offnote" hidden></p>
421
+ </div>
422
+ <nav class="toc" id="toc" aria-label="Contents"><p class="tochead">Contents</p><ol><li class="t2"><a href="#market-pulse">Market pulse</a></li><li class="t2"><a href="#key-takeaways">Key takeaways</a></li><li class="t2"><a href="#vocabulary">Vocabulary</a></li><li class="t2"><a href="#quiz">Quiz</a></li><li class="t2"><a href="#solutions">Solutions</a></li><li class="t2"><a href="#the-episode-in-writing">The episode, in writing</a></li><li class="t3"><a href="#where-vegetable-oil-comes-from">Where vegetable oil comes from</a></li><li class="t3"><a href="#one-market-with-four-tickers">One market with four tickers</a></li><li class="t3"><a href="#putting-the-two-prices-in-one-unit">Putting the two prices in one unit</a></li><li class="t3"><a href="#how-the-switch-sounds">How the switch sounds</a></li><li class="t3"><a href="#reading-the-palm-curve">Reading the palm curve</a></li><li class="t3"><a href="#a-mandate-is-a-standing-bid">A mandate is a standing bid</a></li><li class="t3"><a href="#who-pays-and-the-loop-in-it">Who pays, and the loop in it</a></li><li class="t3"><a href="#why-a-fuel-policy-is-a-protein-policy">Why a fuel policy is a protein policy</a></li><li class="t3"><a href="#why-balance-sheets-now-have-an-energy-term">Why balance sheets now have an energy term</a></li><li class="t2"><a href="#glossary">Glossary</a></li></ol></nav>
423
+ </header>
424
+ <main>
425
+ <h2 id="market-pulse">Market pulse<a class="anchor" href="#market-pulse" aria-label="Link to this section">#</a></h2>
426
+ <p><strong>Everything in Chicago rallied, and the crusher still had a worse day than the day before.</strong></p>
427
+ <div class="tablewrap" tabindex="0" role="region" aria-label="Table, scrolls sideways"><table><thead><tr><th>Commodity</th><th>Contract</th><th>Price</th><th class="num">Change</th></tr></thead><tbody><tr><td>Corn</td><td>Sep (CBOT)</td><td>473 c/bu</td><td class="num"><span class="mv up">+9¾¢</span></td></tr><tr><td>Corn</td><td>Dec (CBOT)</td><td>498 c/bu</td><td class="num"><span class="mv up">+10¢</span></td></tr><tr><td>Soybeans</td><td>Sep (CBOT)</td><td>1222¼ c/bu</td><td class="num"><span class="mv up">+21½¢</span></td></tr><tr><td>Soybeans</td><td>Nov (CBOT)</td><td>1237¾ c/bu</td><td class="num"><span class="mv up">+20½¢</span></td></tr><tr><td>Soymeal</td><td>Sep (CBOT)</td><td>—</td><td class="num"><span class="mv up">+2.0%</span></td></tr><tr><td>Soyoil</td><td>Sep (CBOT)</td><td>—</td><td class="num"><span class="mv up">+0.25%</span></td></tr><tr><td>Wheat SRW</td><td>Sep (CBOT)</td><td>680¼ c/bu</td><td class="num"><span class="mv up">+15¾¢</span></td></tr><tr><td>Wheat HRW</td><td>Sep (KC)</td><td>762 c/bu</td><td class="num"><span class="mv up">+18¼¢</span></td></tr><tr><td>Crude palm oil</td><td>Sep (BMD)</td><td>RM 4,648/t</td><td class="num"><span class="mv up">+RM 32</span></td></tr></tbody></table></div>
428
+ <p>Wednesday was a broad buying day, and the trigger was boots in fields. Every August the Pro Farmer crop tour sends scouts across the corn belt to count ears and pods, and this week&#x27;s early results were reported as less than stellar. USDA still carries a corn yield of 180.7 bu/ac; after two days of the tour the trade has started to ask whether that is generous. Flooding in the eastern belt and positioning ahead of the weekly export sales report did the rest. Corn added ten cents in December, beans twenty and a half in November, and wheat took the largest percentage move of the three.</p>
429
+ <p>The move worth reading was inside the bean complex. Meal led, up about 2%. Oil managed a quarter of a percent. Beans rose more than either product in percentage terms. That combination matters for a crushing plant, and Q3 works it through: a day on which every price on the screen is green can still be a losing day for a plant, because the crush is a difference between prices, not a price.</p>
430
+ <p><strong>The policy read: this morning the risk is a fuel rule, not a war.</strong> Indonesia&#x27;s B50 programme (50% biodiesel in the diesel pool) came into full effect in July, with the 2026 biodiesel allocation set at 16.75 million kilolitres. To fund the subsidy that makes it work, Jakarta raised the crude palm oil export levy from 10% to 12.5%. The oil exists and the mills are running; it has simply been made expensive to leave the country. That is a supply withdrawal decided in a ministry, and it lands first on the palm–soyoil spread, then on every vegetable oil that competes with either.</p>
431
+ <figure class="chartfig">
432
+ <figcaption class="charttitle">Palm pays you to wait</figcaption>
433
+ <svg class="chart" viewBox="0 0 640 330" width="100%" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img">
434
+ <style>.chart{--c-a:var(--accent,#1d4032);--c-b:var(--gold,#a8813c);--c-c:#4a6f8c;font-family:inherit}html[data-theme="dark"] .chart{--c-c:#7ba3c4}.chart .grid{stroke:var(--line,#ddd6c9);stroke-width:1}.chart .axis{fill:var(--ink-soft,#4a4238);font-size:12px}.chart .unit{fill:var(--ink-soft,#4a4238);font-size:11px;letter-spacing:.06em;text-transform:uppercase}.chart .ln{fill:none;stroke-width:2.25;stroke-linejoin:round;stroke-linecap:round}.chart .lg{fill:var(--ink,#16110c);font-size:12.5px}.chart .vlabel{fill:var(--ink,#16110c);font-size:11.5px;font-weight:600}@media (max-width:900px){.chart .axis{font-size:14px}.chart .unit{font-size:13px}.chart .lg{font-size:14.5px}.chart .vlabel{font-size:13.5px}.chart .ln{stroke-width:2.6}}@media (max-width:640px){.chart .axis{font-size:16px}.chart .unit{font-size:14px}.chart .lg{font-size:16px}.chart .vlabel{font-size:15px}.chart .ln{stroke-width:3.1}}</style>
435
+ <line class="grid" x1="56" y1="286.0" x2="622" y2="286.0" opacity=".45"/>
436
+ <text class="axis" x="46" y="290.0" text-anchor="end">4,600</text>
437
+ <line class="grid" x1="56" y1="221.0" x2="622" y2="221.0" opacity=".45"/>
438
+ <text class="axis" x="46" y="225.0" text-anchor="end">4,700</text>
439
+ <line class="grid" x1="56" y1="156.0" x2="622" y2="156.0" opacity=".45"/>
440
+ <text class="axis" x="46" y="160.0" text-anchor="end">4,800</text>
441
+ <line class="grid" x1="56" y1="91.0" x2="622" y2="91.0" opacity=".45"/>
442
+ <text class="axis" x="46" y="95.0" text-anchor="end">4,900</text>
443
+ <line class="grid" x1="56" y1="26.0" x2="622" y2="26.0" opacity=".45"/>
444
+ <text class="axis" x="46" y="30.0" text-anchor="end">5,000</text>
445
+ <text class="unit" x="622" y="16" text-anchor="end">RM per tonne</text>
446
+ <text class="axis" x="56.0" y="306" text-anchor="middle">Sep 26</text>
447
+ <text class="axis" x="244.7" y="306" text-anchor="middle">Oct 26</text>
448
+ <text class="axis" x="433.3" y="306" text-anchor="middle">Nov 26</text>
449
+ <text class="axis" x="622.0" y="306" text-anchor="end">Dec 26</text>
450
+ <path class="ln" d="M56.0 254.8 L244.7 164.4 L433.3 98.8 L622.0 52.0" stroke="var(--c-a)"/>
451
+ <circle cx="622.0" cy="52.0" r="3.4" fill="var(--c-a)"/>
452
+ </svg>
453
+ <figcaption class="chartcap">The curve rises 312 ringgit from September to December, about 76 dollars a tonne. In the language of episode 3 palm is in carry: the market is paying to hold oil into the low-production quarter rather than sell it now. <span class="chartsrc">MDEX crude palm oil futures, Wednesday 19 August 2026, closing quotes.</span></figcaption>
454
+ </figure>
455
+ <h2 id="key-takeaways">Key takeaways<a class="anchor" href="#key-takeaways" aria-label="Link to this section">#</a></h2>
456
+ <ul><li>The four big vegetable oils (palm, soybean, rapeseed, sunflower) are one market with four tickers, because the buyers want a liquid with a melting point and a price, not a crop, and they can change the recipe. The spread between two oils is the switch that moves demand from one to the other.</li><li>Palm is the volume leader because a hectare of oil palm yields seven or eight times as much oil as a hectare of soybeans. Its benchmark, FCPO in Kuala Lumpur, is priced in ringgit, so every foreign hedger picks up a currency position for free.</li><li>One cent per pound is $22.05 per tonne, because a tonne is 2,204.6 pounds. That single factor turns a Chicago soybean oil quote into something you can hold next to a palm quote.</li><li>A mandate creates a standing bid: demand that does not respond to price. A food buyer walks away when oil gets expensive; a blender under a legal obligation pays.</li><li>Indonesia&#x27;s 16.75 million kilolitre allocation is about 15 million tonnes of palm oil consumed at home, close to a third of the crop, and about the size of India&#x27;s entire annual vegetable oil import demand.</li><li>Indonesia pays the blending subsidy out of the export levy, and the mandate&#x27;s purpose is to shrink the exports the levy is collected on. The levy rate, not the mandate headline, is the honest indicator of whether the programme is affordable.</li><li>Oil and meal are joined at the bushel: 11 lb of oil always comes with 44 lb of meal. A billion pounds of new oil demand drags in four billion pounds of meal that no fuel policy asked for, which is why the crush margin captures far less of an oil rally than the oil chart implies. A fuel policy is always a protein policy.</li><li>Vegetable oil balance sheets now carry an energy term. When gasoil trades above the oils, refiners blend them into diesel for profit with no mandate at all; when crude falls, that demand disappears within a week, and no crop model can forecast it.</li></ul>
457
+ <h2 id="vocabulary">Vocabulary<a class="anchor" href="#vocabulary" aria-label="Link to this section">#</a></h2>
458
+ <div class="tablewrap" tabindex="0" role="region" aria-label="Table, scrolls sideways"><table><thead><tr><th>Term</th><th>Meaning</th></tr></thead><tbody><tr><td><strong>Vegetable oil</strong></td><td>The liquid fat pressed from an oilseed (soybean, rapeseed, sunflower) or from the fruit of the oil palm; the other product of crushing a seed is the protein meal</td></tr><tr><td><strong>CPO</strong></td><td>Crude palm oil, the unrefined oil pressed from the flesh of the oil palm fruit and the benchmark grade traded internationally</td></tr><tr><td><strong>FCPO</strong></td><td>The Bursa Malaysia Derivatives crude palm oil futures contract: 25 tonnes per lot, quoted in Malaysian ringgit per tonne, tick RM 1 (RM 25 per lot)</td></tr><tr><td><strong>Substitution spread</strong></td><td>The price gap between two competing vegetable oils. Wide enough, and buyers reformulate toward the cheaper one; that switching is what makes four oils one market</td></tr><tr><td><strong>Reformulation</strong></td><td>Changing a food recipe to use more of one oil and less of another, within the limits set by melting point and shelf life</td></tr><tr><td><strong>Biodiesel (FAME)</strong></td><td>Fatty acid methyl ester: the fuel made by reacting a vegetable oil with methanol, which runs in an ordinary diesel engine</td></tr><tr><td><strong>Blending mandate</strong></td><td>A law requiring a set share of the diesel sold in a country to be biodiesel. Indonesia&#x27;s B50 means 50%</td></tr><tr><td><strong>Standing bid</strong></td><td>Demand that is present regardless of price, because it is created by legal obligation rather than by choice</td></tr><tr><td><strong>Blending subsidy</strong></td><td>The payment a government makes to fuel companies to cover the gap between the cost of biodiesel and the cheaper fossil diesel it replaces</td></tr><tr><td><strong>Export levy</strong></td><td>A tax charged on each tonne of a commodity leaving the country; in Indonesia it both discourages exports and funds the blending subsidy</td></tr><tr><td><strong>Kilolitre</strong></td><td>One thousand litres, one cubic metre. Asian governments state fuel mandates in kilolitres; convert to tonnes with the fuel&#x27;s density (about 0.88 t per m³ for biodiesel)</td></tr><tr><td><strong>RFS</strong></td><td>The US Renewable Fuel Standard, the rule setting the minimum volume of renewable fuel that must be blended into American transport fuel each year</td></tr><tr><td><strong>RIN</strong></td><td>Renewable identification number, the compliance credit created with each gallon of renewable fuel. Biodiesel earns 1.5 RINs per physical gallon, so a volume stated in RINs is not a volume of fuel</td></tr><tr><td><strong>Oil share</strong></td><td>Oil&#x27;s share of the value of a crushed bushel; the &quot;oil share trade&quot; is long soybean oil against short soybean meal</td></tr><tr><td><strong>Gasoil</strong></td><td>The traded wholesale price of diesel, and the reference against which blending vegetable oil into fuel is judged profitable or not</td></tr><tr><td><strong>Discretionary blending</strong></td><td>Blending vegetable oil into diesel purely because it is cheaper than gasoil, with no mandate and no subsidy behind it</td></tr></tbody></table></div>
459
+ <h2 id="quiz">Quiz<a class="anchor" href="#quiz" aria-label="Link to this section">#</a></h2>
460
+ <p id="q1" class="qq"><strong>Q1.</strong> September palm settled at RM 4,648/t with the ringgit at 4.08 to the dollar, and Chicago soybean oil was quoted near 69.00 c/lb. A European refiner uses 40,000 t of soybean oil a year and his recipes allow him to replace up to 30% of that volume with palm.</p>
461
+ <ul><li>Express both oils in dollars per tonne and give the substitution spread.</li><li>What is the annual saving if he switches the full 30% at today&#x27;s spread?</li><li>Name the two new exposures the switch creates that he did not have while buying soybean oil, and say why each one arises.</li></ul>
462
+ <p id="q2" class="qq"><strong>Q2.</strong> A rule change is expected to add 1.4 billion pounds a year to US soybean oil demand. Using the ep 8 yields of 11 lb of oil and 44 lb of meal per bushel, how many short tons of soybean meal does the extra crush produce?</p>
463
+ <p id="q3" class="qq"><strong>Q3.</strong> <em>(Ep 8)</em> Take the board crush formula from ep 8 (meal × 0.022 + oil × 0.11 − beans). Start from meal at $325.00/short ton, oil at 69.00 c/lb and November beans at 1217¼. Apply Wednesday&#x27;s moves: meal +2.0%, oil +0.25%, beans +20½¢. By how many cents per bushel did the board crush change?</p>
464
+ <p id="q4" class="qq"><strong>Q4.</strong> <em>(Ep 6)</em> Ep 6 said corn is a demand story and that ethanol is one of the two buyers that walks away at a price. On Wednesday US ethanol production fell to a one-month low of 1.089 m barrels a day and ethanol stocks rose 1%, yet December corn rallied ten cents. Why are those two facts not in conflict?</p>
465
+ <p id="q5" class="qq"><strong>Q5.</strong> <em>Conversion drill.</em> A Mato Grosso soybean field yields 3.72 t/ha and an Illinois field is quoted at 58.5 bu/ac. Which is the higher yield? Soybeans convert at 1 bu/ac ≈ 0.0673 t/ha.</p>
466
+ <h2 id="solutions">Solutions<a class="anchor" href="#solutions" aria-label="Link to this section">#</a></h2><p class="secnote">One reveal per question — check your answer to Q1 without spoiling the rest.</p><div class="solnbar"><button type="button" class="ghost" data-solnall="open">Reveal all</button><button type="button" class="ghost" data-solnall="close">Hide all</button></div>
467
+ <details class="soln" id="a1"><summary><span class="qn">Q1</span><span class="sl">Reveal the answer</span></summary><div class="solnbody"><p>Both sides first, in dollars per tonne.</p>
468
+ <div class="tablewrap" tabindex="0" role="region" aria-label="Table, scrolls sideways"><table><thead><tr><th>Oil</th><th>Quote</th><th>Conversion</th><th class="num">$/t</th></tr></thead><tbody><tr><td>Palm, Sep BMD</td><td>RM 4,648/t</td><td>÷ 4.08 RM per $</td><td class="num">$1,139</td></tr><tr><td>Soybean oil, CBOT</td><td>69.00 c/lb</td><td>× 22.05</td><td class="num">$1,521</td></tr><tr><td><strong>Substitution spread</strong></td><td></td><td></td><td class="num"><strong>$382/t</strong></td></tr></tbody></table></div>
469
+ <p>The palm step divides ringgit by ringgit-per-dollar to get dollars. The soybean oil step uses the bridge factor: a tonne is 2,204.6 lb, so one cent on every pound is $22.05 on the tonne.</p>
470
+ <p>The saving. Thirty percent of 40,000 t is 12,000 t. At $382/t that is <strong>about $4.6 m a year</strong>, which is why formulation teams exist.</p>
471
+ <p>The two new exposures.</p>
472
+ <p>The first is <strong>currency</strong>. FCPO is priced and settled in ringgit. If the refiner hedges his palm purchases by selling FCPO futures, the hedge gains and loses in ringgit while his costs are in euros or dollars. On 12,000 t at RM 4,648 that is a ringgit position of about RM 56 m that nothing in the physical trade asked for. Buying soybean oil in Chicago, he had dollar exposure, but dollars are the currency he already manages.</p>
473
+ <p>The second is <strong>policy</strong>. Palm&#x27;s export price contains an Indonesian export levy that a ministry can change by decree, as it just did from 10% to 12.5%. Soybean oil carries US policy risk too, through the biofuel rules, but a refiner buying soyoil in Rotterdam is not paying a tax that moves on a fortnight&#x27;s notice.</p>
474
+ <p>Two further answers deserve half credit because they are real: <strong>basis risk</strong>, since CIF Rotterdam palm does not track the Kuala Lumpur futures perfectly, and <strong>specification risk</strong>, since palm and soybean oil have different melting points and oxidative stability, so &quot;reformulate&quot; is not a switch you can flip and unflip weekly.</p>
475
+ <p class="backq"><a href="#q1">↑ Back to question 1</a></p></div></details>
476
+ <details class="soln" id="a2"><summary><span class="qn">Q2</span><span class="sl">Reveal the answer</span></summary><div class="solnbody"><p>The arithmetic runs through the bushel, and the proportions are fixed by the bean.</p>
477
+ <div class="tablewrap" tabindex="0" role="region" aria-label="Table, scrolls sideways"><table><thead><tr><th>Step</th><th>Working</th><th>Result</th></tr></thead><tbody><tr><td>Incremental oil demand</td><td>given</td><td>1,400 m lb</td></tr><tr><td>Oil per bushel</td><td>÷ 11 lb</td><td>127.3 m bu of extra crush</td></tr><tr><td>Meal produced</td><td>× 44 lb</td><td>5,600 m lb</td></tr><tr><td>In short tons</td><td>÷ 2,000</td><td><strong>2.8 m short tons of meal</strong></td></tr></tbody></table></div>
478
+ <p><strong>2.8 million short tons of soybean meal</strong>, produced by a rule that was about fuel. It has to be fed to an animal, somewhere, at some price, and the price is what adjusts. This is why an oil-demand headline is a bearish meal headline, and why a trader who likes the oil story buys oil against meal rather than buying the whole crush.</p>
479
+ <p class="backq"><a href="#q2">↑ Back to question 2</a></p></div></details>
480
+ <details class="soln" id="a3"><summary><span class="qn">Q3</span><span class="sl">Reveal the answer</span></summary><div class="solnbody"><p>Build the change leg by leg. Only the changes matter, not the levels.</p>
481
+ <div class="tablewrap" tabindex="0" role="region" aria-label="Table, scrolls sideways"><table><thead><tr><th>Leg</th><th class="num">Move</th><th class="num">Multiplier</th><th class="num">¢/bu effect</th></tr></thead><tbody><tr><td>Meal</td><td class="num"><span class="mv up">+2.0% of $325.00 = +$6.50/st</span></td><td class="num">× 0.022</td><td class="num">+14.3</td></tr><tr><td>Oil</td><td class="num"><span class="mv up">+0.25% of 69.00 = +0.1725 c/lb</span></td><td class="num">× 0.11</td><td class="num">+1.9</td></tr><tr><td>Beans</td><td class="num"><span class="mv up">+20.5 c/bu</span></td><td class="num">−1</td><td class="num">−20.5</td></tr><tr><td><strong>Board crush</strong></td><td class="num"></td><td class="num"></td><td class="num"><strong>−4.3</strong></td></tr></tbody></table></div>
482
+ <p>The board crush <strong>fell about 4.3 c/bu</strong> on a day when all three prices rose. Wednesday was a bad day for a plant.</p>
483
+ <p>The trap: the crush is a difference between large numbers, so its sign is set by relative moves, not by direction. Meal was the strongest product in percentage terms and still could not carry the bean move, because meal&#x27;s contribution is scaled by 0.022 and the bean&#x27;s by one. A 2% meal rally is worth 14 cents of crush; a 20-cent bean rally costs 20. A screen of green numbers tells you nothing about the margin.</p>
484
+ <p class="backq"><a href="#q3">↑ Back to question 3</a></p></div></details>
485
+ <details class="soln" id="a4"><summary><span class="qn">Q4</span><span class="sl">Reveal the answer</span></summary><div class="solnbody"><p>They are statements about different things, on different timescales.</p>
486
+ <p>The ethanol print is a <em>demand</em> datapoint about last week&#x27;s grind: production at a one-month low with stocks up 1% is a mildly negative corn signal, worth a fraction of a cent. Wednesday&#x27;s rally was a <em>supply</em> datapoint about this year&#x27;s crop: scouts in the field reporting worse-than-expected conditions against a USDA yield of 180.7 bu/ac that the trade already suspected. In August the supply side of the corn balance sheet has a far larger range of outcomes than the demand side: a two-bushel yield change moves the crop by roughly 180 million bushels, while a soft week of ethanol grind moves demand by a few million. The market prices the larger uncertainty first.</p>
487
+ <p>The ep 6 point still bites, later. If ethanol&#x27;s weakness turns out to be margin-driven rather than seasonal, that is a buyer walking away at a price, and a rally built on supply will be capped by the demand it destroys. The tell is the ethanol margin, not the production number.</p>
488
+ <p class="backq"><a href="#q4">↑ Back to question 4</a></p></div></details>
489
+ <details class="soln" id="a5"><summary><span class="qn">Q5</span><span class="sl">Reveal the answer</span></summary><div class="solnbody"><p><em>Conversion drill.</em> Soybeans convert at 1 bu/ac ≈ 0.0673 t/ha, or divide by 15 as a fast method.</p>
490
+ <div class="tablewrap" tabindex="0" role="region" aria-label="Table, scrolls sideways"><table><thead><tr><th>Field</th><th>Given</th><th>Converted</th></tr></thead><tbody><tr><td>Illinois</td><td>58.5 bu/ac</td><td>× 0.0673 = <strong>3.94 t/ha</strong></td></tr><tr><td>Mato Grosso</td><td>3.72 t/ha</td><td>÷ 0.0673 = <strong>55.3 bu/ac</strong></td></tr></tbody></table></div>
491
+ <p><strong>Illinois is the higher yield</strong>, by about 0.22 t/ha or 3.2 bu/ac, roughly 6%. The fast method gets you there too: 58.5 ÷ 15 = 3.9 t/ha and 3.72 × 15 = 55.8 bu/ac. Close enough to answer the question in a phone call.</p>
492
+ <p class="backq"><a href="#q5">↑ Back to question 5</a></p></div></details><h2 id="the-episode-in-writing">The episode, in writing<a class="anchor" href="#the-episode-in-writing" aria-label="Link to this section">#</a></h2>
493
+ <h3 id="where-vegetable-oil-comes-from">Where vegetable oil comes from<a class="anchor" href="#where-vegetable-oil-comes-from" aria-label="Link to this section">#</a></h3>
494
+ <p>Start from something ep 8 established. When you crush a soybean you get two products: oil, the liquid fat, and meal, the protein that is left behind and goes to animal feed. Every oilseed does the same. Rapeseed gives rapeseed oil and rapeseed meal; sunflower seed gives sunflower oil and sunflower meal. The proportions are fixed by the seed, and that fact will matter a great deal later in this edition.</p>
495
+ <p>Palm is the odd one out. Palm oil is not pressed from a seed but from the flesh of a fruit that grows on a tree, in a narrow band around the equator. Indonesia and Malaysia grow most of it. And it is by far the biggest of the four, for one reason: a hectare of oil palm produces around 3.5 to 4 tonnes of oil a year, where a hectare of soybeans produces about half a tonne. Seven or eight times the yield is why a crop from one strip of the tropics supplies more vegetable oil than any other single source.</p>
496
+ <h3 id="one-market-with-four-tickers">One market with four tickers<a class="anchor" href="#one-market-with-four-tickers" aria-label="Link to this section">#</a></h3>
497
+ <p>Palm, soybean oil, rapeseed oil and sunflower oil are grown on different continents, harvested on different calendars and traded on different exchanges. They are nonetheless a single market, and the reason is that almost nobody in the chain wants the crop.</p>
498
+ <p>A refiner in Rotterdam making margarine, a bottler in Mumbai selling cooking oil, a snack manufacturer in Jakarta frying crisps: each is buying a liquid with a melting point, a shelf life and a price. Within limits, the recipe is a choice. A margarine can carry more palm and less soybean oil, or the reverse. So when one oil becomes expensive relative to another, buyers <strong>reformulate</strong> toward the cheaper one, and that extra demand pulls the cheap oil up and lets the dear one fall.</p>
499
+ <p>The vocabulary: the difference between the prices of two oils is the <strong>substitution spread</strong>. When it is narrow nobody bothers to switch. When it is wide enough, recipes change. That switching behaviour is what welds four crops into one system, and it means the spread between two oils is more informative than either price on its own. The spread is the switch.</p>
500
+ <h3 id="putting-the-two-prices-in-one-unit">Putting the two prices in one unit<a class="anchor" href="#putting-the-two-prices-in-one-unit" aria-label="Link to this section">#</a></h3>
501
+ <p>To read the spread you need palm and soybean oil in the same unit, and they are not quoted that way.</p>
502
+ <p>Palm&#x27;s benchmark is the <strong>FCPO</strong> contract on Bursa Malaysia Derivatives in Kuala Lumpur.</p>
503
+ <p><strong>The unit moment.</strong> One FCPO lot is 25 tonnes of crude palm oil, quoted in Malaysian ringgit per tonne, with a minimum tick of RM 1, so RM 25 per lot. It is quoted in ringgit because it settles against Malaysian physical delivery. That is a detail with teeth: it is the only major vegetable oil benchmark denominated in neither dollars nor euros, so every non-Malaysian hedger acquires a currency position that no part of the underlying trade asked for.</p>
504
+ <p>Converting is one division. September palm closed at RM 4,648/t; the ringgit was near 4.08 to the dollar; 4,648 ÷ 4.08 = <strong>$1,139/t</strong>.</p>
505
+ <p>Soybean oil trades in Chicago, quoted in cents per pound, 60,000 lb to a contract. The bridge to dollars per tonne is one number: <strong>1 c/lb = $22.05/t</strong>. The reason is simply that a tonne is 2,204.6 lb, so one cent on every pound is 2,204.6 cents, or $22.05, on the tonne. Multiply the cents-per-pound price by 22.05 and you have dollars per tonne. Mid-August soybean oil near 69.00 c/lb is 69 × 22.05 = <strong>$1,521/t</strong>.</p>
506
+ <figure class="chartfig">
507
+ <figcaption class="charttitle">Two oils, one unit</figcaption>
508
+ <svg class="chart" viewBox="0 0 640 330" width="100%" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img">
509
+ <style>.chart{--c-a:var(--accent,#1d4032);--c-b:var(--gold,#a8813c);--c-c:#4a6f8c;font-family:inherit}html[data-theme="dark"] .chart{--c-c:#7ba3c4}.chart .grid{stroke:var(--line,#ddd6c9);stroke-width:1}.chart .axis{fill:var(--ink-soft,#4a4238);font-size:12px}.chart .unit{fill:var(--ink-soft,#4a4238);font-size:11px;letter-spacing:.06em;text-transform:uppercase}.chart .ln{fill:none;stroke-width:2.25;stroke-linejoin:round;stroke-linecap:round}.chart .lg{fill:var(--ink,#16110c);font-size:12.5px}.chart .vlabel{fill:var(--ink,#16110c);font-size:11.5px;font-weight:600}@media (max-width:900px){.chart .axis{font-size:14px}.chart .unit{font-size:13px}.chart .lg{font-size:14.5px}.chart .vlabel{font-size:13.5px}.chart .ln{stroke-width:2.6}}@media (max-width:640px){.chart .axis{font-size:16px}.chart .unit{font-size:14px}.chart .lg{font-size:16px}.chart .vlabel{font-size:15px}.chart .ln{stroke-width:3.1}}</style>
510
+ <line class="grid" x1="56" y1="286.0" x2="622" y2="286.0"/>
511
+ <text class="axis" x="46" y="290.0" text-anchor="end">0</text>
512
+ <line class="grid" x1="56" y1="200.5" x2="622" y2="200.5" opacity=".45"/>
513
+ <text class="axis" x="46" y="204.5" text-anchor="end">500</text>
514
+ <line class="grid" x1="56" y1="115.1" x2="622" y2="115.1" opacity=".45"/>
515
+ <text class="axis" x="46" y="119.1" text-anchor="end">1,000</text>
516
+ <line class="grid" x1="56" y1="29.6" x2="622" y2="29.6" opacity=".45"/>
517
+ <text class="axis" x="46" y="33.6" text-anchor="end">1,500</text>
518
+ <text class="unit" x="622" y="16" text-anchor="end">US dollars per tonne</text>
519
+ <text class="axis" x="197.5" y="306" text-anchor="middle">Crude palm oil, Sep BMD</text>
520
+ <text class="axis" x="480.5" y="306" text-anchor="middle">Soybean oil, CBOT</text>
521
+ <rect x="177.3" y="91.3" width="40.5" height="194.7" rx="2" fill="var(--c-a)" opacity=".85"/>
522
+ <rect x="460.3" y="26.0" width="40.5" height="260.0" rx="2" fill="var(--c-a)" opacity=".85"/>
523
+ <line class="grid" x1="56" y1="286.0" x2="622" y2="286.0"/>
524
+ </svg>
525
+ <figcaption class="chartcap">RM 4,648 divided by 4.08, and 69 cents a pound times 22.05. Once both are in dollars per tonne the substitution spread is visible: soybean oil is about 382 dollars a tonne dearer than palm. <span class="chartsrc">MDEX and CBOT quotes, Wednesday 19 August 2026; ringgit at 4.08 per dollar.</span></figcaption>
526
+ </figure>
527
+ <div class="tablewrap" tabindex="0" role="region" aria-label="Table, scrolls sideways"><table><thead><tr><th>Market</th><th>Quote</th><th class="num">In $/t</th></tr></thead><tbody><tr><td>Palm, Sep BMD</td><td>RM 4,648/t at 4.08 RM/$</td><td class="num">$1,139</td></tr><tr><td>Soybean oil, CBOT, mid-August</td><td>69.00 c/lb</td><td class="num">$1,521</td></tr><tr><td><strong>Substitution spread</strong></td><td></td><td class="num"><strong>$382/t</strong></td></tr></tbody></table></div>
528
+ <p>Nearly four hundred dollars a tonne between two liquids that a refiner can, within limits, use interchangeably. For a European refiner using 40,000 t of soybean oil a year with room to switch 30% of it, that is 12,000 t × $382 = about $4.6 m a year, which is why food companies employ people whose only job is reformulation. And that gap is not a mispricing waiting to be arbitraged. It is the price of two different national policies, and the rest of this edition is about how those policies get there.</p>
529
+ <h3 id="how-the-switch-sounds">How the switch sounds<a class="anchor" href="#how-the-switch-sounds" aria-label="Link to this section">#</a></h3>
530
+ <blockquote><strong>REFINER:</strong> What are you showing me on September palm, CIF Rotterdam?<br><strong>BROKER:</strong> Call it forty over the board. Soft. Nobody wants September.<br><strong>REFINER:</strong> And the soy?<br><strong>BROKER:</strong> Soy is not competing. It is bid by the fuel guys, not by you.<br><strong>REFINER:</strong> Then I take palm and I reformulate.</blockquote>
531
+ <p>&quot;Forty over the board&quot; means the physical oil, delivered to Rotterdam, costs $40/t more than the Kuala Lumpur futures price: the basis, exactly as in the grain episodes. &quot;Soft&quot; means the seller will negotiate down, because there is more September oil around than buyers for it. And the refiner never argued about the level. He asked for the spread, and when the spread was wide enough he changed his recipe.</p>
532
+ <p>The switch is not free. The refiner who moves to palm picks up two exposures he did not have. <strong>Currency</strong>, because palm is priced in ringgit and a futures hedge moves with the ringgit while his costs are in euros. <strong>Policy</strong>, because palm&#x27;s export price contains an Indonesian levy that a ministry can change overnight, as it just did. Q1 sizes both.</p>
533
+ <h3 id="reading-the-palm-curve">Reading the palm curve<a class="anchor" href="#reading-the-palm-curve" aria-label="Link to this section">#</a></h3>
534
+ <p>Wednesday&#x27;s palm board also carries a shape worth reading (the chart in the market pulse), and it is a chance to apply the curve grammar from ep 3 to a market that behaves nothing like Chicago wheat. The curve rises RM 312 from September to December, roughly $76/t, or about 6.7% over three months. On the ep 3 framing that is a <strong>carry market</strong>: the board is paying you to hold oil rather than sell it prompt. And the carry is front-loaded: the Sep–Oct spread alone is RM 139, then RM 101, then RM 72. A front-loaded carry is not a general statement that oil is abundant. It says oil is abundant <em>now</em>, and that the market expects palm&#x27;s seasonal production decline into the northern winter to tighten things later.</p>
535
+ <h3 id="a-mandate-is-a-standing-bid">A mandate is a standing bid<a class="anchor" href="#a-mandate-is-a-standing-bid" aria-label="Link to this section">#</a></h3>
536
+ <p>Two definitions first. If you react a vegetable oil with methanol you get a fuel that runs in an ordinary diesel engine: <strong>biodiesel</strong>, or FAME by its chemical name. A <strong>blending mandate</strong> is a law that says a set share of the diesel sold in a country must be biodiesel. Indonesia&#x27;s B50 means 50%, and the fuel companies are the ones who must comply.</p>
537
+ <p>Now think about how an ordinary buyer behaves. Every demand line on a balance sheet assumes that when the price rises, somebody stops buying: the food company reformulates, the importer waits, the farmer feeds less. Demand curves slope downward.</p>
538
+ <p>A mandate breaks that. A blender legally required to put 50% biodiesel into the pool does not walk away at a higher palm price. He pays, or he does not sell fuel. In market language a bid is an offer to buy, and a <strong>standing bid</strong> is an offer to buy that is always there, at whatever the price is. That is what a mandate is: a political decision converted into a standing bid for a crop, and it is the single most important structural fact about vegetable oils today.</p>
539
+ <p>Work the Indonesian number slowly, because the arithmetic is the lesson.</p>
540
+ <div class="tablewrap" tabindex="0" role="region" aria-label="Table, scrolls sideways"><table><thead><tr><th>Step</th><th>Working</th><th>Result</th></tr></thead><tbody><tr><td>2026 biodiesel allocation</td><td>stated by Jakarta</td><td>16.75 m kL</td></tr><tr><td>Volume to weight</td><td>× 0.88 t per m³ (a kilolitre is a cubic metre; biodiesel is lighter than water)</td><td>14.74 m t of fuel</td></tr><tr><td>Fuel to feedstock</td><td>× ~1.03 t CPO per t of biodiesel (some weight is lost in the reaction)</td><td><strong>≈ 15.2 m t of CPO</strong></td></tr></tbody></table></div>
541
+ <p>Fifteen million tonnes of palm oil, consumed inside the country that produced it. Indonesia produces somewhere around 47 million tonnes a year, so that is close to a third of the crop. For scale, it is roughly what India, the world&#x27;s largest vegetable oil importer, buys from the whole world in a year. One cabinet decision, sized like the world&#x27;s largest importer.</p>
542
+ <h3 id="who-pays-and-the-loop-in-it">Who pays, and the loop in it<a class="anchor" href="#who-pays-and-the-loop-in-it" aria-label="Link to this section">#</a></h3>
543
+ <p>Biodiesel costs more to make than fossil diesel, so the government pays the fuel companies the difference. That payment is the <strong>blending subsidy</strong>. The money comes from the <strong>export levy</strong>, a tax on every tonne of palm oil leaving the country, which was raised from 10% to 12.5% this year.</p>
544
+ <p>Here is the loop. The mandate&#x27;s purpose is to keep palm oil at home, so it reduces exports. Fewer exports means less levy collected. Less levy means a smaller pot to pay the subsidy from. The more successful the programme, the smaller the pot that pays for it. That is not a stable arrangement, and it is exactly why the rate just went up: the pot was running short. So the levy rate, not the mandate headline, is the honest indicator of whether the programme is affordable. Every time it rises, the programme is telling you it is under strain. Watch the rate.</p>
545
+ <h3 id="why-a-fuel-policy-is-a-protein-policy">Why a fuel policy is a protein policy<a class="anchor" href="#why-a-fuel-policy-is-a-protein-policy" aria-label="Link to this section">#</a></h3>
546
+ <p>The United States sets its volumes through the Renewable Fuel Standard, and the final rule for 2026 put biomass-based diesel at 8.86 bn gallons. There is a trap in the American numbers, so this edition skips sizing them: some RFS volumes are stated in physical gallons and some in <strong>RIN</strong> gallons, and biodiesel generates 1.5 RINs per physical gallon. Read the wrong basis and your feedstock estimate is 50% too large. This mistake is made in public, by people who should know better.</p>
547
+ <p>The safe method is to work with the change rather than the total. Suppose a rule adds one billion pounds of annual soybean oil demand.</p>
548
+ <p>Go back to ep 8. A 60 lb bushel of soybeans yields about 11 lb of oil and 44 lb of meal, in proportions fixed by the bean. You cannot ask a soybean for more oil and less meal. So one billion pounds of oil requires 1,000 ÷ 11 = about <strong>91 million bushels</strong> of additional crush. And those same bushels yield 91 × 44 = about <strong>4.0 billion pounds of meal</strong>, or 2.0 million short tons.</p>
549
+ <figure class="chartfig">
550
+ <figcaption class="charttitle">One billion of oil, four of meal</figcaption>
551
+ <svg class="chart" viewBox="0 0 640 330" width="100%" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg" role="img">
552
+ <style>.chart{--c-a:var(--accent,#1d4032);--c-b:var(--gold,#a8813c);--c-c:#4a6f8c;font-family:inherit}html[data-theme="dark"] .chart{--c-c:#7ba3c4}.chart .grid{stroke:var(--line,#ddd6c9);stroke-width:1}.chart .axis{fill:var(--ink-soft,#4a4238);font-size:12px}.chart .unit{fill:var(--ink-soft,#4a4238);font-size:11px;letter-spacing:.06em;text-transform:uppercase}.chart .ln{fill:none;stroke-width:2.25;stroke-linejoin:round;stroke-linecap:round}.chart .lg{fill:var(--ink,#16110c);font-size:12.5px}.chart .vlabel{fill:var(--ink,#16110c);font-size:11.5px;font-weight:600}@media (max-width:900px){.chart .axis{font-size:14px}.chart .unit{font-size:13px}.chart .lg{font-size:14.5px}.chart .vlabel{font-size:13.5px}.chart .ln{stroke-width:2.6}}@media (max-width:640px){.chart .axis{font-size:16px}.chart .unit{font-size:14px}.chart .lg{font-size:16px}.chart .vlabel{font-size:15px}.chart .ln{stroke-width:3.1}}</style>
553
+ <line class="grid" x1="56" y1="286.0" x2="622" y2="286.0"/>
554
+ <text class="axis" x="46" y="290.0" text-anchor="end">0</text>
555
+ <line class="grid" x1="56" y1="221.1" x2="622" y2="221.1" opacity=".45"/>
556
+ <text class="axis" x="46" y="225.1" text-anchor="end">1,000</text>
557
+ <line class="grid" x1="56" y1="156.1" x2="622" y2="156.1" opacity=".45"/>
558
+ <text class="axis" x="46" y="160.1" text-anchor="end">2,000</text>
559
+ <line class="grid" x1="56" y1="91.2" x2="622" y2="91.2" opacity=".45"/>
560
+ <text class="axis" x="46" y="95.2" text-anchor="end">3,000</text>
561
+ <line class="grid" x1="56" y1="26.3" x2="622" y2="26.3" opacity=".45"/>
562
+ <text class="axis" x="46" y="30.3" text-anchor="end">4,000</text>
563
+ <text class="unit" x="622" y="16" text-anchor="end">million lb per year</text>
564
+ <text class="axis" x="197.5" y="306" text-anchor="middle">Soybean oil</text>
565
+ <text class="axis" x="480.5" y="306" text-anchor="middle">Soybean meal</text>
566
+ <rect x="177.3" y="221.1" width="40.5" height="64.9" rx="2" fill="var(--c-a)" opacity=".85"/>
567
+ <rect x="460.3" y="26.0" width="40.5" height="260.0" rx="2" fill="var(--c-a)" opacity=".85"/>
568
+ <line class="grid" x1="56" y1="286.0" x2="622" y2="286.0"/>
569
+ </svg>
570
+ <figcaption class="chartcap">The mandate asks for the oil. The bushel delivers four times as much meal alongside it, about two million short tons that no fuel policy requested and no fuel industry can use. <span class="chartsrc">Worked example, episode 9, using the 11 lb oil and 44 lb meal yields per bushel from episode 8.</span></figcaption>
571
+ </figure>
572
+ <p>That meal was not requested by anyone. It has to be fed to an animal, somewhere, at some price, and the only thing that makes a feeder take an extra two million tons is a lower price. So the chain runs: a fuel rule bids up oil, crushers raise run rates to make more oil, the extra meal floods the feed market, and the meal price falls.</p>
573
+ <p>Now connect that to the ep 8 board crush: meal × 0.022, plus oil × 0.11, minus the bean. An oil-driven demand shock lifts the oil term. It depresses the meal term, because of the flood. And it raises the bean term, because crushers compete for beans to run harder. Two of the three legs move against a trader who bought the whole crush on the oil headline, which is why the crush captures far less of the move than the oil chart suggests. The clean expression of the view is long oil against short meal, the <strong>oil share</strong> trade: it isolates the one thing the policy actually changes.</p>
574
+ <p>The general principle is worth stating cleanly: <strong>any demand shock arriving through one joint product must be released through the other.</strong> Fixed proportions make the by-product the shock absorber, and the by-product market is where the price damage lands. A fuel policy is always, whether it intends to be or not, a protein policy.</p>
575
+ <h3 id="why-balance-sheets-now-have-an-energy-term">Why balance sheets now have an energy term<a class="anchor" href="#why-balance-sheets-now-have-an-energy-term" aria-label="Link to this section">#</a></h3>
576
+ <p>Palm and soybean oil each sit on two bids. The first is the mandate: contracted, price-insensitive, known in advance. The second is quieter.</p>
577
+ <p><strong>Gasoil</strong> is the traded wholesale price of diesel. If gasoil trades above the price of palm oil, a refiner can blend palm into diesel and make money on the blend itself, with no subsidy and no legal obligation. That is <strong>discretionary blending</strong>. Through the middle of this year it was live, because gasoil rallied roughly 30% in a fortnight and moved above both palm and soybean oil, so for a while fuel buyers were competing with food buyers for the same tonnes.</p>
578
+ <p>That second bid is the energy term, and it has three properties that make it dangerous for a crop analyst. It is <strong>large</strong>: when it is on, it competes directly with food demand. It is <strong>fast</strong>: a per-cargo decision, not a programme, so it switches off within a week of a crude sell-off. And it is <strong>unforecastable from agricultural data</strong>: nothing in a crop model, a stocks report or a weather forecast tells you where gasoil will trade.</p>
579
+ <p>The failure mode is symmetrical. Build a balance sheet with no energy line during a high-gasoil regime and you will understate demand, booking the missing tonnes to &quot;residual&quot;. Add the line at the top of the cycle and carry it forward through a 30% crude decline, and you will overstate demand by exactly the amount you were previously missing. Both errors feel like diligence at the time.</p>
580
+ <p>The discipline is to treat the energy term as a <strong>regime</strong>, not a level: state the gasoil condition under which the line is live, size it, and set it to zero the moment the condition fails. That is a harder forecast than a crop, and it is now unavoidable, because a soybean is no longer only a food.</p>
581
+ <section class="glossec"><h2 id="glossary">Glossary<a class="anchor" href="#glossary" aria-label="Link to this section">#</a></h2><p class="secnote">Every unit, convention and desk expression the show had introduced by episode 9. Nothing said in the audio should ever be unrecoverable.</p><details class="gloss"><summary>Open the glossary<span class="sl">149 terms</span></summary><div class="glossbody"><label class="gsearch"><span class="vh">Search the glossary</span><input type="search" id="gfilter" placeholder="Search terms…" autocomplete="off"></label><div class="gchips" role="group" aria-label="Filter by episode"><button type="button" class="gchip on" data-gep="all">All<span class="gn">149</span></button><button type="button" class="gchip" data-gep="1">Ep 1<span class="gn">37</span></button><button type="button" class="gchip" data-gep="2">Ep 2<span class="gn">15</span></button><button type="button" class="gchip" data-gep="3">Ep 3<span class="gn">11</span></button><button type="button" class="gchip" data-gep="4">Ep 4<span class="gn">13</span></button><button type="button" class="gchip" data-gep="5">Ep 5<span class="gn">12</span></button><button type="button" class="gchip" data-gep="6">Ep 6<span class="gn">13</span></button><button type="button" class="gchip" data-gep="7">Ep 7<span class="gn">14</span></button><button type="button" class="gchip" data-gep="8">Ep 8<span class="gn">16</span></button><button type="button" class="gchip" data-gep="9">Ep 9<span class="gn">18</span></button></div><dl id="glist"><div class="gterm" data-ep="8"><dt>45Z</dt><dd>the US clean fuel production credit, one of the two policy levers that sets American soybean oil demand <span class="gep">ep 8</span></dd></div><div class="gterm" data-ep="6"><dt>abandonment</dt><dd>planted area never harvested for grain, lost to drought, flood or a switch to silage <span class="gep">ep 6</span></dd></div><div class="gterm" data-ep="2"><dt>ABCD</dt><dd>the four historic majors, Archer Daniels Midland, Bunge, Cargill and Louis Dreyfus <span class="gep">ep 2</span></dd></div><div class="gterm" data-ep="2"><dt>arb</dt><dd>the full economics of moving a cargo, buy price plus freight and costs against the sale <span class="gep">ep 2</span></dd></div><div class="gterm" data-ep="2"><dt>asset-heavy</dt><dd>owning the physical chain, which converts a volatile trading margin into a steadier toll <span class="gep">ep 2</span></dd></div><div class="gterm" data-ep="2"><dt>asset-light</dt><dd>renting elevators, terminals and plants rather than owning them <span class="gep">ep 2</span></dd></div><div class="gterm" data-ep="1"><dt>at</dt><dd>the small word that introduces the offer side (462 bid, at 462 and a half) <span class="gep">ep 1</span></dd></div><div class="gterm" data-ep="9"><dt>B50</dt><dd>a blending mandate requiring 50 percent biodiesel in the diesel pool, the level Indonesia moved to in 2026 <span class="gep now">ep 9</span></dd></div><div class="gterm" data-ep="1"><dt>bag (coffee)</dt><dd>60 kg, how the coffee trade counts volume <span class="gep">ep 1</span></dd></div><div class="gterm" data-ep="7"><dt>balance sheet</dt><dd>the one-page supply and demand statement for one crop and one marketing year, built so that supply minus use equals ending stocks and the page closes <span class="gep">ep 7</span></dd></div><div class="gterm" data-ep="1"><dt>bid</dt><dd>the price a buyer will pay <span class="gep">ep 1</span></dd></div><div class="gterm" data-ep="4"><dt>bill of lading</dt><dd>receipt, contract of carriage and document of title in one, whoever holds it owns the cargo <span class="gep">ep 4</span></dd></div><div class="gterm" data-ep="9"><dt>biomass-based diesel</dt><dd>the RFS category covering biodiesel and renewable diesel made from fats and vegetable oils <span class="gep now">ep 9</span></dd></div><div class="gterm" data-ep="9"><dt>blend wall</dt><dd>the physical or warranty limit on how much conventional biodiesel an engine or fuel system will tolerate <span class="gep now">ep 9</span></dd></div><div class="gterm" data-ep="8"><dt>board crush</dt><dd>the processing margin implied purely by futures prices, meal price times 0.022 plus oil price times 0.11 minus the bean price, in dollars per bushel <span class="gep">ep 8</span></dd></div><div class="gterm" data-ep="1"><dt>bushel</dt><dd>volume measure standardized into weight, 60 lb for soybeans and wheat, 56 lb for corn <span class="gep">ep 1</span></dd></div><div class="gterm" data-ep="1"><dt>bushels per tonne</dt><dd>about 36.7 for soybeans and wheat, 39.4 for corn <span class="gep">ep 1</span></dd></div><div class="gterm" data-ep="3"><dt>calendar spread</dt><dd>the price difference between two months of the same contract, traded as one instrument at one price <span class="gep">ep 3</span></dd></div><div class="gterm" data-ep="4"><dt>cancelling date</dt><dd>the last day of the laycan, after which the counterparty may cancel <span class="gep">ep 4</span></dd></div><div class="gterm" data-ep="3"><dt>carry market (contango)</dt><dd>a curve with later months above nearer ones, the market pays for storage <span class="gep">ep 3</span></dd></div><div class="gterm" data-ep="2"><dt>carry-in</dt><dd>stocks left over from the previous season, the starting point of a balance sheet <span class="gep">ep 2</span></dd></div><div class="gterm" data-ep="7"><dt>carryout</dt><dd>ending stocks, the desk&#x27;s one-word name for what is left at the end of the marketing year <span class="gep">ep 7</span></dd></div><div class="gterm" data-ep="1"><dt>cents per bushel</dt><dd>Chicago grain quoting unit, 4.39 dollars per bushel is spoken four thirty-nine <span class="gep">ep 1</span></dd></div><div class="gterm" data-ep="4"><dt>CFR</dt><dd>cost and freight, the seller pays the voyage to a named destination but risk still passes at loading <span class="gep">ep 4</span></dd></div><div class="gterm" data-ep="4"><dt>charter party</dt><dd>the contract hiring the vessel, between charterer and shipowner <span class="gep">ep 4</span></dd></div><div class="gterm" data-ep="4"><dt>CIF</dt><dd>cost insurance and freight, CFR plus the seller buys the marine insurance the buyer would claim on <span class="gep">ep 4</span></dd></div><div class="gterm" data-ep="8"><dt>conversion cost</dt><dd>the variable cost of turning beans into products, gas, power, hexane, labour and maintenance, typically 35 to 50 cents a bushel at a modern plant <span class="gep">ep 8</span></dd></div><div class="gterm" data-ep="1"><dt>conversion factors</dt><dd>36.7 bushels per tonne for wheat and beans and 39.4 for corn, so cents per bushel times 0.367 or 0.394 gives dollars per tonne <span class="gep">ep 1</span></dd></div><div class="gterm" data-ep="9"><dt>CPO</dt><dd>crude palm oil, the unrefined oil pressed from the fruit of the oil palm and the benchmark grade traded internationally <span class="gep now">ep 9</span></dd></div><div class="gterm" data-ep="7"><dt>Crop Production</dt><dd>the USDA report published alongside WASDE carrying the survey-based yield and area figures <span class="gep">ep 7</span></dd></div><div class="gterm" data-ep="5"><dt>cross-hedge</dt><dd>hedging with a contract that is not your grade or your origin, which removes flat price and adds correlation risk <span class="gep">ep 5</span></dd></div><div class="gterm" data-ep="8"><dt>crush capacity</dt><dd>installed daily processing volume, a physical constraint that cannot be expanded inside a marketing year <span class="gep">ep 8</span></dd></div><div class="gterm" data-ep="1"><dt>cwt</dt><dd>hundredweight, 100 lb, the quoting unit for US rice and cattle <span class="gep">ep 1</span></dd></div><div class="gterm" data-ep="1"><dt>cwt (hundredweight)</dt><dd>100 lb, the quoting unit for US rice <span class="gep">ep 1</span></dd></div><div class="gterm" data-ep="3"><dt>Dec over</dt><dd>spread quoting convention that names the expensive leg, December fifteen over means December is 15 cents above the other month <span class="gep">ep 3</span></dd></div><div class="gterm" data-ep="1"><dt>deferred</dt><dd>months or shipment windows further out <span class="gep">ep 1</span></dd></div><div class="gterm" data-ep="2"><dt>demurrage</dt><dd>the penalty owed when a vessel is held beyond the agreed laytime <span class="gep">ep 2</span></dd></div><div class="gterm" data-ep="4"><dt>despatch</dt><dd>the reward paid when loading beats laytime, customarily half the demurrage rate <span class="gep">ep 4</span></dd></div><div class="gterm" data-ep="1"><dt>differential</dt><dd>the premium or discount to a named futures month, as in November plus 80, the negotiated part of a physical quote <span class="gep">ep 1</span></dd></div><div class="gterm" data-ep="1"><dt>differential (basis)</dt><dd>the premium or discount to a named futures month, quoted as plus 80 or minus 20 <span class="gep">ep 1</span></dd></div><div class="gterm" data-ep="9"><dt>discretionary blending</dt><dd>blending vegetable oil into the fuel pool purely because it is cheaper than gasoil, with no mandate and no subsidy behind it <span class="gep now">ep 9</span></dd></div><div class="gterm" data-ep="6"><dt>distillers grains</dt><dd>DDGS, the protein co-product of ethanol production, sold back into the feed market <span class="gep">ep 6</span></dd></div><div class="gterm" data-ep="1"><dt>done</dt><dd>the word that seals a trade <span class="gep">ep 1</span></dd></div><div class="gterm" data-ep="4"><dt>draft survey</dt><dd>weighing a cargo by reading the ship&#x27;s displacement before and after loading <span class="gep">ep 4</span></dd></div><div class="gterm" data-ep="8"><dt>draw area</dt><dd>the geographic catchment a crush plant buys its beans from, whose size sets how hard it must bid the local basis <span class="gep">ep 8</span></dd></div><div class="gterm" data-ep="5"><dt>durum</dt><dd>the pasta wheat, a separate species with its own thin market <span class="gep">ep 5</span></dd></div><div class="gterm" data-ep="6"><dt>ethanol grind</dt><dd>the rate at which ethanol plants consume corn, which slows when the plant margin turns negative and removes corn demand in steps <span class="gep">ep 6</span></dd></div><div class="gterm" data-ep="9"><dt>export levy</dt><dd>a tax charged on a commodity leaving the country, used in Indonesia both to discourage exports of crude palm oil and to fund the domestic blending subsidy <span class="gep now">ep 9</span></dd></div><div class="gterm" data-ep="5"><dt>falling number</dt><dd>the sprout-damage test, a low number demotes milling wheat to feed wheat <span class="gep">ep 5</span></dd></div><div class="gterm" data-ep="9"><dt>FAME</dt><dd>fatty acid methyl ester, the chemical name for conventional biodiesel made by reacting a vegetable oil with methanol <span class="gep now">ep 9</span></dd></div><div class="gterm" data-ep="9"><dt>FCPO</dt><dd>the Bursa Malaysia Derivatives crude palm oil futures contract, 25 tonnes per lot, quoted in Malaysian ringgit per tonne with a one ringgit tick <span class="gep now">ep 9</span></dd></div><div class="gterm" data-ep="7"><dt>feed and residual</dt><dd>the inferred demand line that carries livestock feeding together with every measurement error in the rest of the sheet <span class="gep">ep 7</span></dd></div><div class="gterm" data-ep="6"><dt>feed floor</dt><dd>the price at which feed substitution demand appears under a grain, corn setting the floor under feed wheat <span class="gep">ep 6</span></dd></div><div class="gterm" data-ep="6"><dt>feed wheat</dt><dd>wheat sold on energy and protein rather than milling specification, priced relationally against corn rather than at a flat price <span class="gep">ep 6</span></dd></div><div class="gterm" data-ep="1"><dt>firm</dt><dd>a tradable quote that binds if accepted, often with a time limit <span class="gep">ep 1</span></dd></div><div class="gterm" data-ep="1"><dt>five percent more or less</dt><dd>the contractual tolerance on cargo size, exercised at the seller&#x27;s option <span class="gep">ep 1</span></dd></div><div class="gterm" data-ep="1"><dt>flat price</dt><dd>the full outright price level <span class="gep">ep 1</span></dd></div><div class="gterm" data-ep="2"><dt>flat price exposure</dt><dd>outright price risk, removed deliberately by hedging so only the basis remains <span class="gep">ep 2</span></dd></div><div class="gterm" data-ep="2"><dt>FOB</dt><dd>free on board, the cargo is priced at the load port with the buyer taking it from the ship&#x27;s rail <span class="gep">ep 2</span></dd></div><div class="gterm" data-ep="3"><dt>front month</dt><dd>the nearest actively traded contract month, where liquidity is deepest <span class="gep">ep 3</span></dd></div><div class="gterm" data-ep="3"><dt>full carry</dt><dd>storage plus interest per month of holding grain, the practical ceiling on a carry spread <span class="gep">ep 3</span></dd></div><div class="gterm" data-ep="9"><dt>gasoil</dt><dd>the traded middle distillate that diesel prices off, and the reference against which discretionary blending economics are judged <span class="gep now">ep 9</span></dd></div><div class="gterm" data-ep="7"><dt>Grain Stocks</dt><dd>the quarterly USDA survey of physical inventories, from which the feed and residual line is backed out <span class="gep">ep 7</span></dd></div><div class="gterm" data-ep="8"><dt>gross processing margin</dt><dd>the industry name for product value minus raw material cost, the crush stated as a margin <span class="gep">ep 8</span></dd></div><div class="gterm" data-ep="5"><dt>hard red spring (HRS)</dt><dd>the 13.5 percent plus Minneapolis wheat bought to lift the protein of a grist <span class="gep">ep 5</span></dd></div><div class="gterm" data-ep="5"><dt>hard red winter (HRW)</dt><dd>the 11 to 12.5 percent bread wheat priced at Kansas City, the US wheat that competes with the Black Sea <span class="gep">ep 5</span></dd></div><div class="gterm" data-ep="6"><dt>harvested acres</dt><dd>area actually cut for grain, roughly 8 million acres below planted for US corn, and the denominator that yield is quoted against <span class="gep">ep 6</span></dd></div><div class="gterm" data-ep="8"><dt>hexane</dt><dd>the solvent used to extract the last of the oil from the flaked bean, and a real line in the conversion cost <span class="gep">ep 8</span></dd></div><div class="gterm" data-ep="1"><dt>hit</dt><dd>your bid was taken by a seller <span class="gep">ep 1</span></dd></div><div class="gterm" data-ep="1"><dt>hit the bid</dt><dd>to sell into someone else&#x27;s bid <span class="gep">ep 1</span></dd></div><div class="gterm" data-ep="7"><dt>implied disappearance</dt><dd>use derived by subtraction rather than by measurement, the technique that produces the residual lines of a balance sheet <span class="gep">ep 7</span></dd></div><div class="gterm" data-ep="6"><dt>inclusion rate</dt><dd>the share of a single ingredient in a feed ration, capped by nutrition and by anti-nutritional factors <span class="gep">ep 6</span></dd></div><div class="gterm" data-ep="4"><dt>Incoterms</dt><dd>the standard three-letter trade terms that allocate cost and risk between buyer and seller <span class="gep">ep 4</span></dd></div><div class="gterm" data-ep="1"><dt>indication</dt><dd>a guide price that is not firm <span class="gep">ep 1</span></dd></div><div class="gterm" data-ep="3"><dt>initial margin</dt><dd>the deposit the clearing house takes per lot when a position is opened <span class="gep">ep 3</span></dd></div><div class="gterm" data-ep="5"><dt>inter-exchange spread</dt><dd>the price gap between two exchanges pricing related but different goods, such as Kansas City over Chicago <span class="gep">ep 5</span></dd></div><div class="gterm" data-ep="3"><dt>inverse (backwardation)</dt><dd>a curve with nearer months above later ones, the market pays a premium for immediate delivery <span class="gep">ep 3</span></dd></div><div class="gterm" data-ep="8"><dt>joint product</dt><dd>two outputs produced in fixed proportion from one input, so that neither can be made without the other <span class="gep">ep 8</span></dd></div><div class="gterm" data-ep="9"><dt>kilolitre</dt><dd>one thousand litres, the volume unit Asian governments state biofuel mandates in, converted to tonnes using the fuel&#x27;s density of about 0.88 t per cubic metre for biodiesel <span class="gep now">ep 9</span></dd></div><div class="gterm" data-ep="1"><dt>laycan</dt><dd>the window during which a vessel may present for loading <span class="gep">ep 1</span></dd></div><div class="gterm" data-ep="4"><dt>laytime</dt><dd>the contractually allowed time to load or discharge before demurrage begins <span class="gep">ep 4</span></dd></div><div class="gterm" data-ep="1"><dt>lift the offer</dt><dd>to buy from someone else&#x27;s offer <span class="gep">ep 1</span></dd></div><div class="gterm" data-ep="1"><dt>lifted</dt><dd>your offer was taken by a buyer <span class="gep">ep 1</span></dd></div><div class="gterm" data-ep="3"><dt>limit move</dt><dd>an exchange-set maximum daily price change, trading pauses beyond it <span class="gep">ep 3</span></dd></div><div class="gterm" data-ep="2"><dt>line-up</dt><dd>the queue of vessels waiting to load at a port, a key driver of origin basis <span class="gep">ep 2</span></dd></div><div class="gterm" data-ep="1"><dt>lot</dt><dd>one futures contract, 5,000 bushels for Chicago grains, the unit desks count positions in <span class="gep">ep 1</span></dd></div><div class="gterm" data-ep="7"><dt>marketing year</dt><dd>the accounting year a crop is measured in, September to August for US corn and soybeans and June to May for US wheat <span class="gep">ep 7</span></dd></div><div class="gterm" data-ep="5"><dt>Matif milling wheat (EBM)</dt><dd>the Paris contract, 50 tonnes a lot quoted in euros per tonne and delivered into Rouen and Dunkirk <span class="gep">ep 5</span></dd></div><div class="gterm" data-ep="8"><dt>meal contract</dt><dd>CBOT soybean meal, 100 short tons, quoted in dollars per short ton <span class="gep">ep 8</span></dd></div><div class="gterm" data-ep="1"><dt>metric tonne</dt><dd>2,204.6 lb, the grain trading weight unit outside the US <span class="gep">ep 1</span></dd></div><div class="gterm" data-ep="1"><dt>month codes</dt><dd>F G H J K M N Q U V X Z for January through December, the Z is December <span class="gep">ep 1</span></dd></div><div class="gterm" data-ep="7"><dt>NASS</dt><dd>USDA&#x27;s National Agricultural Statistics Service, the body running the surveys behind the published numbers <span class="gep">ep 7</span></dd></div><div class="gterm" data-ep="7"><dt>new crop</dt><dd>the marketing year about to begin, priced by the contract months that follow the coming harvest <span class="gep">ep 7</span></dd></div><div class="gterm" data-ep="4"><dt>nomination</dt><dd>formally naming the performing vessel under a cargo contract <span class="gep">ep 4</span></dd></div><div class="gterm" data-ep="8"><dt>NOPA</dt><dd>the National Oilseed Processors Association, whose monthly published crush figure makes US soybean crush a measured line rather than an inferred one <span class="gep">ep 8</span></dd></div><div class="gterm" data-ep="4"><dt>notice of readiness (NOR)</dt><dd>the master&#x27;s formal declaration that the vessel has arrived and is ready, it starts the laytime clock <span class="gep">ep 4</span></dd></div><div class="gterm" data-ep="1"><dt>offer</dt><dd>the price a seller will accept <span class="gep">ep 1</span></dd></div><div class="gterm" data-ep="8"><dt>oil contract</dt><dd>CBOT soybean oil, 60,000 pounds, quoted in cents per pound <span class="gep">ep 8</span></dd></div><div class="gterm" data-ep="8"><dt>oil share</dt><dd>soybean oil&#x27;s percentage of the combined value of the meal and oil produced from one bushel <span class="gep">ep 8</span></dd></div><div class="gterm" data-ep="9"><dt>oil share trade</dt><dd>long soybean oil against short soybean meal, the clean expression of a view on a fuel policy because it isolates relative product value from the bean basis <span class="gep now">ep 9</span></dd></div><div class="gterm" data-ep="7"><dt>old crop</dt><dd>the marketing year now ending, priced by the contract months before the new harvest arrives <span class="gep">ep 7</span></dd></div><div class="gterm" data-ep="9"><dt>olein and stearin</dt><dd>the liquid and solid fractions palm separates into when refined, sold into cooking oil and into fats respectively <span class="gep now">ep 9</span></dd></div><div class="gterm" data-ep="2"><dt>paper</dt><dd>exchange futures and options, used by a physical desk to hedge rather than to speculate <span class="gep">ep 2</span></dd></div><div class="gterm" data-ep="2"><dt>physical (cash)</dt><dd>real cargoes under contract with specs and load windows, as opposed to paper <span class="gep">ep 2</span></dd></div><div class="gterm" data-ep="8"><dt>plant crush</dt><dd>what a physical plant actually earns, the board crush adjusted for bean, meal and oil basis and net of conversion cost <span class="gep">ep 8</span></dd></div><div class="gterm" data-ep="6"><dt>planted acres</dt><dd>area sown, the number that moves on farmer decisions and USDA area surveys <span class="gep">ep 6</span></dd></div><div class="gterm" data-ep="1"><dt>point</dt><dd>one hundredth of a cent per pound, how softs desks count moves <span class="gep">ep 1</span></dd></div><div class="gterm" data-ep="1"><dt>point (softs)</dt><dd>one hundredth of a cent per pound, so up 300 points means up 3 cents <span class="gep">ep 1</span></dd></div><div class="gterm" data-ep="6"><dt>pollination</dt><dd>the roughly one-week corn window in mid-July in the northern hemisphere after which the ear count is fixed and no forecast can change it <span class="gep">ep 6</span></dd></div><div class="gterm" data-ep="5"><dt>price assessment</dt><dd>a published daily price built by surveying brokers and exporters, used where no futures contract exists <span class="gep">ep 5</span></dd></div><div class="gterm" data-ep="1"><dt>prompt</dt><dd>the nearby month or shipment window, ready to move now <span class="gep">ep 1</span></dd></div><div class="gterm" data-ep="5"><dt>protein spec</dt><dd>the contractual protein percentage that turns the word wheat into a price <span class="gep">ep 5</span></dd></div><div class="gterm" data-ep="8"><dt>putting on the crush</dt><dd>buying bean futures and selling meal and oil futures against them in a 10-11-9 lot ratio, which fixes the processing margin <span class="gep">ep 8</span></dd></div><div class="gterm" data-ep="5"><dt>quality basis</dt><dd>the spread between the grade you own and the grade the futures contract delivers <span class="gep">ep 5</span></dd></div><div class="gterm" data-ep="6"><dt>ration</dt><dd>the formulated feed mix a mill grinds, in which every ingredient carries an inclusion limit and a substitution price against the others <span class="gep">ep 6</span></dd></div><div class="gterm" data-ep="9"><dt>renewable diesel</dt><dd>hydrotreated vegetable oil or HVO, a drop-in diesel chemically identical to fossil diesel and not limited by a blend wall, unlike FAME <span class="gep now">ep 9</span></dd></div><div class="gterm" data-ep="2"><dt>residual</dt><dd>a figure obtained by subtraction, such as ending stocks, which absorbs any error in the larger numbers almost in full <span class="gep">ep 2</span></dd></div><div class="gterm" data-ep="8"><dt>reverse crush</dt><dd>the opposite position, short beans and long products, used when a processor expects to idle capacity rather than run it <span class="gep">ep 8</span></dd></div><div class="gterm" data-ep="9"><dt>RFS</dt><dd>the US Renewable Fuel Standard, the rule that sets annual minimum volumes of renewable fuel that must be blended into American transport fuel <span class="gep now">ep 9</span></dd></div><div class="gterm" data-ep="9"><dt>RIN</dt><dd>renewable identification number, the tradable compliance certificate generated with each gallon of renewable fuel, at 1.5 RINs per gallon of biodiesel, which is why a mandate volume must be checked for basis before it is multiplied by a feedstock factor <span class="gep now">ep 9</span></dd></div><div class="gterm" data-ep="3"><dt>roll</dt><dd>closing a hedge in one month and reopening it further out, executed as a spread trade <span class="gep">ep 3</span></dd></div><div class="gterm" data-ep="8"><dt>run rate</dt><dd>the share of installed capacity a plant is actually operating at, the lever a crusher pulls when margins move <span class="gep">ep 8</span></dd></div><div class="gterm" data-ep="9"><dt>RVO</dt><dd>renewable volume obligation, the share of the national mandate assigned to an individual refiner or importer <span class="gep now">ep 9</span></dd></div><div class="gterm" data-ep="6"><dt>safrinha</dt><dd>Brazil&#x27;s second corn crop, planted February to March into soybean stubble and pollinating April to May, about three quarters of Brazilian corn production <span class="gep">ep 6</span></dd></div><div class="gterm" data-ep="1"><dt>short ton</dt><dd>2,000 lb, used by US soybean meal, about 10 percent lighter than a metric tonne <span class="gep">ep 1</span></dd></div><div class="gterm" data-ep="5"><dt>soft red winter (SRW)</dt><dd>the low-protein soft wheat the Chicago contract delivers, used for cakes biscuits and crackers <span class="gep">ep 5</span></dd></div><div class="gterm" data-ep="2"><dt>space time form</dt><dd>the three transformations a merchant is paid for, geography, storage and processing <span class="gep">ep 2</span></dd></div><div class="gterm" data-ep="9"><dt>standing bid</dt><dd>demand that is present regardless of price because it is created by legal obligation rather than by choice <span class="gep now">ep 9</span></dd></div><div class="gterm" data-ep="4"><dt>statement of facts</dt><dd>the port log of events both sides use to fight laytime claims <span class="gep">ep 4</span></dd></div><div class="gterm" data-ep="2"><dt>stocks-to-use</dt><dd>ending stocks divided by total use, the market&#x27;s tension gauge <span class="gep">ep 2</span></dd></div><div class="gterm" data-ep="9"><dt>substitution spread</dt><dd>the price gap between two competing vegetable oils, which sets the point at which a refiner reformulates from one to the other <span class="gep now">ep 9</span></dd></div><div class="gterm" data-ep="5"><dt>test weight</dt><dd>the density measure telling a miller how much flour comes out of a tonne <span class="gep">ep 5</span></dd></div><div class="gterm" data-ep="1"><dt>tick</dt><dd>smallest price increment, a quarter cent per bushel in Chicago grains, worth 12.50 dollars per lot <span class="gep">ep 1</span></dd></div><div class="gterm" data-ep="3"><dt>ticker</dt><dd>the short screen code a contract is spoken by, ZW wheat, ZC corn, ZS soybeans, ZM meal, ZL oil, KC coffee, SB sugar, CT cotton <span class="gep">ep 3</span></dd></div><div class="gterm" data-ep="7"><dt>total supply</dt><dd>carry-in plus production plus imports, the top block of a balance sheet <span class="gep">ep 7</span></dd></div><div class="gterm" data-ep="7"><dt>total use</dt><dd>domestic use plus exports, the bottom block of a balance sheet <span class="gep">ep 7</span></dd></div><div class="gterm" data-ep="7"><dt>trade average</dt><dd>the published mean of analysts&#x27; pre-report estimates, and therefore the expectation already contained in the price <span class="gep">ep 7</span></dd></div><div class="gterm" data-ep="6"><dt>trend yield</dt><dd>the yield a crop would produce on normal weather, the baseline against which a weather premium is measured <span class="gep">ep 6</span></dd></div><div class="gterm" data-ep="3"><dt>variation margin</dt><dd>the daily cash settlement of a position mark to market, paid the same day <span class="gep">ep 3</span></dd></div><div class="gterm" data-ep="2"><dt>war-risk premium</dt><dd>an insurance surcharge on a vessel&#x27;s hull value for sailing into a conflict zone, quoted as a percentage <span class="gep">ep 2</span></dd></div><div class="gterm" data-ep="1"><dt>WASDE</dt><dd>the USDA monthly World Agricultural Supply and Demand Estimates report <span class="gep">ep 1</span></dd></div><div class="gterm" data-ep="1"><dt>washed out</dt><dd>offsetting trades cancel each other and only the price difference is settled <span class="gep">ep 1</span></dd></div><div class="gterm" data-ep="1"><dt>washout</dt><dd>cancelling two offsetting physical contracts by settling the price difference instead of shipping <span class="gep">ep 1</span></dd></div><div class="gterm" data-ep="6"><dt>weather premium</dt><dd>the gap between where a crop trades and where it would trade at trend yield, the price of a distribution of outcomes rather than of a forecast <span class="gep">ep 6</span></dd></div><div class="gterm" data-ep="4"><dt>weather working day</dt><dd>a laytime day that counts only when weather permits cargo work <span class="gep">ep 4</span></dd></div><div class="gterm" data-ep="7"><dt>whisper number</dt><dd>the expectation the market is actually trading into a report, which can sit away from the published trade average <span class="gep">ep 7</span></dd></div><div class="gterm" data-ep="1"><dt>work</dt><dd>leave an order resting with a broker <span class="gep">ep 1</span></dd></div><div class="gterm" data-ep="1"><dt>work an order</dt><dd>leave an order resting at your price and wait <span class="gep">ep 1</span></dd></div><div class="gterm" data-ep="1"><dt>workable</dt><dd>the quoted price is negotiable <span class="gep">ep 1</span></dd></div></dl><p class="gnone" hidden>No term matches that.</p></div></details></section>
582
+ </main>
583
+ <nav class="epnav" aria-label="Episodes">
584
+ <a class="epprev" href="ep08.html"><span class="dir">← Previous</span><span class="ept">The Soybean Complex and the Crush</span><span class="epn">Episode 8</span></a>
585
+ <a class="epnext" href="ep10.html"><span class="dir">Next →</span><span class="ept">Freight: Dry Bulk and Chartering</span><span class="epn">Episode 10</span></a>
586
+ </nav>
587
+ <details class="archive"><summary>All episodes<span class="sl">17 so far</span></summary><ol class="arclist"><li><a href="ep01.html"><b>01</b> The Units and the Language of the Desk</a></li><li><a href="ep02.html"><b>02</b> What a Merchant Does, and Why Basis Is the Whole Game</a></li><li><a href="ep03.html"><b>03</b> Futures Plumbing and the Shape of the Curve</a></li><li><a href="ep04.html"><b>04</b> The Physical Chain, End to End</a></li><li><a href="ep05.html"><b>05</b> Wheat: The Map and the Screens</a></li><li><a href="ep06.html"><b>06</b> Corn, Crop Calendars and Weather Risk</a></li><li><a href="ep07.html"><b>07</b> WASDE and Building a Balance Sheet</a></li><li><a href="ep08.html"><b>08</b> The Soybean Complex and the Crush</a></li><li class="here" aria-current="page"><a href="ep09.html"><b>09</b> Vegetable oils and biofuels</a></li><li><a href="ep10.html"><b>10</b> Freight: Dry Bulk and Chartering</a></li><li><a href="ep11.html"><b>11</b> Storage, Elevation and Trade Flows</a></li><li><a href="ep12.html"><b>12</b> Coffee: The Market</a></li><li><a href="ep13.html"><b>13</b> Coffee: Differentials, PTBF and Volatility</a></li><li><a href="ep14.html"><b>14</b> Sugar: Two Contracts, the Switch and the Refiner</a></li><li><a href="ep15.html"><b>15</b> Cotton, Rice and Juice</a></li><li><a href="ep16.html"><b>16</b> Spreads: Calendar, Inter-Commodity, Inter-Exchange</a></li><li><a href="ep17.html"><b>17</b> Options: The Fence, the Vol Crush and the Wing You Sold</a></li></ol></details>
588
+ <footer>
589
+ <span class="sig"><b>Soft Commodity Trading</b> — a daily briefing on physical commodity trading.</span>
590
+ <span><a href="https://storage.googleapis.com/podcast-audio-2647223968/index.html">All episodes</a> · <a href="https://storage.googleapis.com/podcast-audio-2647223968/commodity-desk-daily/feed.xml">RSS</a></span>
591
+ </footer>
592
+ </div>
593
+ <script>
594
+ (function(){
595
+ var doc = document.documentElement;
596
+
597
+ /* theme */
598
+ var btn = document.querySelector('.themebtn');
599
+ if(btn) btn.addEventListener('click', function(){
600
+ var next = doc.getAttribute('data-theme') === 'dark' ? 'light' : 'dark';
601
+ doc.setAttribute('data-theme', next);
602
+ try{ localStorage.setItem('cdd-theme', next); }catch(e){}
603
+ });
604
+
605
+ /* reading progress */
606
+ var bar = document.getElementById('bar'), ticking = false;
607
+ function progress(){
608
+ var h = doc.scrollHeight - innerHeight;
609
+ bar.style.width = (h > 0 ? Math.min(100, Math.max(0, scrollY / h * 100)) : 0) + '%';
610
+ ticking = false;
611
+ }
612
+ if(bar){
613
+ addEventListener('scroll', function(){
614
+ if(!ticking){ ticking = true; requestAnimationFrame(progress); }
615
+ }, {passive:true});
616
+ addEventListener('resize', progress, {passive:true});
617
+ progress();
618
+ }
619
+
620
+ /* contents: mark the section being read */
621
+ var links = [].slice.call(document.querySelectorAll('.toc a'));
622
+ if(links.length && 'IntersectionObserver' in window){
623
+ var map = {};
624
+ links.forEach(function(a){
625
+ var el = document.getElementById(decodeURIComponent(a.hash.slice(1)));
626
+ if(el) map[el.id] = a.parentNode;
627
+ });
628
+ var seen = [];
629
+ var io = new IntersectionObserver(function(entries){
630
+ entries.forEach(function(en){
631
+ var id = en.target.id, at = seen.indexOf(id);
632
+ if(en.isIntersecting){ if(at < 0) seen.push(id); }
633
+ else if(at >= 0){ seen.splice(at, 1); }
634
+ });
635
+ links.forEach(function(a){ a.parentNode.classList.remove('on'); });
636
+ if(seen.length && map[seen[0]]) map[seen[0]].classList.add('on');
637
+ }, {rootMargin:'-64px 0px -70% 0px'});
638
+ Object.keys(map).forEach(function(id){
639
+ var el = document.getElementById(id); if(el) io.observe(el);
640
+ });
641
+ }
642
+
643
+ /* playback speed */
644
+ var audio = document.querySelector('audio');
645
+ [].forEach.call(document.querySelectorAll('.rate'), function(b){
646
+ b.addEventListener('click', function(){
647
+ if(!audio) return;
648
+ audio.playbackRate = parseFloat(b.dataset.rate);
649
+ [].forEach.call(document.querySelectorAll('.rate'), function(o){
650
+ o.setAttribute('aria-pressed', String(o === b));
651
+ });
652
+ });
653
+ });
654
+
655
+ /* offline: keep a copy of this page through the folder's service worker */
656
+ var offBtn = document.getElementById('offline'), offNote = document.getElementById('offnote');
657
+ if(offBtn && 'serviceWorker' in navigator && 'caches' in window &&
658
+ (location.protocol === 'https:' || location.hostname === 'localhost')){
659
+ var CACHE = 'sct-offline-v1';
660
+ var pageKey = location.origin + location.pathname;
661
+ navigator.serviceWorker.register('sw.js').catch(function(){});
662
+ offBtn.hidden = false;
663
+ function note(t){ if(offNote){ offNote.textContent = t; offNote.hidden = !t; } }
664
+ function markSaved(){
665
+ offBtn.classList.add('saved'); offBtn.textContent = 'Saved offline ✓';
666
+ offBtn.disabled = false;
667
+ note('This page opens without a connection at this address. Tap again to remove the copy.');
668
+ }
669
+ caches.open(CACHE).then(function(c){ return c.match(pageKey); }).then(function(hit){
670
+ if(hit) markSaved();
671
+ }).catch(function(){});
672
+ offBtn.addEventListener('click', function(){
673
+ if(offBtn.classList.contains('saved')){
674
+ caches.open(CACHE).then(function(c){ return c.delete(pageKey); }).then(function(){
675
+ offBtn.classList.remove('saved'); offBtn.textContent = 'Save offline'; note('');
676
+ });
677
+ return;
678
+ }
679
+ offBtn.disabled = true; offBtn.textContent = 'Saving…';
680
+ caches.open(CACHE).then(function(c){
681
+ return fetch(pageKey, {cache:'reload'}).then(function(r){
682
+ if(!r.ok) throw new Error('page'); return c.put(pageKey, r);
683
+ });
684
+ }).then(markSaved).catch(function(){
685
+ offBtn.disabled = false; offBtn.textContent = 'Save offline';
686
+ note('Could not save here. Use Share → Add to Reading List instead.');
687
+ });
688
+ });
689
+ }
690
+
691
+ /* solutions: reveal all / hide all */
692
+ [].forEach.call(document.querySelectorAll('[data-solnall]'), function(b){
693
+ b.addEventListener('click', function(){
694
+ var open = b.dataset.solnall === 'open';
695
+ [].forEach.call(document.querySelectorAll('details.soln'), function(d){
696
+ d.open = open;
697
+ });
698
+ });
699
+ });
700
+
701
+ /* an answer linked to directly should already be open */
702
+ function openTarget(){
703
+ var id = location.hash.slice(1);
704
+ if(!id) return;
705
+ var el = document.getElementById(decodeURIComponent(id));
706
+ while(el){
707
+ if(el.tagName === 'DETAILS') el.open = true;
708
+ el = el.parentElement;
709
+ }
710
+ }
711
+ addEventListener('hashchange', openTarget); openTarget();
712
+
713
+ /* glossary: an episode chip and a search box, which compose */
714
+ var gf = document.getElementById('gfilter'), list = document.getElementById('glist');
715
+ if(list){
716
+ var rows = [].slice.call(list.querySelectorAll('.gterm'));
717
+ var chips = [].slice.call(document.querySelectorAll('.gchip'));
718
+ var none = document.querySelector('.gnone');
719
+ var pick = 'all';
720
+ function apply(){
721
+ var q = gf ? gf.value.trim().toLowerCase() : '', hits = 0;
722
+ rows.forEach(function(r){
723
+ var on = (pick === 'all' || r.dataset.ep === pick) &&
724
+ (!q || r.textContent.toLowerCase().indexOf(q) > -1);
725
+ r.hidden = !on; if(on) hits++;
726
+ });
727
+ if(none) none.hidden = hits > 0;
728
+ }
729
+ if(gf) gf.addEventListener('input', apply);
730
+ chips.forEach(function(c){
731
+ c.addEventListener('click', function(){
732
+ pick = c.dataset.gep;
733
+ chips.forEach(function(o){ o.classList.toggle('on', o === c); });
734
+ apply();
735
+ });
736
+ });
737
+ }
738
+
739
+ /* printing: paper has no disclosure triangles */
740
+ var reopen = [];
741
+ addEventListener('beforeprint', function(){
742
+ reopen = [].filter.call(document.querySelectorAll('details'), function(d){
743
+ return !d.open;
744
+ });
745
+ reopen.forEach(function(d){ d.open = true; });
746
+ });
747
+ addEventListener('afterprint', function(){
748
+ reopen.forEach(function(d){ d.open = false; });
749
+ reopen = [];
750
+ });
751
+ })();
752
+ </script>
753
+ </body>
754
+ </html>