Блин, всегда думал что номер заявки и сделки один и тот же
Да и внимание не обращал. Сейчас действительно подглядел, они действительно отличаются и уникальны. Спасибо, принял к сведению на будущее. Тем не менее проблему это не решает
. Я действительно упустил более подробное описание проблемы. Задача:
1. Необходимо копировать таблицу сделок в лог для последующих подсчетов дохода/убытка. Это можно реализовать различными способами, причем способов десятки. Лично я выбрал OnTrade(). На мой субъективный взгляд для меня это самое оптимальное решение. На данный момент я все таки выбрал *.csv файл. Запись и чтение реализовать не проблема, да и написано уже и даже работает. Так что записи/чтения не касаемся...
2. Избавиться от лишних вызовов OnTrade(). В моем случае при совершении любой сделки OnTrade() вызывается 4 раза именно по этой сделке. Очевидное решение для избавление от лишних вызовов это номер СДЕЛКИ. Да, это будет работать отлично, но ровно до тех пор, пока не совершится частичная покупка при определенных условиях. Реальный пример с демо счета.
ИНАРКТИКА 0 Покупка 1.0 0 603.5 603.5
ИНАРКТИКА 0 Покупка 1.0 0 603.5 603.5
ИНАРКТИКА 0 Покупка 8.0 0 603.5 4828.0
ИНАРКТИКА 0 Покупка 1.0 0 603.5 603.5
ИНАРКТИКА 0 Покупка 1.0 0 603.5 603.5
ИНАРКТИКА 0 Покупка 1.0 0 603.5 603.5
ИНАРКТИКА 0 Покупка 1.0 0 603.5 603.5
ИНАРКТИКА 0 Покупка 8.0 0 603.5 4828.0
ИНАРКТИКА 0 Покупка 8.0 0 603.5 4828.0
ИНАРКТИКА 0 Покупка 1.0 0 603.5 603.5
ИНАРКТИКА 0 Покупка 1.0 0 603.5 603.5
ИНАРКТИКА 0 Покупка 8.0 0 603.5 4828.0
Последовательность совершения сделок в точности соблюдена, жаль только не догадался вывести номер сделки, но принципиально суть проблемы должна быть понятна. По данному инструменту я беру 10 лотов. А вот по факту по одной заявке было 3 сделки 1, 1 и 8 лотов. Причем обращаю отдельное внимание на то, что все три сделки свершились очень и очень быстро, ибо колбэки пришли вперемешку. Учитывая что OnTrade() в моем случае отрабатывает 4 раза на каждую сделку, а номер сделки уникален, видим 12 записей логе. И это верно.
Теперь если я фильтрую коллбэки по номеру сделки. Первую запоминаю. Приходит следующий коллбэк, он может быть как тот же самый, так и другой для следующей сделки. Таким образом, если все коллбэки от первой сделки успевают приходить первыми, то все прекрасно будет работать. Но как только вклинивается коллбэк от следующей по порядку сделки система рушится. Конечно, проблема решаемая, но придется запоминать все сделки по данной заявке, а это и память, и время на обработку. А для меня крайне важно именно время, время упустил, не открыл или не закрыл сделку.
Вот именно над такой ситуацией я и кубатурю уже с полгода. Да, на демо счете частичная покупка совершается достаточно часто, но чтобы вот так очень быстро чтобы коллбэки перемешались уже редкость. На реальном счете ситуация обратная, частичная покупка редкость сама по себе, зато если совершается то очень часто именно так, что коллбэки перемешиваются между собой.