Профи помогите !!!! - страница 3

 
VOLDEMAR:

В таком исполнении кода компилятор ругается

int Orders (int &n=0, int &b=0, int &s=0, int &bs=0,int &ss=0,int &bl=0,int &sl=0)

Откорректируйте вызов - нужно передавать параметры при вызове функции и сами переменные должны быть описаны во внешней (вызывающей) функции.

int Orders (int &n, int &b, int &s, int &bs,int &ss,int &bl,int &sl)
{
   n=0; b=0; s=0; bs=0; ss=0; bl=0; sl=0;
   for (int i=OrdersTotal()-1; i>=0; i--)
   {if(OrderSelect(i, SELECT_BY_POS))
   {if(OrderSymbol()==Symbol()      )
   {                                                            n ++;    
      if (OrderType()==OP_BUY      &&OrderMagicNumber()==Magic){b ++;}
      if (OrderType()==OP_SELL     &&OrderMagicNumber()==Magic){s ++;}
      if (OrderType()==OP_BUYSTOP  &&OrderMagicNumber()==Magic){bs++;}
      if (OrderType()==OP_SELLSTOP &&OrderMagicNumber()==Magic){ss++;}
      if (OrderType()==OP_BUYLIMIT &&OrderMagicNumber()==Magic){bl++;}
      if (OrderType()==OP_SELLLIMIT&&OrderMagicNumber()==Magic){sl++;}     
   }}}
return(n);
}

и уберите умолчания - это я недоглядел. Вот так правильно.

 
Спасибо !!! Жаль нету на форуме кнопки спасибо ....
 
VOLDEMAR:
Спасибо !!! Жаль нету на форуме кнопки спасибо ....
Те не за что. На самом деле тем, кто пытается самостоятельно разобраться, и помогать не в напряг. Удачи.
 
VOLDEMAR: Теперь в данный код мне нужно дописать условие открытия ордера и само открытия и советник простецкий готов !
Я использую тот же подход в написании советников. Код постоянно модернизируется и проще модернизировать код подключенной к советнику библиотеки, как во всех, использующих эту библиотеку советниках, будет использоваться модернизированный код. Посмотрите мой вариант реализации того же принципа.
 
VladislavVG:

Откорректируйте вызов - нужно передавать параметры при вызове функции и сами переменные должны быть описаны во внешней (вызывающей) функции.

и уберите умолчания - это я недоглядел. Вот так правильно.

Такой подход написания (конкретной задачи) немножко через одно место... Элегантнее записать так:

int Orders (int& MyOrders[])
{
   ArrayInicialize (MyOrders, 0);
   int n = 0;
   for (int i=OrdersTotal()-1; i>=0; i--)
   {if(OrderSelect(i, SELECT_BY_POS))
   {if (OrderMagicNumber() != Magic) continue;
    if(OrderSymbol()==Symbol())
   { 
      MyOrders[OrderType()]++;
      n++;   
   }}}
return(n);
}
 
TarasBY:

Такой подход написания (конкретной задачи) немножко через одно место... Элегантнее записать так:

А, походу, Вы не читатель, а писатель ;) - дайте себе труд прочитать ветку сначала. Например, с первой страницы ;) ....... И заодно мои комменты по стилю программирования - это плохой стиль.

int Orders (int& MyOrders[])
{
   ArrayInicialize (MyOrders, 0);
   for (int i=OrdersTotal()-1; i>=0; i--)
   {if(OrderSelect(i, SELECT_BY_POS))
   {if(OrderSymbol()==Symbol()      )
   { 
      MyOrders[OrderType()]++;
      n++;   
   }}}
return(n);
}
 

Доброго времени суток всем.

У меня не большой вопрос. В учебнике Ковалёва по MQL4 есть эксперт(newbar.mq4), который находит и выводит на экран минимальное и максимальное значения цены среди последних сформировавшихся n баров. Я его прикрепил. Вот он:


Мне здесь всё понятно кроме одного момента. А именно: в начале пользовательской функции есть строка :

static datetime New_Time=0;

Ведь это означает, что на каждом тике при обращении к пользовательской функции переменная New_Time должна обнуляться( поэтому получается, что нет смысла делать переменную New_Time статической )

А значит условие if(New_Time!=Time[0]) на каждом тике будет истинным. А раз так, то переменная New_Bar на каждом тике будет принимать значение true.

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

Я подумал, что это описка и нужно написать: static datetime New_Time; (т.е. без ноля). Тогда при объявлении переменной New_Time она по умолчанию будет инициализирована нолём, а при следующих обращениях к пользовательской функции переменная New_Time обнуляться не будет.

Но потом оказалось, эксперт прекрасно работает в обоих вариантах:

и с static datetime New_Time=0; и с static datetime New_Time;

Получается, что программа обращается к строке static datetime New_Time=0; только один раз, а начиная со второго тика просто пропускает эту строку.

Объясните, пожалуйста, почему? В учебнике про это не написано.

Файлы:
newbar.mq4  3 kb
 
Skander:

Доброго времени суток всем.


Получается, что программа обращается к строке static datetime New_Time=0; только один раз, а начиная со второго тика просто пропускает эту строку.

Объясните, пожалуйста, почему? В учебнике про это не написано.


https://docs.mql4.com/ru/basis/variables/static
 
Кажется дошло, спасибо.
 

Здравствуйте.

Я заметил, что при использовании функции ArrayMaximum, например в таком виде: ArrayMaximum(High,Quant_Bars,1). Если попадаются несколько элементов с одинаковыми значениями(разумеется, если эти значения в массиве максимальны), то функция возвращает индекс элемента, имеющего наименьший индекс. Проще говоря, выбирает из этих нескольких максимальных тот, который первый попался. Скажите так всегда происходит или нет?

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