На счете netting два робота и ручные ордера могут менять одну общую позицию. Ее результат не становится автоматически результатом каждого робота. Восстановите исполнения и связи между ними, затем задайте аналитическое правило распределения. В примере результаты отдельных советников EA различаются при двух правилах, а общий итог счета остается прежним. Такой расчет служит анализу, не заменяет историю брокера и не устанавливает налоговый порядок учета.

Почему magic не разделяет общую позицию?

В MT5 netting на символ существует одна позиция, объем которой меняется последующими исполнениями. Один ордер тоже может дать несколько сделок — записей фактического исполнения. Это различие описано в основных принципах платформы. Разные названия программ не создают внутри общей позиции отдельные портфели.

DEAL_MAGIC — magic-номер исполнения, а DEAL_REASON — его источник или причина. Это разные свойства. Документация сделок также содержит номер ордера, идентификатор позиции и время. Один лишь нулевой magic не доказывает ручное решение. Сохраняйте связанные записи и явное соответствие программ их идентификаторам.

Ручной выход может уменьшить позицию, которую строили и A, и B. Метка закрывающей сделки не определяет, какой прежний объем считать закрытым для аналитики. Это отдельное правило. Материал о советниках (на английском) объясняет базовый выбор позиции; здесь мы восстанавливаем общую историю, а не создаем отдельный счет для каждой программы.

Как связать сделку, ордер и позицию без догадок?

Храните номера как идентификаторы, а не числа для арифметики. Соедините DEAL_ORDER с ордером, а DEAL_POSITION_ID — с циклом позиции. POSITION_IDENTIFIER связывает историю; текущий POSITION_TICKET может измениться при служебной операции сервера. Для каждого фактического исполнения сохраняйте символ, направление, объем, цену и время.

HistorySelectByPosition выбирает историю ордеров и сделок по идентификатору позиции. Проверьте успешность получения данных и полноту выгрузки. Видимый список в одном окне терминала может не содержать всех нужных записей. Не приписывайте отсутствующий вход советнику только по комментарию выхода. Сохраните исходную запись до добавления собственных трактовок.

Учитывайте комиссии, отдельные сборы, финансирование и результат в валюте счета. Отделяйте балансовые операции от покупок и продаж. Если ордер исполнялся частями, нужны их реальные количества и цены, а не запрошенный объем. Материал по MQL5 (на английском) подробнее рассматривает события исполнения и идентификаторы. Здесь исходными данными служит согласованная история, а не инструкция отправки ордера.

Как один счет дает два результата отдельных EA?

Учебная модель: две покупки и два ручных выхода

Условный линейный EUR/USD: 100 000 EUR на лот, счет в USD, исходной позиции нет. Все приведенные цены — цены полного исполнения: покупка по условному Ask, продажа по Bid. Четыре сделки выполняются в указанном порядке. Комиссия каждой 1 USD; иных сборов и свопа нет. Не вычитайте повторно спред, уже отраженный в ценах исполнения.

Прокрутите таблицу вправо, чтобы увидеть все столбцы →

Вымышленная история цикла POSITION_IDENTIFIER = 5001
Сделка / ордерИсточникИсполнениеПозиция после
7001 / 5001EA AКупить 0,10 по 1,1000Long 0,10
7002 / 5002EA BКупить 0,10 по 1,1020Long 0,20
7003 / 5003Ручной выходПродать 0,10 по 1,1010Long 0,10
7004 / 5004Ручной выходПродать 0,10 по 1,1030Позиции нет

Средняя цена общей покупки после второй сделки равна 1,1010. В модели первое сокращение реализует 0 USD ценового результата, второе —20 USD. Четыре комиссии оставляют 20 − 4 = 16 USD нетто. Это согласование полного закрытого цикла на заданных числах, а не наблюдение реального счета или рыночные данные.

В аналитическом FIFO сначала закрывается более ранний объем. Отнесем ручной выход 7003 к A: 10 000 × (1,1010 − 1,1000) = 10 USD. Выход 7004 отнесем к B: 10 000 × (1,1030 − 1,1020) = 10 USD. Каждому EA назначим комиссию его входа и комиссию выхода его объема. Получим A 8 USD и B 8 USD.

В аналитическом LIFO сначала закрывается поздний объем. Выход 7003 дает B ценовой результат −10 USD, а 7004 дает A 30 USD. После затрат у B −12 USD, у A 28 USD; сумма снова 16 USD. FIFO и LIFO здесь — выбранные правила аналитики, а не два режима учета сервера MT5 или универсальное налоговое правило. Не меняйте их молча ради привлекательного результата робота.

Общая сумма и разное распределение

Прокрутите схему вправо, чтобы увидеть ее целиком →

Общая сумма и разное распределениеЗакрытый цикл: 20 USD до затрат,4 USD комиссий,16 USD нетто. FIFO:A 8,B 8; LIFO:A 28,B −12. Аналитика не заменяет историю сервера.Общая сумма и разное распределениеВесь счет: 20 USD до затрат − 4 USD комиссий = 16 USD.FIFO: ранний объемA: +8 USDB: +8 USD8 + 8 = 16 USDLIFO: поздний объемA: +28 USDB: −12 USD28 − 12 = 16 USDУчебная модель: четыре сделки, позиция закрыта.

Открыть схему целиком

Оба правила согласуют 16 USD закрытого цикла, но распределяют результат EA по-разному. Это аналитические способы отнесения объема, а не два способа учета сервера.

Почему после первого выхода реализованный результат отличается?

После 7003 условный текущий Bid равен 1,1010. У общей позиции netting модельный реализованный результат 0 USD и плавающий результат 0 USD. FIFO показывает A реализованные 10 USD, но остаток B одновременно имеет плавающий убыток 10 USD. Вместе 10 − 10 = 0 USD. Пока позиция открыта, сравнение только реализованных частей с полем сервера некорректно.

После трех исполнений комиссии составляют 3 USD. При этой оценочной цене обе формы учета дают общий результат −3 USD. После 7004 весь цикл закрыт, плавающей части нет, а итог распределения равен 16 USD. Материал о плавающем и реализованном результате разделяет эти показатели. Совпадение суммы само по себе не выбирает подходящее правило аналитики.

Реальная история может включать частичные исполнения, развороты, исправления и отдельно проведенные расходы. При отсутствующей записи оставьте соответствующее распределение нерешенным и укажите причину. Не придумывайте цену входа или источник команды для красивой сверки. Для сравнения стратегий применяйте одно правило ко всем циклам, а изменение отмечайте как смену метода. Ограничения счета и роботов относятся к реальной общей экспозиции.

Что сделать до оценки двух роботов?

  1. Выберите завершенный цикл одного символа и сохраните исходную выгрузку. Свяжите сделки с ордерами и идентификатором позиции. Согласуйте исполненные объемы и все расходы. Не открывайте живую сделку только ради учебного примера.
  2. До расчета результатов задайте правило распределения количества и затрат. Источник команды храните отдельно от аналитического владельца объема. Неизвестные данные оставляйте неизвестными; magic закрывающей сделки не заменяет историю входов.
  3. Согласуйте общий итог закрытого цикла с историей счета. Для открытого цикла суммируйте реализованную и плавающую части по одной оценочной цене. Храните оба представления в торговом журнале. Разбор распределения объясняет поведение учета и не доказывает будущую прибыльность.

Частичные входы: сначала количества, затем распределение

Новый полностью условный цикл. Тот же линейный контракт 100 000 EUR на лот, USD, без начальной позиции, свопов и иных сборов. A покупает 0,06 по 1,1000 и 0,04 по 1,1010; B покупает 0,20 по 1,1020. Два ручных выхода полностью продают по 0,15: сначала 1,1015, затем 1,1005. Комиссия каждой стороны условно равна 10 USD за полный лот и распределяется пропорционально реально закрытому количеству. Это придуманная линейная тарификация, не тариф брокера.

Входы составляют 30 000 EUR, их взвешенная цена равна 1,1014666… Денежная сумма покупок 33044 USD, продаж 33030 USD: ценовой результат −14 USD. Полные комиссии входов 3 USD и выходов 3 USD дают −20 USD нетто. Расчет без округления средней цены исключает накопление ошибки; фактическая денежная точность и правила округления зависят от условий счета.

Прокрутите таблицу вправо, чтобы увидеть все столбцы →

Источник обоих выходов остается ручным при любом правиле
АналитикаA: ценовой итогB: ценовой итогA после затратB после затратВместе
FIFO11 USD−25 USD9 USD−29 USD−20 USD
LIFO1 USD−15 USD−1 USD−19 USD−20 USD

В FIFO первый выход закрывает весь A и 5000 EUR B, второй — оставшиеся 15000 EUR B. В LIFO первый выход закрывает 15000 EUR B, второй — остаток B и весь A, начиная с более позднего входа. На A приходится 2 USD полного цикла затрат, на B 4 USD. Аналитическая принадлежность не меняет источник команд и не создает двух серверных позиций.

После первого выхода при оценочном Bid 1,1015 FIFO показывает 8,50 USD реализованной части и −7,50 USD плавающей, а LIFO −7,50 и +8,50 USD. Взвешенная общая позиция показывает 0,50 и 0,50 USD. Везде сумма ценовых частей 1 USD; проведенные к этому моменту комиссии 4,50 USD оставляют −3,50 USD. Нельзя сравнивать только реализованную колонку разных способов. Если отсутствует хотя бы один частичный вход, оставьте распределение нерешенным вместо подстановки средней цены, которой нет в исходных данных.