Помогите возвести в сепень

 

Уважаемые знатоки MQL4, помогите, пожалуйста дилетанту. Не могу возвести в степень число. Использую функцию MathPow. Вот часть кода:

   double digits=MarketInfo(NULL,MODE_DIGITS);
   double MARK=MathPow(10.0,digits);

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

Мысль была такая: вернуть значение digits (количество знаков после запятой) текущего инструмента (на график которого устанавливался бы этот индикатор) и возвести десятку в его степень, получив некий множитель (в приложенном коде "MARK"), с помощью которого переводить диапазон цен в количество пунктов. Например, если EURUSD котируется с точностью 4 знака после запятой, то мой множитель MARK будет равен: 10 в сепени 4 = 1000.


Заранее благодарен.

 
Усложняете... берите поинт и делите на него цену... получите пункты...
 
KimIV писал(а) >>
Усложняете... берите поинт и делите на него цену... получите пункты
Так не интересно Хочется, чтобы позабористей и в нужный момент заглючило. :D
Где-то около двух лет назад встречал такое решение:
int x=1;
for(int i=0;i<digits;i++) x=10*x;
 

KimIV, это Вы сейчас себе посоветовали? :-) Я только учусь. Логикой я все понимаю, но я полный профан в реализации своих задумок в программном коде.

Если я Вас правильно понял, Вы советуете использовать Предопределенную переменную Point. Но можно ли ее использовать саму по себе? Например, так

   double Point;
   for(int i=0; i<limit; i++)
      MainBuffer[i]=(iMA(NULL,0,VolatilityPeriod,0,MODE_SMA,PRICE_HIGH,i)-iMA(NULL,0,VolatilityPeriod,0,MODE_SMA,PRICE_LOW,i))/Point;

Думаю, вряд ли. Тогда видимо нужно определить ее значение для текущего инструмента - с помощью той же функции MarketInfo?

   double Point=MarketInfo(NULL,MODE_DIGITS);
   for(int i=0; i<limit; i++)
      MainBuffer[i]=(iMA(NULL,0,VolatilityPeriod,0,MODE_SMA,PRICE_HIGH,i)-iMA(NULL,0,VolatilityPeriod,0,MODE_SMA,PRICE_LOW,i))/Point;

Или как? Сейчас попробовал оба варианта - не работают.

Не могли бы Вы как-то в виде строки кода это все изобразить, что Вы имеете ввиду?

 

Roger

Так не интересно Хочется, чтобы позабористей и в нужный момент заглючило. :D

:D Ну, да может и переборщил, но как извилина загнулась, так и придумал )))

Но тот же вопрос, что и к KimIV - как это все реализовать? Куда строку вставить то понятно, но на что делить (MainBuffer из предыдущего моего коммента)? На икс?

 
Roger, сейчас попробовал вставить - при компиляции пишет, что digits не определен.
 
Kagor писал(а) >>
Не могли бы Вы как-то в виде строки кода это все изобразить, что Вы имеете ввиду?
Comment(Bid/MarketInfo(Symbol(), MODE_POINT));
только ещё на ноль не забывайте проверять :-)
 
Kagor писал(а) >>
Roger, сейчас попробовал вставить - при компиляции пишет, что digits не определен.

У Вас в первом посте digits был определен, я от него и плясал.

 

KimIV, т.е. ошибка была в том, что я в функции ставил "NULL" вместо "Simbol"? Но "NULL" означает текущий инструмент (на график которого ставиться индикатор). В моем первоначальном коде инструмент то как раз правильно определялся, только вот в пункты не переводился мой индикатор.



Сейчас все сделал, как Вы посоветовали - сразу разделил на функцию, без ввода дополнительных переменных - РАБОТАЕТ!!!! Огромное спасибо Вам!

Кстати, с "NULL" тоже работает ;-)

 
Roger, аааа, ясно. Приме к сведению этот вариант тоже. У меня уже все получилось. Вам тоже огромное спасибо за помощь!
 
KimIV, кстати, на будущее - как все таки в степень возвести при моей первоначальной задумке? Как нужно было в коде это выразить?
Причина обращения: