Как нейтрализовать пятый знак после запятой - страница 2

 
Barbarian:
double MathRound( double value) - функция возвращает double. Типы данных double и int разные, даже если сделаешь DoubleToString(a,0). У них размер разный и компилятор выдаст варнинг (предупреждение). А

int StrToInteger(string value) возвращает тип int. Поэтому когда в качестве параметра в функцию требуется передать int и мы преобразуем через DoubleToString - StrToInteger - то на выходе получаем чистый int, а не усеченный double до нулевого знака после запятой.

Размеры типов на всякий случай:

int - 4 байта

double - 8 байт

Я не знаю как лучше, но думаю, что без варнингов лучше по любому, плюс экономия памяти, когда переменных много это более заметно и плюс ко всему корректность и точность вычислений. Вот к примеру про приведение типов сказано тут http://www.sql.ru/forum/220914/preobrazovanie-tipov-int-double и вот тут http://cppstudio.com/uchebniki/yazyk-programmirovaniya-s/yavnoe-i-neyavnoe-preobrazovanie-tipov-dannyx-c/

Плохо, что в MQL4 не предусмотрено приведение типов с использованием cast`ов.

Специально для вас в уже готовый, законченный код индикатора вставил эти строчки и откомпилировал:


Нет предупреждений.
 
artmedia70:

Специально для вас в уже готовый, законченный код индикатора вставил эти строчки и откомпилировал:

Нет предупреждений.

Там где c=(int)a; это неявное приведение типов. В MQL4 новом, в C++ (они в этом плане одинаковые теперь), пишут, что double старший тип данных и преобразовывать из него в наименьший тип данных не правильно, т.к. влечет за собой потерю части информации. Это видно на схеме типов данных. Мы же не знаем как устроен алгоритм компилятора нового MQL4, скорее всего c=(int)a; преобразуется без варнингов из-за недокументированных возможностей компилятора. Но согласно стандарта написанным самими разработчиками - это вроде как не правильно :) Я стараюсь делать по стандарту который прописан, так оптимальнее, т.к. точно знаешь, что ошибок даже в будущих исправлениях компилятора не будет.

 
artmedia70:

Специально для вас в уже готовый, законченный код индикатора вставил эти строчки и откомпилировал:


Нет предупреждений.

Да помоему ты неправ, DoubleToString(a,0) мы вообще отсекём все знаки после запятой. Конкретно если для EURUSD цену на 10000 умножить предварительно, а потом интом отсекать пятый знак. Но я думаю даже это не поможет, человеку мешает просто пятый знак после запятой. Даже если просто тупо сделать NormalizeDouble(var,4) этот самый пятый все равно будет выводится в виде нуля. А как от этого избавиться пока мыслей нет.
 
alsu:
Это все равно что в магазине попросить, чтоб ценники были без копеек, т.к. "они меня только путают". Смешно.

Это всё равно, что если цена в магазине на ценниках будет в рублях, копейках и десятых долях копейки. Для скальпинга с помощью советников это может и оправданно. Для ручной торговли, особенно если система подразумевает выставление не одного, а целой батареи ордеров.... это действительно не очень удобно, так как доли пункта, которые выражает пятый знак совершенно излишни....
 
Barbarian:

Там где c=(int)a; это неявное приведение типов.

Это как раз называется явное приведение.
 
nelson1:

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

Излишни, так не смотрите на них. Выставление батареи ордеров, я так полагаю, подразумевает автоторговлю? Так какого ж рожна тогда, советник что ли пятизнаком подавится?

Ну, или уговаривайте своего брокера выделить вам отдельный сервер, который лично вам будет послать четырехзначные котировки.

 
_new-rena:
Попросите об этом брокера. Кое где убирают.

Спасибо за совет, уже просили всем сообществом и не раз... Пока отвечают в духе мол...стерпиться- слюбиться. Иными словами предлагают привыкнуть...
 
nelson1:

Спасибо за совет, уже просили всем сообществом и не раз... Пока отвечают в духе мол...стерпиться- слюбиться. Иными словами предлагают привыкнуть...
а счет другой открыть и перекинуть - это же 5 секунд (если сделки все будут закрыты тока)?
 
alsu:

Излишни, так не смотрите на них. Выставление батареи ордеров, я так полагаю, подразумевает автоторговлю? Так какого ж рожна тогда, советник что ли пятизнаком подавится?

Ну, или уговаривайте своего брокера выделить вам отдельный сервер, который лично вам будет послать четырехзначные котировки.




Выставление батареи ордеров, подразумевает выставление встречных ордеров. Схема выставления для отбойной и трендовой системы различна. Автоторговлей не занимаюсь. У меня и ручная торговля неплохо идёт.... Если бы я работал с советниками, проблем бы не было... Я не программист, я трейдер.

Спасибо, за Ваш комментарий... Но, я бы хотел получить ответ, чисто технически, что можно изменить в настройках самого терминала, что бы пятый знак либо убрать вовсе, либо как то выделить и ничего более...

 
nelson1:


Выставление батареи ордеров, подразумевает выставление встречных ордеров. Схема выставления для отбойной и трендовой системы различна. Автоторговлей не занимаюсь. У меня и ручная торговля неплохо идёт.... Если бы я работал с советниками, проблем бы не было... Я не программист, я трейдер.

Спасибо, за Ваш комментарий... Но, я бы хотел получить ответ, чисто технически, что можно изменить в настройках самого терминала, что бы пятый знак либо убрать вовсе, либо как то выделить и ничего более...


Нельзя, это настройка сервера. Я бы советовал аналогично - быть более open-minded и попросту привыкнуть; помнится, когда мой брокер лет 5 назад перешел на пятизнак, лично мое привыкание длилось всего пару часов.