Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Vladyslav Goshkov
2157
Vladyslav Goshkov  
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);
}

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

Vladimir Pastushak
86959
Vladimir Pastushak  
Спасибо !!! Жаль нету на форуме кнопки спасибо ....
Vladyslav Goshkov
2157
Vladyslav Goshkov  
VOLDEMAR:
Спасибо !!! Жаль нету на форуме кнопки спасибо ....
Те не за что. На самом деле тем, кто пытается самостоятельно разобраться, и помогать не в напряг. Удачи.
TarasBY
1740
TarasBY  
VOLDEMAR: Теперь в данный код мне нужно дописать условие открытия ордера и само открытия и советник простецкий готов !
Я использую тот же подход в написании советников. Код постоянно модернизируется и проще модернизировать код подключенной к советнику библиотеки, как во всех, использующих эту библиотеку советниках, будет использоваться модернизированный код. Посмотрите мой вариант реализации того же принципа.
TarasBY
1740
TarasBY  
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);
}
Vladyslav Goshkov
2157
Vladyslav Goshkov  
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);
}
Skander
17
Skander  

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

У меня не большой вопрос. В учебнике Ковалёва по 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
Vladyslav Goshkov
2157
Vladyslav Goshkov  
Skander:

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


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

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


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

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

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

123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий