Идентификаторы запроса, используемые в функции MarketInfo() - Тип переменной?

 
Здравствуйте все, кроме плохих людей!


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


Идентификаторы запроса, используемые в функции MarketInfo(). Mогут быть одной из следующего величин: А о типе переменной которая возвращается упоминания нет!

Константа Значение Описание
MODE_LOW1Минимальная дневная цена
MODE_HIGH2Максимальная дневная цена
MODE_TIME5Время поступления последней котировки
MODE_BID9Последняя поступившая цена предложения. Для текущего инструмента хранится в предопределенной переменной Bid
MODE_ASK10Последняя поступившая цена продажи. Для текущего инструмента хранится в предопределенной переменной Ask
MODE_POINT11Размер пункта в валюте котировки. Для текущего инструмента хранится в предопределенной переменной Point
MODE_DIGITS12Количество цифр после десятичного точки в цене инструмента. Для текущего инструмента хранится в предопределенной переменной Digits
MODE_SPREAD13Спрэд в пунктах
MODE_STOPLEVEL14Минимально допустимый уровень стоп-лосса/тейк-профита в пунктах
MODE_LOTSIZE15Размер контракта в базовой валюте инструмента
MODE_TICKVALUE16Размер минимального изменения цены инструмента в валюте депозита
MODE_TICKSIZE17Минимальный шаг изменения цены инструмента в валюте котировки
MODE_SWAPLONG18Размер свопа для длинных позиций
MODE_SWAPSHORT19Размер свопа для коротких позиций
MODE_STARTING20Календарная дата начала торгов (обычно используется для фьючерсов)
MODE_EXPIRATION21Календарная дата конца торгов (обычно используется для фьючерсов)
MODE_TRADEALLOWED22Разрешение торгов по указанному инструменту
MODE_MINLOT23Минимальный размер лота
MODE_LOTSTEP24Шаг изменения размера лота
MODE_MAXLOT25Максимальный размер лота
MODE_SWAPTYPE26Метод вычисления свопов. 0 - в пунктах; 1 - в базовой валюте инструмента; 2 - в процентах; 3 - в валюте залоговых средств.
MODE_PROFITCALCMODE27Способ расчета прибыли. 0 - Forex; 1 - CFD; 2 - Futures
MODE_MARGINCALCMODE28Способ расчета залоговых средств. 0 - Forex; 1 - CFD; 2 - Futures; 3 - CFD на индексы
MODE_MARGININIT29Начальные залоговые требования для 1 лота
MODE_MARGINMAINTENANCE30Размер залоговых средств для поддержки открытых позиций в расчете на 1 лот
MODE_MARGINHEDGED31Маржа, взимаемая с перекрытых позиций в расчете на 1 лот
MODE_MARGINREQUIRED32Размер свободных средств, необходимых для открытия 1 лота на покупку
MODE_FREEZELEVEL33Уровень заморозки ордеров в пунктах. Если цена исполнения находится в пределах, определяемых уровнем заморозки, то ордер не может быть модифицирован, отменен или закрыт.



 

double MarketInfo(

string symbol, int type)
 
Integer:

double MarketInfo(

string symbol, int type)

Как так??? А MODE_TIME???

 

Вот например:

MODE_MARGINCALCMODE28Способ расчета залоговых средств. 0 - Forex; 1 - CFD; 2 - Futures; 3 - CFD на индексы

Совершенно очевидно, что можно использовать int.


А вот:

MODE_SPREAD13Спрэд в пунктах

Оказывается совершенно не очевидно, что можно использовать 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 может быть некорректно, т.к. не хватит одного разряда.

 
Korey:
Если не рыться в книжках, то вот так:
datetime это двойное целое без знака.
double имеет мантиссу разряд в разряд равную datetime, да еще + порядок.
Потери точности при операциях float/double на платформе x86 не бывает,

т.к. числа расширяются на 6 разрядов. Поэтому можно не думать о мелочах и double == datetime.

Однако, вычисление/хранение datetime в int может быть некорректно, т.к. не хватит одного разряда.

Дык, это-то понятно(живем до 2037 года). Вопрос несколько в другом.

Согласитесь, что не нормально, скажем, для:

MODE_MARGINCALCMODE28Способ расчета залоговых средств. 0 - Forex; 1 - CFD; 2 - Futures; 3 - CFD на индексы
резервировать double?


Вот и возник вопрос - нет ли на этот счет официального мнения. Рекомендаций что ли для каждого Идентификатора.

 
VBAG:
Integer:

double MarketInfo(

string symbol, int type)

Как так??? А MODE_TIME???

Дмитрий, я, похоже, не совсем корректно сформулировал вопрос. Попробую еще раз: Какой тип переменной подразумевается передавать каждым Идентификатором?

 

Вопрос к разработчикам:

Корректно ли следуещее использование Идентификаторов запроса используемых в функции 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);
Т.е. никуда. Ей-то все равно :)
 
VBAG:

Вопрос к разработчикам:

Корректно ли следуещее использование Идентификаторов запроса используемых в функции MarketInfo():


Спасибо.

Корректно. double результат функции будет преобразован к нужному типу при присваивании.


Воспользуйтесь принтом чтобы проверить свои идеи.

 
Renat:
VBAG:

Вопрос к разработчикам:

Корректно ли следуещее использование Идентификаторов запроса используемых в функции MarketInfo():


Спасибо.

Корректно. double результат функции будет преобразован к нужному типу при присваивании.


Воспользуйтесь принтом чтобы проверить свои идеи.


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

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

Додумывать в таком ответственном деле как Идентификаторов запроса используемых в функции MarketInfo(), пусть даже с проверкой, категорически нельзя.

Официальной информации об этом я не нашел. Вот собственно это обстоятельство и сподвигло меня сделать подобную "памятку".

Спасибо за ответ.

Причина обращения: