Исполнение ордеров
Логика повторных попыток — это набор правил, определяющих, отправляется ли неудачный запрос к бирже или брокеру повторно, сколько раз, через какое время, и, что важнее всего, какие запросы никогда нельзя повторять, потому что их повтор может привести к размещению второго ордера.
Сети и площадки дают сбои, которые снаружи выглядят одинаково: тайм-аут может означать, что ордер вообще не дошёл, либо что он был принят, а подтверждение потерялось. Повтор чтения (баланс, позиции, статус ордера) безопасен; повтор размещения ордера после неоднозначного сбоя может удвоить позицию, что хуже, чем пропустить одну сделку. Повторные попытки также взаимодействуют с лимитами запросов: всплеск повторов во время сбоя на площадке может привести к временному бану IP или ключа, обрушив все остальные счета на этом сервере вместе с ним.
AlgoVesta разделяет чтения и записи. Запросы на чтение, такие как получение позиций, повторяются один раз после короткой паузы; размещения ордеров вслепую после тайм-аута не повторяются, потому что потерянное подтверждение не доказывает, что ордер потерян. Вместо этого платформа сверяется с площадкой: проверяются позиции и история сделок биржи, и ордер, который на деле оказался размещён, записывается, а не дублируется. Защита от дублей отклоняет второй идентичный сигнал для того же счёта, символа и направления в течение короткого окна, поэтому повторная публикация сообщения провайдером не открывает две позиции. Когда площадка возвращает ответ о лимите запросов или бане, затронутый ключ или сервер снижает нагрузку, а не продолжает бомбардировать площадку, и это состояние отображается в панели. Защитные ордера, которые не удалось создать, повторяются и проверяются, а на форекс-счетах позиция, чей стоп не удалось подтвердить, по умолчанию закрывается. См. статьи идемпотентность и лимит запросов (rate limit) биржи.
Ордер на покупку 0,05 BTC истекает по тайм-ауту через 10 секунд без ответа. AlgoVesta не отправляет его повторно. Она запрашивает открытые позиции и последние исполнения счёта, находит новую длинную позицию на 0,05 BTC, соответствующую ордеру, записывает её с ценой исполнения биржи и ставит для неё стоп и цель. Если бы запрос ничего не нашёл, сигнал был бы помечен как неудачный с указанием причины «тайм-аут», и трейдер мог бы отправить его повторно осознанно.