![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Ну хорошо. Поговорим об этом когда с этими ногами пойдете за лимитными ордерами.))
апну тему.
Вопрос возникший при определении ликвидности по арбитражной позиции.
Как правильно пересчитать ликвидность на бест-банде кроссовой пары в USD единицах (и почему)?
1) напрямую через мажор по базовой валюте
2) через мажор по валюте котирования
Пример: Объем на бест банде EURCHF 2 миллиона единиц. Надо заценить этот объем в USD. Что делать? Сразу смотрим на стакан EURUSD и прикидываем сколько это 2 миллиона евро. Либо сначала оцениваем сколько это франков по текущему курсу, а потом через стакана для USDCHF определяем объем в USD?
апну тему.
Вопрос возникший при определении ликвидности по арбитражной позиции.
Как правильно пересчитать ликвидность на бест-банде кроссовой пары в USD единицах (и почему)?
1) напрямую через мажор по базовой валюте
2) через мажор по валюте котирования
Пример: Объем на бест банде EURCHF 2 миллиона единиц. Надо заценить этот объем в USD. Что делать? Сразу смотрим на стакан EURUSD и прикидываем сколько это 2 миллиона евро. Либо сначала оцениваем сколько это франков по текущему курсу, а потом через стакана для USDCHF определяем объем в USD?
Решение через TickValue видел. Но случай общий (не MT) и кроме того, скажу честно, от манипуляций с TickValue у меня голова ломается. Хотелось бы простого объяснения, которое бы легко легло в память.
Пока оно такое:
На ask бандах у нас находятся предложение для продажи, следовательно товар (базовая валюта) есть в наличии у продавцов. Просто пересчитаем её стоимость в другой валюте котирования (USD). На bid бандах наоборот предложения для покупки, товара нет, но есть средства (в валюте котирования). Через соответствующий мажор, пересчитываем эти средства.
Итого:
Для пар у которых совпадает базовая валюта, сравнение по лотам приемлемо, так как единицы измерения одни и те же. Например объемы для EURCHF и EURUSD.
Одни продавцы EURUSD ASK-банд = 2,0 млн, т.е. продавцы хотят продать 2 000 000 / 100000 = 20 лотов евры и купить 2 000 000 / 136345 = 14,67 лотов USD.
Другие продавцы GBPUSD ASK-банд = 3,5 млн, т.е. хотят продать 3 500 000/ 100000 = 35 лотов фунта и купить 3 500 000/ 164349 = 21,3 лотов USD.
В итоге имеем, что в данный момент хотят купить 14,67 + 21,3 = 35,97 лотов USD за евро и фунт. Так можно посчитать любую валюту.
В этом примере у вас пары мажоры, у которых совпадает валюта котирования. Просто сравнение по лотам неприемлемо: 20 лотов евры и с 35 лотов фунта. Поэтому конвертируем и получаем объемы в USD лотах: 14,67 и 21,3, которые уже можно сравнивать.
Вопрос был немного в другом? Как вы рассчитаете объем для кросовой пары? Покажите хоть с лотами, хоть без. Например как сравнить объемы на EURCHF и AUDNZD?
Вот ещё нашел вариант как для арбитражной позиции, произвести расчет лотов для каждого символа, чтобы проторговать максимально допустимую ликвидность, и при этом не переводить в общие единицы.
Пусть у нас треугольный арбитраж вида A/B, B/C, C/A
1) Начинаем с первого символа и до последнего. Берем объем A на первой паре (запоминаем как размер ордера по A/B) и высчитываем объем B (конвертируем A в B). Если полученный объем больше чем по B/C переход к пункту 2. Если меньше, запоминаем этот объем (как размер ордера по B/C), высчитываем С, сравнием и т.п. ... Успешно дошли до конца цепочки -> объемы для ордеров у нас уже есть, выход.
2) Делаем циклический сдвиг (было A/B, B/C, C/A стало B/C, C/A, A/B ), и возвращаемся к пункту 1)
Давайте самостоятельно посчитаем какую с нас снимут (должны снять) маржу в валюте депозита USD, если:
- Мы хотим купить 1 лот EURCHF.Покупка ЕURСHF - это покупка EUR за CHF. CHF у нас нет. Мы их занимаем, либо приобретаем самостоятельно (при плече 1:1). Тоесть у нас есть USD (депозит) а нам надо купить CHF (либо не покупать если нам предоставляют кредит в CHF), чтобы потом на них купить EUR. Значит для того, чтобы купить EURCHF, мы должны реально (плечо 1:1) или виртуально продать USDCHF (продажа долларов USD с депозита, покупка CHF), причем по рыночной (наихудшей) цене.
- Мы хотим продать 1 лот EURCHF.
Продажа ЕURСHF - это продажа EUR за CHF. EUR у нас нет (нам нечего продавать). Мы их занимаем, либо приобретаем самостоятельно (при плече 1:1). Тоесть у нас есть USD (депозит) а нам надо купить EUR (либо не покупать если нам предоставляют кредит в EUR), чтобы потом на них купить CHF. Значит для того, чтобы продать EURCHF, мы должны реально (плечо 1:1) или виртуально купить EURUSD (продажа долларов USD с депозита, покупка EUR), причем по рыночной (наихудшей) цене.
Итого:
Теперь давайте пройдемся по вашему коду. По-моему функции не хватает аргумента который бы отвечал за направление сделки. У вас есть перемененная marginCurrency которая определяется всегда как базовая валюта. И соответственно залог и для продажи и для покупки EURCHF вы вычисляете всегда через EURUSD.
string marginCurrency = StringSubstr( StringTrimLeft( smb ), 0, 3 );
...
if( calcCurrency == "" ){
calcCurrency = GetSymbolByCurrencies( marginCurrency, accCurrency );
mode = true;
if( calcCurrency == "NULL" ){
calcCurrency = GetSymbolByCurrencies( accCurrency, marginCurrency );
mode = false;
}
}
P.S. Мне интересно насколько ваши расчеты маржи сейчас совпадают с расчетами MT, там более, что к ним раньше уже были схожее претензии.
Судя по молчанию не все понятно.
Ответ с цифрами на вопрос: "Как вы рассчитаете объем для кросовой пары? Покажите хоть с лотами, хоть без. Например как сравнить объемы на EURCHF и AUDNZD?"
Чтобы узнать разницу в лотах, я делю курсы валют-мажоров стоящих в числителе. Валюта залога - валюта, стоящая в числителе.
EURUSD / AUDUSD -> 1.36368 / 0.90639 = 1.50451, т.е. объем открываемой позиции по AUDNZD должен быть в 1.50 раз больше, чем EURCHF.
Почему делю мажоры? ...
Вот этот пост точно не понял. Тоесть считая таким образом вы делаете вывод, что объем по AUDNZD (в usd) больше объема по EURCHF (в usd) примерно в 1.5 раза. Так?
papaklass спокойно, а то скатимся к срачу. Я просмотрел ваш код, перед тем, как давал комментарии, а вы мой коммент смотрели? Внимательно?
Моя претензия к вашему методу расчета (на примере расчета EURCHF) .
после коментария "//получим текущую цену для указанного направления" вы всегда и при продаже и при покупке вычисляете цены на одном и том же символе, а я считаю что надо вычислять на разных (обоснование выше).
В примере с EURCHF, сalcCurrency у вас всегда EURUSD.
P.S. это было лишним, пардон
GaryKa: ... По-моему функции не хватает аргумента который бы отвечал за направление сделки ...