Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Установил MetaTrader 5? Узнай о нем подробно!
Vladyslav Goshkov
2074
Vladyslav Goshkov 2012.04.16 07:56  
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
69031
Vladimir Pastushak 2012.04.16 08:05  
Спасибо !!! Жаль нету на форуме кнопки спасибо ....
Vladyslav Goshkov
2074
Vladyslav Goshkov 2012.04.16 08:18  
VOLDEMAR:
Спасибо !!! Жаль нету на форуме кнопки спасибо ....
Те не за что. На самом деле тем, кто пытается самостоятельно разобраться, и помогать не в напряг. Удачи.
TarasBY
1739
TarasBY 2012.04.16 10:28  
VOLDEMAR: Теперь в данный код мне нужно дописать условие открытия ордера и само открытия и советник простецкий готов !
Я использую тот же подход в написании советников. Код постоянно модернизируется и проще модернизировать код подключенной к советнику библиотеки, как во всех, использующих эту библиотеку советниках, будет использоваться модернизированный код. Посмотрите мой вариант реализации того же принципа.
TarasBY
1739
TarasBY 2012.04.16 10:34  
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
2074
Vladyslav Goshkov 2012.04.16 10:40  
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 2012.04.16 12:16  

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

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

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


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

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


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

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

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

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