Как программно определить центовый счет?

 
Здравствуйте. Есть вопрос: Как средствами mql4 определить торгует советник на центовом счете или на долларовом? 
 
Alexandr527:
Здравствуйте. Есть вопрос: Как средствами mql4 определить торгует советник на центовом счете или на долларовом? 

Все зависит от брокера и метода работы с центовыми счетами.

Есть как минимум три варианта работы с центовыми счетами:

1) Центовый счет в терминале не чем не отличается от обычного, просто где-то на сервере брокера указывается что это центовый счет (скорей всего это отдельная группа счетов);

2) У брокера есть отдельный сервер для центовых счетов;

3) У брокера есть специальный символ который отвечает за "котировки центов" к Доллару/Евро.

Конечно могут быть комбинации этих вариантов, либо другие решения.


Отсюда вытекают следующие варианты решений:

1) Если у брокера центовые счета в отдельной группе то как я понимаю программно в терминале это не распознать. Тут проще будет в коде советника/скрипта предусмотреть параметр отвечающий за тип счета;

2) Если существует отдельный сервер следует произвести анализ по имени брокера и сервера. При желании можно свериться с БД (реализуется в виде файла и т.п);

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

Производится анализ точно так как в любом мультивалютном счете (USD, EUR, CHF, JPY, RUR и т.д).

PS

Если брать за пример Альпари, то у них есть вот такие валюты для счетов (USC - USD-центы и EUC - Евро-центы). Соответственно там есть символы "USDUSC" и "EUREUC".

Таким образом для Альпари можно анализировать имя сервера и/или просто сравнить валюту счету (USC или нет).

 
Спасибо за подробное разъяснение. Пожалуй я просто сделаю для этого отдельный настраиваемый параметр
 
Есть еще вопрос, но уже по другой теме. Нужно определить тип котировки, базовая валюта USD. Я знаю как запросить символ, а вот как объяснить советнику где прямая котировка, например USDCAD, а где обратная, например EURUSD, а где вообще кросс курс. Есть ли такая функция, которая скажет, что на этой валютной паре в числителе базовая валюта, а в знаменателе - нет. Я эту информацию буду использовать при расчете стоимости лота. 
 
смотрите стоимость контракта, она должна быть в 100 раз меньше, по крайней мере это правильно, и я у себя сделал именно так.
 
FAQ:
смотрите стоимость контракта, она должна быть в 100 раз меньше, по крайней мере это правильно, и я у себя сделал именно так.
Спасибо. Я нашел уже наиболее простой выход из ситуации, это функция StringSubstr(), которая извлекает подстроку из строковой переменной, т.е. я могу с помощью нее определить где у меня находится USD в начале названия валютной пары или в конце или вообще нет такой
 
Alexandr527:
Спасибо. Я нашел уже наиболее простой выход из ситуации, это функция StringSubstr(), которая извлекает подстроку из строковой переменной, т.е. я могу с помощью нее определить где у меня находится USD в начале названия валютной пары или в конце или вообще нет такой

FAQ предложил способ определения центового счета, а не ответил на вопрос о нахождении базовой валюты )))

Кстати, отличный способ - без кучи "если". 

 

А поиск базовой валюты производится именно так, как Вы и указали. Хотя есть еще один способ для случаев, когда валюта депозита USD. Нужно проверить стоимость одного тика (SymbolInfoDouble(Symbol(), SYMBOL_TRADE_TICK_VALUE)). Для прямой котировки всегда будет возвращать одно и то же значение при разных рыночных ценах - степень 10 (1, 10, 100 и т. д.).

 
Scriptong:

FAQ предложил способ определения центового счета, а не ответил на вопрос о нахождении базовой валюты )))

Кстати, отличный способ - без кучи "если". 


Нифига он не отличный.

Если валюта депозита на стандартном и центовом счете USD, размер контракта везде 100,000 базовой валюты то какая может быть разница в стоимости контракта?

Даже если есть разница в стоимости контракта то, на мой взгляд она еще не о чем не говорит, размеры контрактов то могут быть разные.

PS

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

Скорей всего она выявит "микро счет" (к которым можно отнести и центовые по сути).

 

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

1) Стандартные счета - счет где валюта USD и размер контракта является стандартным (100,000 единиц);

2) Микро счета в долларах - счет где валюта USD и размер контракта меньше стандартного (10,000 или 1000 единиц);

3) Счет в центах  - счет где валюта ЦЕНТ (например как у Альпари - USC) и размер контракта стандартный;

4) Микро счет в центах - счет где валюта ЦЕНТ и размер контракта меньше стандартного.

 
сорри соврал, я имел в виду размер контракта конечно, только его и можно поменять, а если валюта счета ЦЕНТ, то в списке должны присутствовать индикативные валюты USDUSC\EUREUC\USDEUC\ для пересчета курса, по другому никак.
 
FAQ:
сорри соврал, я имел в виду размер контракта конечно, только его и можно поменять, а если валюта счета ЦЕНТ, то в списке должны присутствовать индикативные валюты USDUSC\EUREUC\USDEUC\ для пересчета курса, по другому никак.

Я извиняюсь, но Вам писать такую чушь не к лицу.

Типы счетов, Спецификации контрактов здесь почему-то вообще отсутствуют какие-либо признаки что это центовый счёт, за исключением имени сервера. Но имя сервера не в каждой компании говорит о том что это центовый счёт. И как не странно AccountCurrency(); выдаёт USD а MarketInfo(_Symbol, MODE_LOTSIZE) 100 000

Так-что универсального метода определения я не вижу. По крайней мере пока...