Filter semi ladder to 2 OTM/ITM or 1 ATM by moneyness selection.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
+61
-14
@@ -915,29 +915,75 @@ export default function PlanPage() {
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
{(ladder.rows || []).map((r) => {
|
{(() => {
|
||||||
|
const all = ladder.rows || [];
|
||||||
|
let shown = all;
|
||||||
|
if (semiMny === "atm") {
|
||||||
|
shown = all.filter((r) => r.tag === "atm").slice(0, 1);
|
||||||
|
} else if (semiMny === "otm") {
|
||||||
|
shown = all
|
||||||
|
.filter(
|
||||||
|
(r) =>
|
||||||
|
r.tag === "otm" &&
|
||||||
|
Math.abs(r.offset) <=
|
||||||
|
Number(semiOtmOff) + 1e-9,
|
||||||
|
)
|
||||||
|
.sort(
|
||||||
|
(a, b) =>
|
||||||
|
Math.abs(a.offset) - Math.abs(b.offset),
|
||||||
|
)
|
||||||
|
.slice(0, 2);
|
||||||
|
// Call:虚值高行权在上;Put:虚值低行权在上
|
||||||
|
shown.sort((a, b) =>
|
||||||
|
semiView === "short"
|
||||||
|
? a.strike - b.strike
|
||||||
|
: b.strike - a.strike,
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
// 实值:最接近现价的 2 档
|
||||||
|
shown = all
|
||||||
|
.filter((r) => r.tag === "itm")
|
||||||
|
.sort(
|
||||||
|
(a, b) =>
|
||||||
|
Math.abs(a.offset) - Math.abs(b.offset),
|
||||||
|
)
|
||||||
|
.slice(0, 2);
|
||||||
|
shown.sort((a, b) =>
|
||||||
|
semiView === "short"
|
||||||
|
? a.strike - b.strike
|
||||||
|
: b.strike - a.strike,
|
||||||
|
);
|
||||||
|
}
|
||||||
|
if (shown.length === 0) {
|
||||||
|
return (
|
||||||
|
<tr>
|
||||||
|
<td colSpan={4} className="meta">
|
||||||
|
当前无符合「
|
||||||
|
{semiMny === "itm"
|
||||||
|
? "实值"
|
||||||
|
: semiMny === "atm"
|
||||||
|
? "平值"
|
||||||
|
: "虚值"}
|
||||||
|
」的报价档
|
||||||
|
{semiMny === "otm"
|
||||||
|
? `(偏离≤${fmt(semiOtmOff, 0)})`
|
||||||
|
: ""}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return shown.map((r) => {
|
||||||
const tagZh =
|
const tagZh =
|
||||||
r.tag === "atm"
|
r.tag === "atm"
|
||||||
? "平值"
|
? "平值"
|
||||||
: r.tag === "itm"
|
: r.tag === "itm"
|
||||||
? "实值"
|
? "实值"
|
||||||
: "虚值";
|
: "虚值";
|
||||||
const hi =
|
|
||||||
(semiMny === "otm" &&
|
|
||||||
r.tag === "otm" &&
|
|
||||||
Math.abs(r.offset) <= Number(semiOtmOff) + 1e-9) ||
|
|
||||||
(semiMny === "atm" && r.tag === "atm") ||
|
|
||||||
(semiMny === "itm" &&
|
|
||||||
(r.tag === "itm" || r.tag === "atm"));
|
|
||||||
return (
|
return (
|
||||||
<tr
|
<tr
|
||||||
key={r.strike}
|
key={r.strike}
|
||||||
className={
|
className={
|
||||||
r.tag === "atm"
|
r.tag === "atm" ? "plan-t-atm" : "plan-t-pick"
|
||||||
? "plan-t-atm"
|
|
||||||
: hi
|
|
||||||
? "plan-t-pick"
|
|
||||||
: undefined
|
|
||||||
}
|
}
|
||||||
>
|
>
|
||||||
<td className="mono plan-t-k">
|
<td className="mono plan-t-k">
|
||||||
@@ -957,7 +1003,8 @@ export default function PlanPage() {
|
|||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
);
|
);
|
||||||
})}
|
});
|
||||||
|
})()}
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user