Trade Volume Copy. Описание и настройки

22 августа 2022, 22:00
Yuriy Bykov
0
346

Описание

Trade Volume Copy (TVC) - это советник-утилита для копирования объемов открытых сделок с одного MT5-счёта или MT4-счёта на другой MT5-счёт или MT4-счёт. Данный советник является дальнейшим развитием Real Trade Copy, по сравнению с которым проведен глубокий рефакторинг кода:

  • Сделан графический интерфейс для установки параметров
  • Добавлено автообнаружение работающих отправителей
  • Улучшено быстродействие
  • Упрощены настройки и убраны параметры, задаваемые до запуска советника

Полноценная версия для MT4 и MT5 на Маркете будут бесплатны до версии 2.0.

На одном терминале советник запускается в режиме Sender (отправитель), на другом - в режиме Receiver (получатель).

Можно копировать позиции между Netting и Hedging счетами в любых комбинациях. Можно будет устанавливать фильтры по названию инструмента и магическим номерам позиций, которые будут копироваться. Отправитель посылает информацию только о рыночных позициях. Отложенные ордера обрабатываются в момент превращения их в открытые рыночные позиции.

Терминалы должны работать на одном сервере, чтобы у них была одинаковая общая папка данных, через которую они обмениваются данными.

Порядок установки:

  1. В терминале счёта-отправителя запускаем советник, и в открывшемся диалоге выбираем Sender. Разрешение на торговлю и импорт DLL не требуются.
  2. В диалоге свойств отправителя можно изменить название (по-умолчанию будет подставлен номер счёта) и запустить кнопкой Start

  3. В терминале счёта-получателя запускаем советник, и в открывшемся диалоге выбираем ReceiverРазрешение на торговлю требуется, на импорт DLL - не требуются.
  4. В диалоге свойств получателя должно отобразиться название запущенного отправителя и настройки по-умолчанию, устанавливающие копирование всех совпадающих символов с соотношением объёмов 1:1. 
  5. Если такие настройки устраивают, запускаем получатель кнопкой Start, иначе меняем настройки и запускаем после изменения.
Для копирования MT5 -> MT4 можно использовать Trade Volume Copy MT5 как отправитель и Trade Volume Copy MT4 как получатель.

Для копирования MT4 -> MT5 можно использовать Trade Volume Copy MT5 как получатель и Trade Volume Copy MT4 как отправитель.

Запускать советник в режиме Sender можно на реальном и демо-счёте без какого-то риска, так как он не совершает никаких торговых операций.

Версии для запуска на MT4 и MT5 одинаковы по функциональности, но могут быть скомпилированы только в разные исполняемые файлы. Поэтому на Маркете выложено два отдельных продукта - один устанавливается на MT4, а другой на MT5.

Перед использованием советника в режиме Receiver на реальном счете настоятельно рекомендуется подобрать необходимые значения параметров на демо-счёте с параметрами, аналогичными реальному счёту.

Обратите дополнительное внимание на правильную установку параметра Ratio, если на торговых счетах Sender и Receiver используются разные валюты.

Важные принципы

При создании и дальнейшей разработке использовались следующие основные принципы:

  • Sender работает один.
    Терминал, на котором должен работать Sender, допускает одновременную работу только одного экземпляра Sender. При попытке добавить второй экземпляр, он автоматически удалится, а терминал постарается переключиться на окно с уже запущенным экземпляром Sender. Это сделано для предотвращения конфликтов одновременной записи в файлы данных. К тому же, результаты работы двух разных экземпляров Sender на одном торговом счёте всё равно будут одинаковы.

  • Receiver работает один.
    Торговый счёт, на котором работает Receiver, желательно использовать только для копирования сделок и только с одного Sender. 
    В дальнейшем планируется добавить возможность копировать сделки от нескольких Sender.
    Вести одновременную торговлю вручную или запуская другие советники не рекомендуется.

    Но такое не всегда удобно, поэтому, если все-таки этот принцип не удается соблюсти, то можно попробовать сделать следующее.
    Если использовать Hedging-счёт, то в принципе, можно на нем торговать вручную и с помощью экспертов одновременно с работой Receiver. Главное, чтобы другие эксперты не использовали тот же Magic, что и Receiver.
    Это касается и других экземпляров Receiver - с разными значениями Magic они должны спокойно работать на одном Hedging-счёте (но пока что в разных терминалах).
    Если случайно закрыть позицию, открытую Receiver, то он ее переоткроет (но еще один спред будет потерян).

    Для Netting-счетов решения пока нет, поэтому использование Receiver с одновременной ручной или автоматической торговлей может привести к непредсказуемым результатам.

  • Копируются объемы. Постоянно.
    Sender сохраняет информацию об открытых объемах, а не событиях открытия и закрытия позиций.
    Поэтому Receiver постоянно поддерживает нужный объем открытых позиций по каждому инструменту. При этом количество открытых позиций на Sender и Receiver может отличаться.
    Например, если на Sender было открыто 4 позиции GBPUSD BUY 0.01 до запуска Receiver, то когда Receiver будет запущен, он может открыть одну позицию GBPUSD BUY 0.04, вместо четырёх отдельных. Главное, что суммарный объём по каждому инструменту на Receiver будет соответствовать суммарному объему на Sender. 

  • Отложенные ордера не копируются.
    В текущей реализации такой возможности не предусмотрено из-за сложностей с обеспечением точности копирования при возможных различиях котировок на счетах Sender и Receiver.
    Например, потенциально проблемными представляются ситуации, когда на Sender отложенный ордер уже превратился в открытую позицию, а на Receiver - еще нет. Или наоборот.
    Возможно, это будет решено при добавлении нового режима копирования, реализованного в советнике Trade Position Copy.
    Но при превращении любого отложенного ордера в открытую позицию она сразу же будет скопирована.

  • SL и TP не копируются.
    Используются только виртуальные SL и TP - как только SL или TP срабатывает на Sender и закрывает какой-то объем, то на Receiver сразу же будет тоже закрыт соответствующий объём.
    Это сделано для защиты от повторных открытий позиций при срабатывании SL или TP на Receiver без срабатывания на Sender.

Если что-то из этого кажется неправильным, пишите в комментариях.

1. Параметры Sender (отправителя)

Run Mode: Режим работы Sender.
При нажатии на кнопку можно поменять режим на Receiver

    Sender name: название отправителя. Под этим именем отправитель сохраняет информацию о позициях, а получатель ищет эту информацию
    На отправителе этот параметр можно сделать пустым - в этом случае в качестве имени будет использован номер торгового счёта отправителя.
    На получателе этот параметр выбирается из списка имён уже запущенных отправителей.

    2. Параметры Receiver (получателя)

    Run Mode: Режим работы Receiver
    При нажатии на кнопку можно поменять режим на Sender


    Symbols: названия торговых инструментов, позиции которых будут копироваться. Разделяются символом ";"
    Например: 

    EURGBP;EURUSD;GBPUSD

    Если на отправителе и получателе инструменты называются по-разному, то можно указать сначала имя инструмента на отправителе, а затем имя инструмента на получателе, разделив их символом "="
    Например: 

    EURUSD_x=EURUSD;GOLD=XAUUSD


    Можно смешивать эти два варианта.
    Например: 

    GOLD=XAUUSD;EURGBP;EURUSD;GBPUSD

    Если названия инструментов на Sender и Receiver отличаются только префиксами и/или суффиксами, то вместо перечисления всех пар имен торговых инструментов можно указать маску, задающую правило преобразования. В маске символ звёздочки * обозначает совпадающую часть названий торговых инструментов.
    Например, если на Sender используются имена торговых инструментов без префиксов и суффиксов, а на Receiver у имен торговых инструментов есть суффикс "_x", то маска должна быть задана таким образом:

    *=*_x

    Если на Sender используются имена торговых инструментов c префиксом "r" и без суффиксов, а на Receiver у имен торговых инструментов есть префикс "_" и суффикс ".r", то маска должна быть задана таким образом:

    r*=_*.r


    Если значение не указано, то получатель будет принимать те символы, которые были в списке Market Watch на момент запуска.


    How calculate volumes: Способ расчёта объемов позиций на получателе. Возможен один из трех способов.

    • Use fixed ratio: объемы позиций на отправителе умножается на коэффициент Ratio.

      R_vol = S_vol * Ratio

    • Use balances and ratio: рассчитывается соотношение балансов на получателе и отправителе и умножается на коэффициент Ratio.


      R_vol = S_vol * Ratio * (R_bal / S_bal)

    • Use balances, leverage and ratio: рассчитывается соотношение балансов и плеч на получателе и отправителе и умножается на коэффициент Ratio. Если плечо на получателе больше, то их соотношение считается равным 1.


      R_vol = S_vol * Ratio * (R_bal / S_bal) * (R_lev / S_lev),

      В данных формулах используются следующие обозначения:
      R_vol - объем позиции на Receiver
      S_vol - объем позиции на Sender
      Ratio - коэффициент из параметра Ratio
      R_bal - баланс торгового счёта на Receiver
      S_bal - баланс торгового счёта на Sender
      R_lev - плечо торгового счёта на Receiver
      S_lev - плечо торгового счёта на Sender

    Ratio: коэффициент для формул выше.
    Использование этого коэффициента со значением, отличным от 1.0, может быть необходимым в двух случаях:

    • Если на Sender и Receiver используются разные валюты торговых счетов и при расчёте учитывается соотношение балансов счетов Sender и Receiver.

      Например, предположим, что используется RUB на Sender и USD на Receiver. На оба счёта было внесено по 1000 USD (что превратилось условно в 100 000 RUB на Sender). Тогда величина соотношения балансов
      (R_bal / S_bal) = 1000 / 100000 = 0.01.
      В этом случае необходимо установить Ratio = 100, чтобы получить на Receiver открытие позиций такого же объема, как и на Sender. Если этого не сделать, то для небольших объемов на Sender позиции на Receiver открываться не будут, так как их размер, уменьшенный в 100 раз, скорее всего, будет меньше минимально возможного размера позиции на Receiver.

      В обратной ситуации, предположим, что используется USD на Sender и RUB на Receiver. На оба счёта снова было внесено по 1000 USD (что превратилось условно в 100 000 RUB но теперь уже на Receiver). Тогда величина соотношения балансов
      (R_bal / S_bal) = 100000 / 1000 = 100.
      В этом случае необходимо установить Ratio = 0.01, чтобы получить на Receiver открытие позиций такого же объема, как и на Sender. Если этого не сделать, то для небольших объемов на Sender позиции на Receiver открываться размером в 100 раз больше, что  очень опасно.

    • Если надо пропорционально изменить размер позиций на Sender по сравнению с Receiver.


    Следующие два параметра пока недоступны в интерфейсе и имеют указанные настройки по-умолчанию. 

    Reopen manualy closed positions: Автоматическое открытие закрытых вручную позиций. В данном советнике реализован только режим со значением True, то есть если вручную закрыть позицию на работающем Receiver (при этом на Sender соответствующий объём остаётся открытым), то она снова откроется. 

    Allow manual or other EA trading: Корректная работа возможна при параллельной ручной торговле только на Hedging-счетах.
    Для Netting-счетов этот параметр должен быть равен False. По-умолчанию равен False.

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


    Следующие параметры будут перенесены в графический интерфейс позже.

    Open Pending Orders (PO) instead Positions: Включает режим, при котором вместо открытия позиций по текущей цене будут открываться отложенные ордера по лучшей цене.
    В этом случае для каждой открываемой позиции из отложенного ордера прибыль будет больше, но чем дальше будет устанавливаться ордер от текущей цены, тем меньше вероятность, что он сможет превратиться в позицию.
    Для этого режима можно поставить свои уровни Stop Loss и Take Profit. При достижении этих уровней позиция будет закрыта на Receiver и сразу же будет выставлен новый отложенный ордер.
    При закрытии позиций на Sender на Receiver сначала будут удаляться отложенные ордера и только потом, если нужный объем еще не закрыт, будут закрываться открытые позиции.

    Price delta for PO: Расстояние, на котором будет выставляться отложенный ордер от текущей цены.
    В этом и следующих параметрах для отложенных ордеров можно указать либо одно числовое значение, которое будет использовано для всех инструментов, либо несколько числовых значений, разделённых символом ';'. В этом случае количество значений обязательно должно совпадать с количеством инструментов, указанных в параметре [1.3. Symbols] или с количеством инструментов в Market Watch, если этот параметр пустой. Порядок значений должен соответствовать порядку инструментов.

    Stop Loss for PO: Stop Loss для отложенных ордеров

    Take Profit for PO:  Take Profit для отложенных ордеров

    Time for reopen PO: Время истечения отложенных ордеров (в секундах), после которого они будут выставлены снова

    Magics: фильтр позиций по магическому номеру. Если значение не пустое, то разрешены только перечисленные номера

    Minimal Margin for open new Positions: Минимальный размер маржи при котором будут копироваться новые позиции.
    Если маржа будет меньше этого значения, то Receiver будет выполнять только операции закрытия уже существующих позиций. Когда маржа станет больше, позиции будут открываться снова.

    По мере развития это пост будет пополняться.


    Поделитесь с друзьями: