On 2026-10-13 the 09:53 ET run placed six MOC orders and failed: the paper account reports MOC orders as PendingSubmit until the closing auction and sent no acknowledgement within 30 s, so confirm_orders treated them as rejected. IBKR listed all six with permanent ids and filled them at the close, as it did the 14 PendingSubmit orders of 2026-09-29. Every retry then stopped at "6 open orders already exist", and after 15:45 ET at the order window, and the start limit's 6-hour window reset at 15:50 ET, so the job restarted every 10 minutes into the evening (42 restarts by 17:28 ET). - confirm_orders accepts a PendingSubmit order once IBKR lists it with a permanent id, re-reading this client's open orders every 5 s for up to 60 s. - rebalance --submit succeeds without sending anything when every open order comes from today's runs and IBKR still holds every order those runs sent; a missing one still fails. - The trade unit skips starts after 15:45 ET (ExecCondition), which systemd does not restart. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
25 lines
1.1 KiB
Desktop File
25 lines
1.1 KiB
Desktop File
[Unit]
|
|
Description=ibkr-quant daily run: today's bars, then MOC orders on rebalance sessions
|
|
After=ibgateway.service
|
|
# make gateway restarts a Gateway that has lost IBKR or its historical data
|
|
# farm. Retries cover today's bar arriving late (delayed data) and Gateway
|
|
# restarts; make submit refuses to double-submit while orders are open and
|
|
# succeeds once IBKR holds every order an earlier run sent.
|
|
# Every 10 minutes from 09:50 ET until the 15:45 end of the order window: on
|
|
# 2026-10-12 six retries 5 minutes apart gave up after 35 minutes while the
|
|
# data farm was down. The start limit is a backstop; ExecCondition ends the day.
|
|
StartLimitIntervalSec=21600
|
|
StartLimitBurst=34
|
|
|
|
[Service]
|
|
Type=oneshot
|
|
WorkingDirectory=%h/projects/ibkr-quant
|
|
Environment=PATH=%h/.local/bin:/usr/local/bin:/usr/bin:/bin
|
|
# Past 15:45 ET make submit cannot send orders; a failed condition skips the
|
|
# start without counting as a failure, so it is not restarted.
|
|
ExecCondition=/bin/sh -c 'test "$(TZ=America/New_York date +%%H%%M)" -lt 1545'
|
|
ExecStartPre=/usr/bin/make gateway GATEWAY_ARGS=--history
|
|
ExecStart=/usr/bin/make bars submit
|
|
Restart=on-failure
|
|
RestartSec=600
|