(Object... optionalArgs)
| 1476 | } |
| 1477 | |
| 1478 | public Object safeMarket(Object... optionalArgs) |
| 1479 | { |
| 1480 | Object marketId = Helpers.getArg(optionalArgs, 0, null); |
| 1481 | Object market = Helpers.getArg(optionalArgs, 1, null); |
| 1482 | Object delimiter = Helpers.getArg(optionalArgs, 2, null); |
| 1483 | Object marketType = Helpers.getArg(optionalArgs, 3, null); |
| 1484 | Object isOption = false; |
| 1485 | if (Helpers.isTrue(!Helpers.isEqual(marketId, null))) |
| 1486 | { |
| 1487 | Object parts = Helpers.split(marketId, "-"); |
| 1488 | Object partsLength = Helpers.getArrayLength(parts); |
| 1489 | // a valid OKX option ends with the call/put flag and carries expiry+strike segments, |
| 1490 | // e.g. the market id BTC-USD-220325-194000-P (5 parts) or the unified symbol |
| 1491 | // BTC/USD:USD-260611-54000-C (4 parts). Requiring more than 3 dash-separated parts avoids |
| 1492 | // misclassifying ordinary ids that merely contain "-C"/"-P" (such as a SPOT id like |
| 1493 | // "PERFTESTA-PERFTESTB") as expired options, which would crash createExpiredOptionMarket |
| 1494 | // on the missing expiry. |
| 1495 | isOption = Helpers.isTrue((Helpers.isGreaterThan(partsLength, 3))) && Helpers.isTrue((Helpers.isTrue(((String)marketId).endsWith(((String)"-C"))) || Helpers.isTrue(((String)marketId).endsWith(((String)"-P"))))); |
| 1496 | } |
| 1497 | if (Helpers.isTrue(Helpers.isTrue(isOption) && !Helpers.isTrue((Helpers.inOp(this.markets_by_id, marketId))))) |
| 1498 | { |
| 1499 | // handle expired option contracts |
| 1500 | return this.createExpiredOptionMarket(marketId); |
| 1501 | } |
| 1502 | return super.safeMarket(marketId, market, delimiter, marketType); |
| 1503 | } |
| 1504 | |
| 1505 | /** |
| 1506 | * @method |
no test coverage detected