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

 
dimon74:
У меня так получается. Позиция закрывается по ТР, а для установки нового отложенного ордера нужно значение ТР+n*Point. И тут получается несостыковка: OrderTakeProfit () мне дает четыре знака (это видно через Alert), а ДЦ хочет пять. Я уже многое перепробовал, но кажется ещё не всё. Если есть мыслишка - подкиньте пожалуйста. Спасибо заранее!
Alert() и Print()по умолчанию выдают 4-ре знака после запятой, хотя на самом деле используется 8, для более корректного вывода в «консоль» пользуетесь функцией DoubleToStr().
 
dimon74:
У меня так получается. Позиция закрывается по ТР, а для установки нового отложенного ордера нужно значение ТР+n*Point. И тут получается несостыковка: OrderTakeProfit () мне дает четыре знака (это видно через Alert), а ДЦ хочет пять. Я уже многое перепробовал, но кажется ещё не всё. Если есть мыслишка - подкиньте пожалуйста. Спасибо заранее!

string DoubleToStr( double value, int digits)

Преобразование числового значения в текстовую строку, содержащую символьное представление числа в указанном формате точности.

Это для преверки должно помочь.

Просто и Alert(), и Print() выводят значения с точностью до 4-х знаков. Так что у тебя проблема в другом

 

Не могу понять, почему в таком виде

for(int a=0;a<8;a++)
// тут что нить делаем
for(int a=0;a<8;a++)
// еще чо нить делаем

пишет, что переменная уже определена. вроде как в повторе ей же опять 0 назначается? И находятся в разных кусках кода, первая в в if, вторая в else... 

 
Abzasc:

Не могу понять, почему в таком виде

пишет, что переменная уже определена. вроде как в повторе ей же опять 0 назначается? И находятся в разных кусках кода, первая в в if, вторая в else...


int a;
for(a=0;a<8;a++)
// тут что нить делаем
for(a=0;a<8;a++)
// еще чо нить делаем
Зачем же два раза определять одну и ту же переменную
 
Vinin:

Зачем же два раза определять одну и ту же переменную

Чтобы перечитать 

 for(int a=0;a<8;a++)
 aJPY[a]=iCustom(NULL,PERIOD_M15,"Indexes",a,0);

Т. е., если условие одно, читаем, если другое... блин. понял. Но это в конкретном случае, мне этот кусок в else не нужен.

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

 
Abzasc:

Чтобы перечитать

Т. е., если условие одно, читаем, если другое... блин. понял. Но это в конкретном случае, мне этот кусок в else не нужен.

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


Не, надо как-то определиться. Похоже просто кода не хватает. Я говорил только об одном. Объявить переменную и использовать (с предварительной инициализацей) это разные вещи. Одна и таже переменная может нести совсем разные функциональные значения, главное не перепутать что и где.
 

Попробую подробней. Есть индикатор, без буферов. Берет в 4 массива значения другого индикатора. Пытаюсь прикрутить

   int    counted_bars=IndicatorCounted();
   // считать только последний вызов
   int limit;
   if(counted_bars>0)
      counted_bars--;
   limit=Bars-counted_bars;
   for(int i=0;i<limit;i++)
Если новый бар есть, пересчитываем все массивы. если нет, то только 0-вой. Но пересчитываем все равно, т. е. вызываем и в if, и в else.
 
Abzasc:

Попробую подробней. Есть индикатор, без буферов. Берет в 4 массива значения другого индикатора. Пытаюсь прикрутить

Если новый бар есть, пересчитываем все массивы. если нет, то только 0-вой. Но пересчитываем все равно, т. е. вызываем и в if, и в else.


Предпочитаю другой подход

   int    counted_bars=IndicatorCounted();
   // считать только последний вызов
   int limit=Bars-counted_bars-1;
   if(Bars-counted_bars>2)
      limit = //.......................
   for(int i=limit;i>=0;i--)

Хотя это дело вкуса. Но я по крайней мере могу объяснить каждую строчку

 
Vinin:


Предпочитаю другой подход

Хотя это дело вкуса. Но я по крайней мере могу объяснить каждую строчку

Пусть так. Потом если limit = 0,  if записываем массив 0, 1, 2, else - массив 0. И ошибка с переменной.

Или надо  if записываем массив 1, 2, else - массив 0?

В любом случае, - я не могу 2 раза использовать переменную а, вот в чем загвоздка. Хотя применяю только 2 раза, в if и в else. Ее даже в общих переменных вверху кода нет.

 
Abzasc:

Пусть так. Потом если limit = 0, if записываем массив 0, 1, 2, else - массив 0. И ошибка с переменной.

Или надо if записываем массив 1, 2, else - массив 0?

В любом случае, - я не могу 2 раза использовать переменную а, вот в чем загвоздка. Хотя применяю только 2 раза, в if и в else. Ее даже в общих переменных вверху кода нет.


Приведи весь код. Можно в личку. Постараюсь помочь