Здравствуйте. Есть вопрос: Как средствами mql4 определить торгует советник на центовом счете или на долларовом?
Все зависит от брокера и метода работы с центовыми счетами.
Есть как минимум три варианта работы с центовыми счетами:
1) Центовый счет в терминале не чем не отличается от обычного, просто где-то на сервере брокера указывается что это центовый счет (скорей всего это отдельная группа счетов);
2) У брокера есть отдельный сервер для центовых счетов;
3) У брокера есть специальный символ который отвечает за "котировки центов" к Доллару/Евро.
Конечно могут быть комбинации этих вариантов, либо другие решения.
Отсюда вытекают следующие варианты решений:
1) Если у брокера центовые счета в отдельной группе то как я понимаю программно в терминале это не распознать. Тут проще будет в коде советника/скрипта предусмотреть параметр отвечающий за тип счета;
2) Если существует отдельный сервер следует произвести анализ по имени брокера и сервера. При желании можно свериться с БД (реализуется в виде файла и т.п);
3) Если у брокера есть отдельный символ (как например у Альпари) отвечающий за центы, то решение наиболее просто - нужно всего лишь определить тип счета по символу.
Производится анализ точно так как в любом мультивалютном счете (USD, EUR, CHF, JPY, RUR и т.д).
PS
Если брать за пример Альпари, то у них есть вот такие валюты для счетов (USC - USD-центы и EUC - Евро-центы). Соответственно там есть символы "USDUSC" и "EUREUC".
Таким образом для Альпари можно анализировать имя сервера и/или просто сравнить валюту счету (USC или нет).
смотрите стоимость контракта, она должна быть в 100 раз меньше, по крайней мере это правильно, и я у себя сделал именно так.
Спасибо. Я нашел уже наиболее простой выход из ситуации, это функция StringSubstr(), которая извлекает подстроку из строковой переменной, т.е. я могу с помощью нее определить где у меня находится USD в начале названия валютной пары или в конце или вообще нет такой
FAQ предложил способ определения центового счета, а не ответил на вопрос о нахождении базовой валюты )))
Кстати, отличный способ - без кучи "если".
А поиск базовой валюты производится именно так, как Вы и указали. Хотя есть еще один способ для случаев, когда валюта депозита USD. Нужно проверить стоимость одного тика (SymbolInfoDouble(Symbol(), SYMBOL_TRADE_TICK_VALUE)). Для прямой котировки всегда будет возвращать одно и то же значение при разных рыночных ценах - степень 10 (1, 10, 100 и т. д.).
FAQ предложил способ определения центового счета, а не ответил на вопрос о нахождении базовой валюты )))
Кстати, отличный способ - без кучи "если".
Нифига он не отличный.
Если валюта депозита на стандартном и центовом счете USD, размер контракта везде 100,000 базовой валюты то какая может быть разница в стоимости контракта?
Даже если есть разница в стоимости контракта то, на мой взгляд она еще не о чем не говорит, размеры контрактов то могут быть разные.
PS
Т.е. в принципе анализировать размер контракта идея тоже здравая, но не всегда однозначно выявляющая центовые счета.
Скорей всего она выявит "микро счет" (к которым можно отнести и центовые по сути).
Если вывести за скобки все остальные валюты, оставив только доллар и центы, то счета можно разбить на четыре основные группы:
1) Стандартные счета - счет где валюта USD и размер контракта является стандартным (100,000 единиц);
2) Микро счета в долларах - счет где валюта USD и размер контракта меньше стандартного (10,000 или 1000 единиц);
3) Счет в центах - счет где валюта ЦЕНТ (например как у Альпари - USC) и размер контракта стандартный;
4) Микро счет в центах - счет где валюта ЦЕНТ и размер контракта меньше стандартного.
сорри соврал, я имел в виду размер контракта конечно, только его и можно поменять, а если валюта счета ЦЕНТ, то в списке должны присутствовать индикативные валюты USDUSC\EUREUC\USDEUC\ для пересчета курса, по другому никак.
Я извиняюсь, но Вам писать такую чушь не к лицу.
Типы счетов, Спецификации контрактов здесь почему-то вообще отсутствуют какие-либо признаки что это центовый счёт, за исключением имени сервера. Но имя сервера не в каждой компании говорит о том что это центовый счёт. И как не странно AccountCurrency(); выдаёт USD а MarketInfo(_Symbol, MODE_LOTSIZE) 100 000
Так-что универсального метода определения я не вижу. По крайней мере пока...
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования