Ошибки, баги, вопросы - страница 1380
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Заявку создал, однако за трое с лишним суток ее так и никто не посмотрел.
Номер заявки какой ?
Извечная тема даблов =)
Прошу разработчиков добавить две стандартные функции.
Предлагаю следующую спецификацию:
====
Rp
Функция возвращает значение, которое будет выровнено на шаг цены по инструменту.
double Rp(
string symbol_name, // имя символа
double value // цена, которую надо выровнять
);
Параметры
symbol_name
[in] Символ.
value
[in] Положительное число.
Возвращаемое значение
Ближайшее число, округлённое до шага цены торгового инструмента.
...
Пример:
Входные значения:
symbol_name = ES-...
value = 2000,55
на выходе = 2000,50
(шаг цены по инструменту ES = 0.25)Входные значения:
symbol_name = SPX
value = 2000,55
на выходе = 2000,63
(на инструменте SPX шаг цены тоже 0,25, как и на ES, но при этом, существует базовое смещение и котировка может иметь только следующие дробные части -- 13,38,63,88).
Входные значения:
symbol_name = RTS
value = 82055,55
на выходе = 82060
(шаг цены по инструменту RTS = 10)
...Ну и так далее.
Вторая функция, которая меня интересует ещё больше:
====
Rv
Функция возвращает значение, которое будет выровнено на шаг объёма по инструменту и будет находиться в пределах от SYMBOL_VOLUME_MIN до SYMBOL_VOLUME_MAX.
double Rv(
string symbol_name, // имя символа
double value // лот, который надо выровнять
);
Параметры
symbol_name
[in] Символ.
value
[in] Положительное число.
Возвращаемое значение
Ближайшее число, округлённое до шага объёма торгового инструмента. Число не будет больше SYMBOL_VOLUME_MAX и не будет меньше SYMBOL_VOLUME_MIN.
...
======
Главное свойство, которого я жду от этих функций - они должны быть валидны для ВСЕХ ТОРГОВЫХ ИНСТРУМЕНТОВ В МИРЕ и ДЛЯ ЛЮБЫХ ВХОДНЫХ ЗНАЧЕНИЙ.
Если у кого-то есть готовое решение, поделитесь пожалуйста, пока разработчики сделают.
Странно, что до сих пор нет таких =/
Решая задачу из своего камента ваше накатал тупейшую и топорную функцию, но даже она косячит для многих входных значений.
Код функции:
Смысл в том, что я тупо переложил весь гемор определения значимой части дробного числа на тот метод, который подставляет компилятор вместо оператора =(string).
Но, оказывается, в таком виде код форматирует строку почти как g-тип из printf(), то есть для длинных дробей строку выводит в научном формате.
Как бы так добиться для любого n вывод в строку без экспоненциального формата и без лишних цифр справа и без гемороя =)?
И ещё вопрос: всегда десятичная дробь разделяется точкой или по дефолту из системных настроек может быть запятая или ещё что?
Решая задачу из своего камента ваше накатал тупейшую и топорную функцию, но даже она косячит для многих входных значений.
Код функции:
Смысл в том, что я тупо переложил весь гемор определения значимой части дробного числа на тот метод, который подставляет компилятор вместо оператора =(string).
Но, оказывается, в таком виде код форматирует строку почти как g-тип из printf(), то есть для длинных дробей строку выводит в научном формате.
Как бы так добиться для любого n вывод в строку без экспоненциального формата и без лишних цифр справа и без гемороя =)?
И ещё вопрос: всегда десятичная дробь разделяется точкой или по дефолту из системных настроек может быть запятая или ещё что?
А чем Вас Point(), Digits не устраивает ???
Пусть ещё будет хотя бы DigitsLot(), которая вернёт точность шага объёма.
Возможно, я не понял Ваш намёк. Есть какой-то разумный способ получить искомое через Point() или Digits()?
И всё-таки, очень нужны те две функции, которые я описал выше (валидные ровнялки для цены и для лота).
Я понимаю, что на форексовых кухнях объём принят чаще всего с шагом 0.01 и всем пофиг, что завтра будет, но терминал-то развивается.
Инструментов всё больше. Уже не работают все поделки-самоделки, которые не допускают целым числом шаг лота. Кто сказал, что не буде минимального лота, допустим, в одну четверть? Да мало ли вариантов.
Это решение должно быть от разработчиков или абсолютное (для всех значений) иначе ему доверять нельзя.
А про котировку. Когда отправляешь заявку сервер-то принимает даже не ровные значения цены, лишь бы нормализовать (обрезать по знакам), но есть ведь и другие задачи.
Согласитесь, что надо иметь возможность получать из любого числа реально возможную котировку на любом инструменте, а не фигню подрезанную.
Решая задачу из своего камента ваше накатал тупейшую и топорную функцию, но даже она косячит для многих входных значений.
Код функции:
...Не подумайте, что я совсем уж дурной, так упорно из числа делаю строку ради чисто математической задачи.
Сначала честно попробовал сделать через логарифм, но глючно вышло до безобразия =(
Исправляю сам себя. Эта вроде бы работает:
Не подумайте, что я совсем уж дурной, так упорно из числа делаю строку ради чисто математической задачи.
Сначала честно попробовал сделать через логарифм, но глючно вышло до безобразия =(
Еще раз спрошу на всякий случай, чем Вас не устраивает NormalizeDouble() _Point _Digits ????????
Зачем Вы создаете велосипед ?
Еще раз спрошу на всякий случай, чем Вас не устраивает NormalizeDouble() _Point _Digits ????????
Зачем Вы создаете велосипед ?
Ещё раз отвечу на всякий случай. Объясните мне, пожалуйста, как узнать точность SYMBOL_VOLUME_STEP с помощью "NormalizeDouble() _Point _Digits"?
Или как получить из любого положительного числа значение кратное SYMBOL_VOLUME_STEP?
Как получить следующий результат:
2000.55 (символ ES) -----> 2000.50
2000.55 (cимвол SPX) -----> 2000.63
1055.5555 (символ RTS) ------> 1060
для любого символа в мире, который доступен в терминале MT5 сегодня (и желательно завтра)
"????????"
Разработчики могут добавить всего 2 функции и дорабатывать их по мере развития терминала, а я не знаю всех особенностей разных торговых инструментов. Где я могу узнать, какие котировки вообще бывают? А мне надо получить именно КОТИРОВКУ, а не результат NormalizeDouble().
Если этот велосипед уже есть - ткните в конкретную реализацию, буду признателен. То что нашёл сам уже сейчас не работает на некоторых символах.
...
2000.55 (символ ES) -----> 2000.50
2000.55 (cимвол SPX) -----> 2000.63
1055.5555 (символ RTS) ------> 1060
...