[ВНИМАНИЕ, ТЕМА ЗАКРЫТА!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда. - страница 670

 
artmedia70:

Какова вероятность прихода нового тика до завершения всех текущих рассчётов советника? Мне кажется, только в этом случае данные станут старыми и неактуальными.

проверь сколько у тебя считается код - я тоже, вот недавно сомневался, хватит ли скорости вычисления МТ4 для моего советника, оказалось, что пока хватает с головой, у меня код вычисляется около 18 мсек, т.е. за 1 секунду вы числится 55 раз, тиков приходит от 10 до 70 в минуту, причемесли больше 50 тиков в минуту, то значит идет свеча

вот и попробуй понаблюдать как у тебя код работает, примерно так

int tik,barM1


int init(){
   barM1  = Bars;
   tik = 0;

return (0);
}


//_______________________________________________________
//  это добавить в start()
//_______________________________________________________
int start=GetTickCount();
 

 // некие серьёзные вычисления...


tik++;
Print("Время вычисления ", GetTickCount()-start, " миллисекунд.");

int counted  = Bars;
if (counted != barM1) {
print("за один бар было принято ",tik, "тиков" )
tik=0;
barM1=counted;
}

вот индикатор, который считает тики - для сверки

ну а если у тебя по цене открытия, извини проглядел, то  

 OpnPrice =iOpen(NULL,PERIOD_M5,0); можно изменять только на закрытом баре - код выше с условия if (counted != barM1) {

Файлы:
 

Как изменить количество цифр после запятой у индикатора iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0) при вычислении в теле советника? Результат выходит с 4-мя (то-есть 0.0001), а надо, для точности анализа, с 5-ю (например 0.00012). И ведь на график в окне индикатора терминал МТ4 выводит именно 5-ти разрядные значения.

 
Оператор NormalizeDouble() решит Ваши проблемы.
 
Roger:
Оператор NormalizeDouble() решит Ваши проблемы.


То-есть, результатом NormalizeDouble(iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0),5) станет желаемое 0.00012 ?

P.S. Добавил и протестировал - ничего. Просто на выходе 0.00010, а это те же 4 разряда...

 

Нет, не совсем верно, Roger.

IndicatorDigits() смотрите, Борис. Но его нужно вставить в сам индикатор, т.к. он будет относиться именно к нему, а не к советнику.

P.S. Еще: эта функция годится только для индикатора, для которого у Вас есть код. Тогда его можно будет вызвать с помощью iCustom().

А для тех, которые вызываются "стандартно", как iMACD(), я не знаю правильного решения.

 
pathfinder1:

То-есть, результатом NormalizeDouble(iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0),5) станет желаемое 0.00000 ?

  Да, правильно. Ключевая фраза была при вычислении в теле советника?  И видимо со стандартным индикатором это невозможно (((
 
pathfinder1:

Как изменить количество цифр после запятой у индикатора iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0) при вычислении в теле советника? Результат выходит с 4-мя (то-есть 0.0001), а надо, для точности анализа, с 5-ю (например 0.00012). И ведь на график в окне индикатора терминал МТ4 выводит именно 5-ти разрядные значения.

Менять ничего не надо, в стандартных индикаторах точность задается максимальная (до 8 разрядов), вы сделали не правильный вывод о точности выхода данных из за того что, функция Print() выводит по умолчанию до 4 разрядов, в расчетах (в нутрии советников например) используются максимальная точность, что бы это увидеть нужно выводить double через DoubleToStr(), как пример:

Print("iMACD ", DoubleToStr(iMACD(NULL,0,12,26,9,PRICE_CLOSE,MODE_MAIN,0), 8));

и получаем такой выход:

 

 
ToLik_SRGV:

Менять ничего не надо, в стандартных индикаторах точность задается максимальная (до 8 разрядов), вы сделали не правильный вывод о точности выхода данных из за того что, функция Print() выводит по умолчанию до 4 разрядов, в расчетах (в нутрии советников например) используются максимальная точность, что бы это увидеть нужно выводить double через DoubleToStr(), как пример:

и получаем такой выход:


Правильно, правильно, правильно ! ! ! Анатолий - большой респект, а то я уже было зациклился.

Правда жизни такова - "одна голова хорошо, а две - лучше" (цит.)

 
ToLik_SRGV:

Менять ничего не надо, в стандартных индикаторах точность задается максимальная (до 8 разрядов)


Вот-вот, у меня тоже такое подозрение было :)
 
Как уже нередко бывало  - правда на поверхности)) Признаю свой fault.