Кол-во значащих после запятой

 

Видимо совсем отупел :-)

У меня один эксперт работает на нескольких ДЦ и соответственно условия торговли разные, в частности шаг увеличения лота.

Что бы не переписывать для каждого экземпляра процедуру определения лота, необходимо определить кол-во значащих после запятой в значении возвращаемое MarketInfo(Symbol(),MODE_LOTSTEP) для нормализации размера лота в зависимости от торговых условий.

 
Cronex:

Видимо совсем отупел :-)

У меня один эксперт работает на нескольких ДЦ и соответственно условия торговли разные, в частности шаг увеличения лота.

Что бы не переписывать для каждого экземпляра процедуру определения лота, необходимо определить кол-во значащих после запятой в значении возвращаемое MarketInfo(Symbol(),MODE_LOTSTEP) для нормализации размера лота в зависимости от торговых условий.

int Step = 0;
double InfoStep = MarketInfo(Symbol(),MODE_LOTSTEP);
switch(InfoStep)
{//?
case 1.: Step = 0; break;
case 0.1: Step = 1; break;
case 0.01: Step = 2; break;
default: Step = 0;
}//?
 
Registr:
int Step = 0;
double InfoStep = MarketInfo(Symbol(),MODE_LOTSTEP);
switch(InfoStep)
{//?
case 1.: Step = 0; break;
case 0.1: Step = 1; break;
case 0.01: Step = 2; break;
default: Step = 0;
}//?

Спасибо, этот вариант я тоже рассматривал, но уж очень он коряво выглядит :-) Да и вопрос в неопределенности: шаг теоретически может быть 0.02, 0.3 и т.д

Другими словами не хочется связываться в предопределенными значениями в условиях сравнения.

 
Cronex:
Спасибо, этот вариант я тоже рассматривал, но уж очень он коряво выглядит :-) Да и вопрос в неопределенности: шаг теоретически может быть 0.02, 0.3 и т.д

Ты просил:

необходимо определить кол-во значащих после запятой..

int Step = 0;
double InfoStep = MarketInfo(Symbol(),MODE_LOTSTEP);
if(InfoStep<1&&InfoStep>=0.1) Step = 1;

else if(InfoStep<0.1&&InfoStep>=0.01) Step = 2;

else if(InfoStep<0.01&&InfoStep>=0.001) Step = 3;

else Step = 0;

 
Registr:

Ты просил:

необходимо определить кол-во значащих после запятой..



Да все верно, но я не писал что это заранее определенные значения :-)
 

Да, такое тоже может быть...
Есть ДЦ с минилотом напримр 0.2

А так-же и минилотом 10 ! ;) да-да, например центовые сервера...

Видимо выходом будет просто расширить список возможных вариантов,
правда что делать с мнилотом 10 ??? пока ничё в голову не лезет...

Кстати! попутно... что выгоднее\лучше
свич или if ?

 
Cronex:
Registr:

Ты просил:

необходимо определить кол-во значащих после запятой..



Да все верно, но я не писал что это заранее определенные значения :-)

Переписал..
 
kombat:

Да, такое тоже может быть...
Есть ДЦ с минилотом напримр 0.2

А так-же и минилотом 10 ! ;) да-да, например центовые сервера...

Видимо выходом будет просто расширить список возможных вариантов,
правда что делать с мнилотом 10 ??? пока ничё в голову не лезет...

Кстати! попутно... что выгоднее\лучше
свич или if ?


Да вопрос не в мин лоте, с этим нет проблем. Вопрос в шаге изменения лота, а это значение не всегда равно мин лоту.

В голову точно ни черта не лезет.... выходные что ли влияют :-)

 
kombat:

Да, такое тоже может быть...
Есть ДЦ с минилотом напримр 0.2

А так-же и минилотом 10 ! ;) да-да, например центовые сервера...

Соответствено добавить.. :)
 
Registr:

int Step = 0;
double InfoStep = MarketInfo(Symbol(),MODE_LOTSTEP);
if(InfoStep<1&&InfoStep>=0.1) Step = 1;

else if(InfoStep<0.1&&InfoStep>=0.01) Step = 2;

else if(InfoStep<0.01&&InfoStep>=0.001) Step = 3;

else Step = 0;


Ок, спасибо :-). Пока буду использовать этот алгоритм. Надо порыться, кажется я я видел решение несколько короче, если найду выложу.
 
kombat:

Кстати! попутно... что выгоднее\лучше
свич или if ?

switch работает с константами, if может работать с диапазонами...