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

 

сама функция прекратит работу, если будет реквота по условию else

if (res!=-1){    
//..
}else{
    err = GetLastError();
    if (err > 1) try = 0;
    Comment("Ошибка - ", err);          
}

try = 0, соответственно цикл while прекращает работу и openOrder() возвращает false

но если применять конструкцию while(!openOrder(..)){}, то да, долбиться будет пока не откроет ордер

 
keekkenen . Вот меня и интересует в функции start() у Вас while(!openOrder(..)){} не раскрыто, что там делается в {}. Ограничиваете ли Вы количество попыток при реквотах?
 

по-скольку вы написали что, ордер должен открываться, то я и привел такую "жесткую" конструкцию, раз должен открыться, значит будет открыт независимо от того сколько на это потребуется попыток.. если же по нормальному открывать ордера, то while не нужен, можно в try передать число попыток и в функции уже определять реагировать на критические ошибки или игнорировать их и тупо пытаться открыть try раз ордер..


а смысл while(!openOrder(..)){} в том, что создаем вечный цикл, т.е. он будет работать до тех пор пока не откроется ордер..

собственно, определите какая должна быть тактика при открытии ордеров, поможем..

 

вопрос такой:

Не получается работать с массивом.

Инициализирую массив, заполняю его любыми данными, а когда считываю - там нули.

Что делаю не так?


double MASS[];

for (int i = 0; i < 10; i++)
 {
  MASS[i]=i;
 }
for (int n = 0; n < 10; n++)
 {
  Print(MASS[n]);
 }
 
Kontra писал(а) >>

Не получается работать с массивом.

Нужно указать размер массива, например при объявлении:

double MASS[10];

или потом:

ArrayResize(MASS,10);
 

а если я не знаю, какой размер массива у меня будет?

И даже если задаю - что то не компиляется:

Вставляю внешнюю переменную:

extern int Razmer = 10;

И дальше по тексту:

   double MASS[Razmer];

for (int i = 0; i < 10; i++)
 {
  MASS[i]=i;
 }
for (int n = 0; n < 10; n++)
 {
  Print(MASS[n]);

на выходе результат:

'Razmer' - integer number expected C:\Program Files\MetaTrader - Alpari2\experts\temp.mq4 (36, 16)
']' - comma or semicolon expected C:\Program Files\MetaTrader - Alpari2\experts\temp.mq4 (36, 22)
'MASS' - variable not defined C:\Program Files\MetaTrader - Alpari2\experts\temp.mq4 (40, 3)
'MASS' - variable not defined C:\Program Files\MetaTrader - Alpari2\experts\temp.mq4 (44, 9)

 
Kontra писал(а) >>

а если я не знаю, какой размер массива у меня будет?

Значит нужно использовать ф-цию ArrayResize когда станет известно сколько элементов будет в массиве.

С внешней переменной, как видите, не прокатит:)

Можно так:

ArrayResize(MASS,Razmer);
 

Спасибо, уважаемый Хирург.

Все заработалао :)

 
int init()
  { 
   double A=AccountBalance()         //Определяем баланс
   double B=NormalizeDouble(A/50,0)  //Выполняем вычисления и делаем результат целым числом
   double Lots=B*0.01                //Вычисление лота.

if (Lots>0)Alert("Лот будет ",Lots )

   return(0);
  }
В чём тут ошибка и как это можно реализовать?
 

А что собственно вы пытаетесь реализовать?

Причина обращения: