Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 135

 

Доброго времени суток, если не сложно, подскажите новичку:

1) Как объявить массив размером равным значению некой переменной? (если i=7 объявляем массив double Muss[7] и так далее );

2) Почему массив в пользовательской функции считается объявленным и адекватно используется если условие всегда ложь?

while (false){

Alert("aaaaaaaaa" );

static double Buf_max [9000000];

static double Buf_min [9000000];}

3) Есть ли разница в пользовательской функции и в целом между просто массивом и static массивом?

 
ALXIMIKS:

Доброго времени суток, если не сложно, подскажите новичку:

1) Как объявить массив размером равным значению некой переменной? (если i=7 объявляем массив double Muss[7] и так далее );

...

1) ArrayResize()

int i=7;
double Muss[]; // объявление динамического массива
//---
int init() 
{
  ArrayResize(Muss,i); // устанавливает новый размер массива
  return(0);
}
 

такая фигня:

если вызвать MarketInfo(Symbol(),MODE_TRADEALLOWED), то возвращает - 1=торговля разрешена.

а если навести на символ в обзоре рынка, то выскакивает подсказка с надписью - Trade: Close.

в чём тут фокус?

торговать действительно не даёт, но почему MODE_TRADEALLOWED возвращает неверное значение?

 
chief2000:

Сколько раз вы запускали индикатор? Похоже что несколько раз (в ваших результатах заметна цикличность).
Добавьте еще один принт в deinit с каким-нибудь "разделителем", задайте условие на вход или переделайте в скрипт чтобы запускался не более одного раза, тогда будет понятнее.


Отличная идея))

Я сделал проще, вот так:

//+------------------------------------------------------------------+
//|                                            massive_fffffffff.mq4 |
//|                                                              hoz |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""

int start()
{ 

   int Array[4] = {1, 2, 3, 4};
   int x1, x2, x3, x4;
   int Array_Size = ArrayRange(Array, 0);
   
   for(int i=0; i<11; i++)
   {
      i++;
      Print("_i = ", i);
   }

   for(x1=0; x1<Array_Size; x1++)
   {
      Print("Combination = ", Array[x1]);

      for(x2=x1+1; x2<Array_Size; x2++)
      {
         Print("Combination = ", Array[x1] + "   " + Array[x2]);

         for(x3=x2+1; x3<Array_Size; x3++)
         {
            Print("Combination = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3]);

            for(x4=x3+1; x4<Array_Size; x4++)
            {
               Print("Combination = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3] + "   " + Array[x4]);
            }
         }
      }
   }
  for(int h=0; h<11; i++)
   {
      h++;
      Print("h = ", h);
   }


   return(0);
}

Начало в журнале такое:

2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 9
2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 9
2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 7
2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 5
2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 3
2013.09.10 17:09:08     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 1
2013.09.10 17:09:07     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 11
2013.09.10 17:09:07     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 10
2013.09.10 17:09:07     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 9
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 9
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 7
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 5
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 3
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 1
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 11
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 10
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: h = 9
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: Combination = 1
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 11
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 9
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 7
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 5
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 3
2013.09.10 17:09:06     2013.08.15 00:00  massive_fffffffff EURUSD.GI,M5: _i = 1
2013.09.10 17:09:06     massive_fffffffff test started
2013.09.10 17:09:04     TestGenerator: spread set to 2
2013.09.10 17:09:04     massive_fffffffff EURUSD.GI,M5: loaded successfully

Вообще даже циклы не перебираются. Порядка нет. Вывод вообще не последовательный.

 
hoz:


Отличная идея))

Я сделал проще, вот так:

Начало в журнале такое:

Вообще даже циклы не перебираются. Порядка нет. Вывод вообще не последовательный.


Что-то вы все усложнили, на этапе проверки все можно сделать в 1-2 строчки, в зависимости от варианта. Можно вообще в ините все выполнить. Порядок вывода не оговаривался.


bool Status_Run = true;


start() {

   if(Status_Run==true) {
      Status_Run  = false;

      Print("---START ---");
      ......

   }
}
 
chief2000:

Что-то вы все усложнили, на этапе проверки все можно сделать в 1-2 строчки, в зависимости от варианта. Можно вообще в ините все выполнить. Порядок вывода не оговаривался.





Вы имеет ввиду ввести флаг, чтоб циклы выполнились один раз и всё? У меня не прекращается выполнение.. Вот в таком варианте:

//+------------------------------------------------------------------+
//|                                            massive_fffffffff.mq4 |
//|                                                              hoz |
//|                                                                  |
//+------------------------------------------------------------------+
#property copyright "hoz"
#property link      ""

int start()
{ 

   bool Status_run = true;
   int Array[4] = {1, 2, 3, 4};
   int x1, x2, x3, x4;
   int Array_Size = ArrayRange(Array, 0);
   
   if (Status_run == true)
   {
      Status_run = false;

      for(x1=0; x1<Array_Size; x1++)
      {
         Print("Combination = ", Array[x1]);

         for(x2=x1+1; x2<Array_Size; x2++)
         {
            Print("Combination = ", Array[x1] + "   " + Array[x2]);

            for(x3=x2+1; x3<Array_Size; x3++)
            {
               Print("Combination = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3]);

               for(x4=x3+1; x4<Array_Size; x4++)
               {
                  Print("Combination = ", Array[x1] + "   " + Array[x2] + "   " + Array[x3] + "   " + Array[x4]);
               }
            }
         }
      }
   }

   return(0);
}

Хотя по сути, код должен отработать как в ИНИТЕ, один раз и всё. Потом сразу буловская переменная Status_run примет значение false и больше условие if не выполнится.. Но у меня не кончается в журнале вывод почему-то.

 
hoz:


Вы имеет ввиду ввести флаг, чтоб циклы выполнились один раз и всё? У меня не прекращается выполнение.. Вот в таком варианте:

Хотя по сути, код должен отработать как в ИНИТЕ, один раз и всё. Потом сразу буловская переменная Status_run примет значение false и больше условие if не выполнится.. Но у меня не кончается в журнале вывод почему-то.


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

PS "Status_run" обязан быть создан до старт()-а, это глобальная переменная.
 

Гуру, подскажите. Ставлю переменную bool Flag=true; в start,

Открываю сделку

if (условие)

{

Opn_S = true;

Flag=false;

}

Возникает вопрос по флагу, если при открытии флаг возвращает false и в условии открытия есть этот флаг. Сколько хранится истина или фальш, переданная флагом, обнуляется ли она на следующий день?

 
Forexman77:

Гуру, подскажите. Ставлю переменную bool=true; в start,

Открываю сделку

if (условие)

{

Opn_S = true;

Flag=false;

}

Возникает вопрос по флагу, если при открытии флаг возвращает false и в условии открытия есть этот флаг. Сколько хранится истина или фальш, переданная флагом, обнуляется ли она на следующий день?


Нет не будет, при каждом новом тике значение Flag будет равно true. https://book.mql4.com/ru/variables/types

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

Или сделать переменную статической - static bool flag=true; .

 
ALXIMIKS:

Нет не будет, при каждом новом тике значение Flag будет равно true. https://book.mql4.com/ru/variables/types

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

Или сделать переменную статической - static bool flag=true; .

Спасибо!
Причина обращения: