Использование советника "TriArb Trader" (версия 7.2)

Использование советника "TriArb Trader" (версия 7.2)

6 ноября 2016, 16:44
oschenker
[Удален]
3
1 387

Введение - межрыночный и статистический арбитраж

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

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

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

Треугольный арбитраж на межбанковском рынке, по сути, является межрыночной формой арбитража. Например, арбитражер может купить EUR в обмен на USD в банке A, одновременно купить GBP  в обмен на купленный EUR в банке B, и наконец снова купить USD в обмен на имеющиеся GBP в банке C. Может так получиться, что в результате разницы курсов в трех разных банках, сумма американских долларов, оставшихся в руках арбитражера после проведения описанной транзакции, окажется больше первоначальной суммы. Если при этом арбитражер заключит все три сделки с банками одновременно (ну или почти одновременно), он получит эту прибыль ничем не рискуя.

К сожалению, такая сделка невозможна на маржинальном счете, так как в этом случае арбитражер не может поставить проданную валюту банку взамен купленной, вся валюта должна остаться на счете дилера в качестве обеспечения по сделке. Торгуя на маржинальном счете, арбитражер может лишь, дождавшись возникновения арбитражной ситуации, и, открыв позиции в одну сторону (например buy EURUSD - sell EURGBP - sell GBPUSD), снова дожидаться переворота арбитражной ситуации в обратную сторону, чтобы закрыть все позиции.

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

Понимая это, рассмотрим, какая пара активов обладает достаточной статистической взаимозависимостью, для того, чтобы сделать возможным статистический арбитраж на маржинальном счете.

Кросс-курс и синтетическая кросс-пара

С 1943 года расчетной валютой в международной торговле служит доллар США. Поэтому обменные курсы всех остальных национальных валют принято выражать к американскому доллару, либо в прямой ("домашней") котировке, то есть сумма USD за одну национальную валюту, либо в обратной ("иностранной"), то есть сумма национальной валюты за один доллар США.

Курс национальной валюты (назовем ее базовой), выраженный в единицах другой (кроме доллара США) национальной валюты (назовем ее котируемой), называется кросс-курсом. Кросс-курс вычисляется, как частное курса базовой и котируемой валют выраженных в прямой котировке к доллару США. Если курс котируемой валюты представлен в обратной котировке, то кросс курс вычисляется как произведение курсов(валюты, представленные в обратной котировке редко бывают базовыми валютами). Например, кросс-курс EUR к GBP вычисляется как EURUSD / GBPUSD, а кросс курс EUR к JPY вычисляется как EURUSD х USDJPY. С ростом оборота международной торговли, растет объем торговых операций в национальных валютах, минуя доллар США.

В результате возрастаем объем обменных операций через кросс-курсы, кросс-пары становятся самостоятельным торговым инструментом и на рынке ФОРЕКС. В дальнейшем, кросс-парой я буду называть торговый символ, представленный в платформе МТ5 как самостоятельный торговый инструмент, выражающий кросс-курс двух национальных валют друг к другу. Синтетической кросс-парой (или просто синтетиком или кросс-курсом) я буду называть расчетный курс, вычисленный исходя из курсов этих национальных валют по отношению к доллару США. Название "синтетическая пара" выбрана потому, что я всегда могу воссоздать (синтезировать) такую кросс-пару открыв две позиции в соответствующих валютных парах к доллару США (например long EURUSD + short GBPUSD образует синтетическую кросс-пару long EURGBP).

Важно понимать, что вычисленный курс синтетической кросс-пары на свободном рынке не обязан совпадать с курсом торгуемой росс-пары, так как курс синтетика зависит от спроса и предложения на национальные валюты в отношении к доллару США, а курс торгуемой кросс-пары зависит от спроса и предложения национальных валют относительно друг-друга. Опыт показывает, что курс синтетической кросс-пары может (временно) отклоняться от курса торгуемой кросс-пары в ту или иную сторону на несколько пунктов.

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

Принцип работы советника TriArb Trader

Через равные промежутки времени, задаваемые в миллисекундах параметром "Arb. period (msec)", советник вычисляет курс синтетической кросс-пары и сравнивает его с курсом кросс-пары в терминале. Если в какой-то момент времени положительная разница между котировкой "bid" кросс-пары и котировкой "ask" синтетика окажется больше параметра "Min. deviation for  IN-trade (points)", советник откроет long в синтетике и short в кросс-паре. При этом в логе советника появится сообщение подобное следующему:

TriArbTrader_v7-2 (EURUSD,M1)   2016.10.03 17:00:00   TriArbBuy666 EURUSD 1.12142 GBPUSD 1.28359 EURGBP 0.87379
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.03 17:00:00   TriArbBuy666 Direction = 0 deviation = 13.10 profit = 0.00

Где название функции "TriArbBuy" указывает на направление открываемой сделки (buy синтетик), номер "666" - соответственно ID советника, в первой строке указаны котировки всех трех валют треугольника, а во второй девиация курса кросс-пары и синтетика (в пунктах). Direction = 0 означает, что на момент проверки отсутствуют открытые позиции в каком-либо направлении.

Соответственно, если положительная разница между котировкой "bid" синтетика и котировкой "ask" кросс-пары окажется больше параметра "Min. deviation for  IN-trade (points)", советник откроет short в синтетике и long в кросс-паре. Сообщение в логе будет выглядеть следующим образом:

TriArbTrader_v7-2 (EURUSD,M1)   2016.10.03 00:02:42   TriArbSell666 EURUSD 1.12403 GBPUSD 1.29272 EURGBP 0.86655
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.03 00:02:42   TriArbSell666 Direction = 0 deviation = 295.77 profit = 0.00 

Название функции "TriArbSell", опять же, указывает на направление открываемой позиции - sell синтетик.

После того, как советник получит сообщение от сервера о том, что все три ордера приняты дилером к исполнению, советник выдаст соответствующее сообщение в логе.

В случае открытия buy синтетик, сообщение будет выглядеть так:

TriArbTrader_v7-2 (EURUSD,M1)   2016.10.03 17:00:00   DealBuy666 EURUSD
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.03 17:00:02   DealBuy666 EURUSD Vol = 0.1 completed at 1.12154 after 1 tries
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.03 17:00:02   Slippage = 12
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.03 17:00:02   DealBuy666 GBPUSD
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.03 17:00:02   DealBuy666 GBPUSD Vol = 0.09 completed at 1.28354 after 1 tries
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.03 17:00:02   Slippage = 5
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.03 17:00:02   DealBuy666 EURGBP
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.03 17:00:09   DealBuy666 EURGBP Vol = 0.1 completed at 0.87351 after 1 tries
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.03 17:00:09   Slippage = 29  

а в случае открытия sell синтетик немного иначе:

TriArbTrader_v7-2 (EURUSD,M1)   2016.10.03 00:02:42   DealSell666 EURUSD
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.03 00:02:50   DealSell666 EURUSD Vol = 0.1 completed at 1.12403 after 1 tries
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.03 00:02:50   Slippage = 0
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.03 00:02:50   DealSell666 GBPUSD
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.03 00:02:52   DealSell666 GBPUSD Vol = 0.09 completed at 1.29265 after 1 tries
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.03 00:02:52   Slippage = 7
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.03 00:02:52   DealSell666 EURGBP
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.03 00:02:56   DealSell666 EURGBP Vol = 0.1 completed at 0.86655 after 1 tries
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.03 00:02:56   Slippage = 0

Количество попыток (tries = 1) указывает на то, что в данном случае ордер был принят торговым сервером с первой попытки (максимальное число попыток задается параметром "Max. number of trade retries"), а показатель "Slipage = X" показывает разницу в пунктах, между ценой, при которой советник обнаружил торговую ситуацию, и ценой по которой торговый сервер принял ордер к исполнению.

По-сути, показатель "Slipage" демонстрирует на сколько первоначальное расхождение успело скомпенсироваться за время с момента обнаружением арбитражной ситуации до момента открытия позиций, то есть упущенный профит (в пунктах). Высокое значение показателя говорит о наличии значительной задержки между отправлением и принятием торгового приказа.

Следующим шагом советник проверит целостность полученного треугольника. Однако прежде чем приступить к выполнению такой проверки, советник сделает паузу, длительность которой в миллисекундах задается параметром "Pause before integrity check (msc)". Эта пауза необходима для того, чтобы брокер успел исполнить все ордера и дать сообщение об открытии позиций.

Если проверка целостности треугольника показывает, что все в порядке, советник запоминает направление арбитража (Direction = 1 в случае buy синтетик, и Direction = -1 в случае sell синтетик) и приступает к отслеживанию позиций.

Если же проверка показала, что в треугольнике не хватает одной или нескольких сторон, советник попытается открыть недостающие позиции. Если открыть недостающие позиции по какой-то причине не получится, советник повторит попытку еще несколько раз (количество повторных попыток также определяется параметром "Max. number of trade retries"), и в случае неудачи, закроет все позиции.

При этом в логе советника будет выведено соответствующее сообщение.

В процессе отслеживания позиций, советник вычисляет текущий профит по суммарной позиции треугольника. Период вычисления профита соответствует периоду, заданному в миллисекундах параметром "Arb. period (msec)". Если суммарный профит треугольника превысит уровень, заданный параметром "Take Profit (USD)", советник даст приказ на закрытие всех позиций.

При этом сообщение, выводимое в логе советника в случае закрытия позиций buy-синтетик будет выглядеть следующим образом:

TriArbTrader_v7-2 (EURUSD,M1)   2016.10.12 19:58:06   ProfitBuy666 EURUSD 1.10297 GBPUSD 1.22234 EURGBP 0.9018
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.12 19:58:06   ProfitBuy666 Direction = 1 profit = 5.20

Где название функции "ProfitBuy666" и значение показателя "Direction = 1" указывают на направление существующей позиции buy-синтетик, 666 - ID советника, а "profit = 5.20" - значение профита на момент отправки приказа на закрытие сделок (реальный профит может оказаться выше или ниже, в зависимости от наличия задержек исполнения и направления движения цен за это время).

В случае закрытия позиции sell-синтетик, запись в логе будет выглядеть соответственно:

TriArbTrader_v7-2 (EURUSD,M1)   2016.10.18 11:30:00   ProfitSell666 EURUSD 1.10153 GBPUSD 1.22658 EURGBP 0.89831
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.18 11:30:00   ProfitSell666 Direction = -1 profit = 5.90  

ВНИМАНИЕ! Значение параметра "Take Profit (USD)" задается в единицах валюты депозита, то есть если депозит (и профит) вычисляется на счете в EUR, то советник воспринимает параметр, как заданный в EUR.

После принятия ордеров торговым сервером в логе появятся соответствующие записи (в случае закрытия позиции buy-синтетик):

TriArbTrader_v7-2 (EURUSD,M1)   2016.10.12 19:58:06   DealSell666 EURUSD
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.12 19:58:17   DealSell666 EURUSD Vol = 0.1 completed at 1.10297 after 1 tries
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.12 19:58:17   Slippage = 0
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.12 19:58:17   DealSell666 GBPUSD
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.12 19:58:21   DealSell666 GBPUSD Vol = 0.09 completed at 1.22214 after 1 tries
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.12 19:58:21   Slippage = 20
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.12 19:58:21   DealSell666 EURGBP
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.12 19:58:24   DealSell666 EURGBP Vol = 0.1 completed at 0.90265 after 1 tries
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.12 19:58:24   Slippage = 85

а в случае закрытия позиции sell-синтетик:

TriArbTrader_v7-2 (EURUSD,M1)   2016.10.18 11:30:00   DealBuy666 EURUSD
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.18 11:30:04   DealBuy666 EURUSD Vol = 0.1 completed at 1.10158 after 1 tries
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.18 11:30:04   Slippage = 5
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.18 11:30:04   DealBuy666 GBPUSD
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.18 11:30:09   DealBuy666 GBPUSD Vol = 0.09 completed at 1.22579 after 1 tries
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.18 11:30:09   Slippage = 79
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.18 11:30:09   DealBuy666 EURGBP
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.18 11:30:10   DealBuy666 EURGBP Vol = 0.1 completed at 0.89828 after 1 tries
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.18 11:30:10   Slippage = 3

Если учет позиций на счете производится в режиме хеджинг, в лог дополнительно будут выведены соответствующие записи:

TriArbTrader_v7-2 (EURUSD,M1)   2016.10.12 19:58:29   CloseBy666 EURUSD completed after 1 tries
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.12 19:58:36   CloseBy666 GBPUSD completed after 1 tries
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.12 19:58:52   CloseBy666 EURGBP completed after 1 tries

В случаях, когда позиция долго не выходит в плюс, а суммарный убыток по ней превысил (по модулю) значение параметра "Max. Loss (USD)" (заданного в единицах валюты депозита), советник попытается выйти в момент максимально благоприятного отклонения курсов синтетика и кросс пары.

Если открыта позиция buy-синтетик, советник дождется, пока разница между курсом "bid" синтетика и курсом "ask" кросс-пары окажется больше параметра "Min. deviation for OUT-trade (points)", после чего отдаст приказ на закрытие позиций.

При этом в логе советника будет выведено следующее сообщение:

TriArbTrader_v7-2 (EURUSD,M1)   2016.10.07 02:39:29   TriArbSell666 EURUSD 1.11343 GBPUSD 1.23824 EURGBP 0.89906
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.07 02:39:29   TriArbSell666 Direction = 1 deviation = 14.37 profit = -8.50

Название функции "TriArbSell" и параметр "Direction = 1" указывает на направление закрываемой позиции buy-синтетик. Значение "profit = -8.50" указывает на то, что сделка закрылась по девиации в после того, как убыток по позиции превысил максимально допустимое значение, установленное параметром "Max. Loss (USD)".

Если открыта позиция sell-синтетик, советник дождется, пока разница между курсом "bid" кросс-пары и курсом "ask" синтетика окажется больше параметра "Min. deviation for OUT-trade (points)", после чего отдаст приказ на закрытие позиций.

При этом в логе советника будет выведено следующее сообщение:

TriArbTrader_v7-2 (EURUSD,M1)   2016.10.07 02:32:21   TriArbBuy666 EURUSD 1.11348 GBPUSD 1.23338 EURGBP 0.90294
TriArbTrader_v7-2 (EURUSD,M1)   2016.10.07 02:32:21   TriArbBuy666 Direction = -1 deviation = 15.25 profit = -12.19

Название функции "TriArbBuy" и параметр "Direction = -1" указывает на направление закрываемой позиции sell-синтетик. Значение "profit = -12.19" указывает на то, что сделка закрылась по девиации в после того, как убыток по позиции превысил максимально допустимое значение, установленное параметром "Max. Loss (USD)".

Параметры и их рекомендуемые значения

Несколько слов о том, как выбирать треугольник.

Советник может торговать любые заданные ему три валюты. Главное, чтобы при этом они были введены в правильном порядке.

Для того, чтобы правильно выбрать торговый треугольник, проще всего начать с кросс-пары. Допустим мы выбрали для торговли кросс-пару EURJPY (евройена).

Шаг 1. Вставить "EURJPY" в качестве значения параметра "Cross pair (as First major vs Second major)".

Шаг 2. В качестве первой основной валюты (First major) необходимо выбрать первую валюту в кросс-паре. Первой валютой в нашей кросс-паре является EUR, который котируется к доллару США в прямой котировке - EURUSD. Соответственно, мы можем вставить "EURUSD" в качестве значения параметра "First major pair  (vs USD)".

ВНИМАНИЕ! В качестве первой основной валюты (значение параметра "First major pair  (vs USD)") ВСЕГДА должна стоять валюта в прямой котировке.

Шаг 3. В качестве второй основной валюты (Second major) необходимо поставить валюту, стоящую на втором месте в кросс паре. В нашем случае это JPY. Проблема в том, что йена котируется к доллару США в обратной котировке. Поскольку в терминале существует только инструмент "USDJPY", в качестве параметра "Second major pair (vs USD)" мы должны указать именно его. При этом необходимо указать советнику, что вторая основная валюта задана в обратной котировке. Для этого переведем значение параметра "Both majors are in direct quotation"  в положение false.

Все. Наш треугольник настроен.

В таблице ниже перечислены все параметры советника, а также рекомендации по их настройке.

VariableValueRecommendation
First major pair  (vs USD)EURUSDПервый символ валюты в котировке кросс пары (EURjpy).
Second major pair (vs USD)USDJPYВторой символ валюты в котировке кросс-пары (eurJPY).
Cross pair (as First major vs Second major)EURJPUВыбрать кросс-пару, которую советник будет торговать (советник лучше ставить на график этой кросс-пары).
Both majors are in direct quotationfalseУстановить false, если вторая основная валюта задана в обратной котировке.
Expert Advisor ID (Magic Number)666Уникальное число для каждого советника, работающего в терминале (лучше не ставить два советника на одну кросс-пару).
Max deviation (slipage)30Лучше выбирать параметр достаточно большим, так как для советника важнее открыть сделку, нежели открыть по лучшей цене.
Arb. period (msec)500Периодичность проверки арбитража и вычисления текущего профита. Параметр должен быть примерно равен частоте поступления тиков в самую "быструю" пару.
Pause before integrity check (msc)10Выставит примерно равной пингу до сервера брокера.
Max. number of trade retries10Десяти попыток вполне достаточно, если сделка не проходит с 10-й попытки, это повод сменить брокера.
Min. deviation for  IN-trade (points)5Советник указывает в логе значение девиации, при которой он выдал сигнал на открытие позиций. Имеет смысл выставлять значение параметра равным значению девиации в момент открытия, при которой сделка закрылась в плюсе, отсекая таким образом потенциально убыточные сделки.
Min. deviation for OUT-trade (points)10Лучше ставить немного больше или равным значению девиации для входного сигнала.
Take Profit (USD)10Подобрать опытным путем. Лучше ставить большим, так как нет смысла закрывать $10, если треугольник потенциально показывает $100. Однако, слишком большое значение параметра приведет к закрытию сделок с убытком по девиации или слишком долгому времени ожидания. В последнем случае лучше уменьшить, пока убыточные сделки не уменьшатся до 1-2%.
Max. Loss (USD)15Значение должно быть больше параметра Take profit.
Trading volume1Не более 1 (одного) лота на $10'000 депозита.


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