double MarketInfo( |
string symbol, int type) |
Как так??? А MODE_TIME???
Вот например:
MODE_MARGINCALCMODE | 28 | Способ расчета залоговых средств. 0 - Forex; 1 - CFD; 2 - Futures; 3 - CFD на индексы |
Совершенно очевидно, что можно использовать int.
А вот:
MODE_SPREAD | 13 | Спрэд в пунктах |
Оказывается совершенно не очевидно, что можно использовать int, а похорошему обязательно должен быть double
Просто об этом вредно думать - об этом надо читать. А где не знаю.
Если не рыться в книжках, то вот так:
datetime это двойное целое без знака = 64 бита. int это 63 бита +знак.
double имеет мантиссу даже большую по разрядности чем datetime,
кажись 72 мантисса + 8 порядок против 64 datetime.
В общем не помню но double это 10 байт.
Т.е. double всегда превышает по точности младшего разряда и int и datetime.
Потери точности при операциях float/double на платформе x86 не бывает,
т.к. числа расширяются до 82 и даже до 86 разрядов.
Поэтому можно не думать о мелочах и заведомо double == datetime.
Однако, вычисление/хранение datetime в int может быть некорректно, т.к. не хватит одного разряда.
Если не рыться в книжках, то вот так:
datetime это двойное целое без знака.
double имеет мантиссу разряд в разряд равную datetime, да еще + порядок.
Потери точности при операциях float/double на платформе x86 не бывает,
т.к. числа расширяются на 6 разрядов. Поэтому можно не думать о мелочах и double == datetime.
Однако, вычисление/хранение datetime в int может быть некорректно, т.к. не хватит одного разряда.
Согласитесь, что не нормально, скажем, для:
MODE_MARGINCALCMODE | 28 | Способ расчета залоговых средств. 0 - Forex; 1 - CFD; 2 - Futures; 3 - CFD на индексы |
Вот и возник вопрос - нет ли на этот счет официального мнения. Рекомендаций что ли для каждого Идентификатора.
Дмитрий, я, похоже, не совсем корректно сформулировал вопрос. Попробую еще раз: Какой тип переменной подразумевается передавать каждым Идентификатором?
Вопрос к разработчикам:
Корректно ли следуещее использование Идентификаторов запроса используемых в функции MarketInfo():
double a = MarketInfo(Symbol(),MODE_LOW); // 1 Минимальная дневная цена double a = MarketInfo(Symbol(),MODE_HIGH); // 2 Максимальная дневная цена datetime a = MarketInfo(Symbol(),MODE_TIME); // 5 Время поступления последней котировки double a = MarketInfo(Symbol(),MODE_BID); // 9 Последняя поступившая цена предложения. double a = MarketInfo(Symbol(),MODE_ASK); // 10 Последняя поступившая цена продажи. double a = MarketInfo(Symbol(),MODE_POINT); // 11 Размер пункта в валюте котировки. int a = MarketInfo(Symbol(),MODE_DIGITS); // 12 Количество цифр после десятичного точки в цене инструмента. int a = MarketInfo(Symbol(),MODE_SPREAD); // 13 Спрэд в пунктах int a = MarketInfo(Symbol(),MODE_STOPLEVEL); // 14 Минимально допустимый уровень стоп-лосса/тейк-профита в пунктах double a = MarketInfo(Symbol(),MODE_LOTSIZE); // 15 Размер контракта в базовой валюте инструмента double a = MarketInfo(Symbol(),MODE_TICKVALUE); // 16 Размер минимального изменения цены инструмента в валюте депозита double a = MarketInfo(Symbol(),MODE_TICKSIZE); // 17 Минимальный шаг изменения цены инструмента в валюте котировки double a = MarketInfo(Symbol(),MODE_SWAPLONG); // 18 Размер свопа для длинных позиций double a = MarketInfo(Symbol(),MODE_SWAPSHORT); // 19 Размер свопа для коротких позиций datetime a = MarketInfo(Symbol(),MODE_STARTING); // 20 Календарная дата начала торгов datetime a = MarketInfo(Symbol(),MODE_EXPIRATION); // 21 Календарная дата конца торгов bool a = MarketInfo(Symbol(),MODE_TRADEALLOWED); // 22 Разрешение торгов по указанному инструменту double a = MarketInfo(Symbol(),MODE_MINLOT); // 23 Минимальный размер лота double a = MarketInfo(Symbol(),MODE_LOTSTEP); // 24 Шаг изменения размера лота double a = MarketInfo(Symbol(),MODE_MAXLOT); // 25 Максимальный размер лота int a = MarketInfo(Symbol(),MODE_SWAPTYPE); // 26 Метод вычисления свопов. 0 - в пунктах; 1 - в базовой валюте инструмента; 2 - в процентах; 3 - в валюте залоговых средств. int a = MarketInfo(Symbol(),MODE_PROFITCALCMODE); // 27 Способ расчета прибыли. 0 - Forex; 1 - CFD; 2 - Futures int a = MarketInfo(Symbol(),MODE_MARGINCALCMODE); // 28 Способ расчета залоговых средств. 0 - Forex; 1 - CFD; 2 - Futures; 3 - CFD на индексы double a = MarketInfo(Symbol(),MODE_MARGININIT); // 29 Начальные залоговые требования для 1 лота double a = MarketInfo(Symbol(),MODE_MARGINMAINTENANCE);// 30 Размер залоговых средств для поддержки открытых позиций в расчете на 1 лот double a = MarketInfo(Symbol(),MODE_MARGINHEDGED); // 31 Маржа, взимаемая с перекрытых позиций в расчете на 1 лот double a = MarketInfo(Symbol(),MODE_MARGINREQUIRED); // 32 Размер свободных средств, необходимых для открытия 1 лота на покупку int a = MarketInfo(Symbol(),MODE_FREEZELEVEL); // 33 Уровень заморозки ордеров в пунктах.Спасибо.
Ну что же непонятного. Функция возвращает double. Перегруженных функций у нас вроде пока нет, поэтому одна функция возвращает всегда один тип. А куда ее сохранять - вопрос фантазии. Хоть в массив строк с хешированием, хоть вот так:
MarketInfo(Symbol(),MODE_LOW);Т.е. никуда. Ей-то все равно :)
Вопрос к разработчикам:
Корректно ли следуещее использование Идентификаторов запроса используемых в функции MarketInfo():
Спасибо.
Корректно. double результат функции будет преобразован к нужному типу при присваивании.
Воспользуйтесь принтом чтобы проверить свои идеи.
Вопрос к разработчикам:
Корректно ли следуещее использование Идентификаторов запроса используемых в функции MarketInfo():
Спасибо.
Корректно. double результат функции будет преобразован к нужному типу при присваивании.
Воспользуйтесь принтом чтобы проверить свои идеи.
Долгое время так и делал, но потом поймал себя на мысли о том, что я совершенно не имею на это никакого права.
Принудительно приводя к другому типу занчение которое лежит в double, можно потерять информацию, если не знать точно замысел разработчика.
Додумывать в таком ответственном деле как Идентификаторов запроса используемых в функции MarketInfo(), пусть даже с проверкой, категорически нельзя.
Официальной информации об этом я не нашел. Вот собственно это обстоятельство и сподвигло меня сделать подобную "памятку".
Спасибо за ответ.
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Сколько раз пытался найти в документации описание типа переменных идентификаторов. Каждый раз гадаю, а надо знать точно. Может плохо ищу? Прошу помощи.
Идентификаторы запроса, используемые в функции MarketInfo(). Mогут быть одной из следующего величин: А о типе переменной которая возвращается упоминания нет!