Занятие 2

Вход только для группы Мастерская Forex Роботов 3. Для входа пройдите авторизацию.
Аватара пользователя
Николай
Сообщения: 58
Зарегистрирован: 14 ноя 2016, 00:07

Занятие 2

Сообщение Николай » 10 апр 2017, 18:23

Тема занятия:
1) Массивы.
2) Операторы.
3) Функции.
4) Создание собственных функций.
ссылка в вебинарную комнату http://www.webinar.texno-forex.ru/masterskaya3/
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Как и на чем заработать уже за первый месяц и делать это снова и снова Узнайте как
Регистрация и учебные материалы бесплатно.

silver1970
Сообщения: 1
Зарегистрирован: 28 мар 2017, 06:15

Re: Занятие 2

Сообщение silver1970 » 10 апр 2017, 20:10

Выкладываю ДЗ

Код: Выделить всё

//+------------------------------------------------------------------+
//|                                                      Счетчик.mq4 |
//|                        Copyright 2017, MetaQuotes Software Corp. |
//|                                             https:
//+------------------------------------------------------------------+
#property copyright "Copyright 2017, MetaQuotes Software Corp."
#property link      ""
#property version   "1.00"
#property strict

input int a = 10;
input int b = 25;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetTimer(1);
     
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();
     
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
      static int i = 1;
      static int aa = a;
     
      if(a >= b)
      {
         Comment("Неверные Данные");
      } else {
        if(aa <= a)
        {
          i = 1;
        }
        if(aa >= b)
        {
          i = -1;
        }
        Comment("Счетчик = ", aa += i);
      }
  }
//+------------------------------------------------------------------+

Aleks
Сообщения: 3
Зарегистрирован: 01 дек 2016, 20:31

Re: Занятие 2

Сообщение Aleks » 10 апр 2017, 22:57

ДЗ.
У вас нет необходимых прав для просмотра вложений в этом сообщении.

VladimirMMM56
Сообщения: 1
Зарегистрирован: 28 мар 2017, 06:42

Re: Занятие 2

Сообщение VladimirMMM56 » 11 апр 2017, 18:08

Код: Выделить всё

//+------------------------------------------------------------------+
//|                                                      zadanie.mq4 |
//|                                                   Copyright 2017 |
//|                                           https://www.mysite.com
//|                      Vladimir
//+------------------------------------------------------------------+
#property copyright "Copyright 2017"
#property link      "https://www.mysite.com"
#property version   "1.00"
#property strict

extern int a=10; //нижнее значение
extern int b=100;  //верхнее значение
int c=a;          // Переменная счетчика
int s=0;          // Флаг счетчика  если s=0 счетчит считает вверх, если s=1 счетчик считает вниз
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
    EventSetTimer(1);
  // EventSetMillisecondTimer(100);   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();
     
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   
   if (a<10||a>100||b<10||b>100||a>=b)
         {
   Comment ("Не правильный ввод, а и b должны быть от 10 до 100 и а дожна быть меньше b");
         }
   else {           
          Comment (   "C= ",c   );
     if (s==0)                             // Счет идет вверх
               { c=c+1;   
                 if (c>b-1)  s=1;   // Прерброс флага для счета вниз
               }
     else      {c=c-1;
                if (c<a+1)   s=0;   // Прерброс флага для счета вверх
               }
         }
  }
//+------------------------------------------------------------------+

Фёдор
Сообщения: 3
Зарегистрирован: 30 мар 2017, 12:54

Re: Занятие 2

Сообщение Фёдор » 13 апр 2017, 13:21

Выкладываю домашнее задание в архиве.
Home task lesson 2.zip


Также есть вопросы к Валентину по материалу урока:
1). На 2-м уроке Вы написали 3-мерный массив в таком формате:
c[2,10,10]
То есть, номер столбца идёт первым, а на слайде у Вас приводится такой формат:
ms[номер столбца, номер строки]
ms[номер столбца][номер строки]

Какой формат последовательности является правильным и имеет ли это значение?

2). Ещё вопрос по оператору continue. Правильно ли я понял, что при выполнении/невыполнении условий в цикле проход данного цикла считается завершённым? То есть, если у нас в цикле for задано выполнить 100 циклов, а на 50-м цикле у нас какое-то условие выполнилось или не выполнилось в зависимости от заданного условия, то тогда интерпретатор считает данный 50-й проход цикла завершённым и переходит сразу к 51-му, не опрашивая другие условия?
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Аватара пользователя
Николай
Сообщения: 58
Зарегистрирован: 14 ноя 2016, 00:07

Re: Занятие 2

Сообщение Николай » 13 апр 2017, 15:05

Какой формат последовательности является правильным и имеет ли это значение?

ms[номер столбца, номер строки,номер таблици] да имеет значение
https://book.mql4.com/ru/variables/arrays


Оператор continue прекращает исполнение текущей итерации ближайшего оператора цикла while или for. Результатом выполнения оператора continue является переход к следующей итерации ближайшего оператора цикла while или for. Оператор continue может использоваться только в составе тела указанных операторов цикла.
https://book.mql4.com/ru/operators/continue
Как и на чем заработать уже за первый месяц и делать это снова и снова Узнайте как
Регистрация и учебные материалы бесплатно.

владимир-loka
Сообщения: 2
Зарегистрирован: 02 дек 2016, 19:39

Re: Занятие 2

Сообщение владимир-loka » 13 апр 2017, 21:05

ДЗ
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Кирилл
Сообщения: 7
Зарегистрирован: 02 дек 2016, 16:23

Re: Занятие 2

Сообщение Кирилл » 14 апр 2017, 19:14

Вопрос Федору: Что значит в конце программы return ? Я попробовал убрать - ничего не меняется, как считал так и считает.

Lev
Сообщения: 1
Зарегистрирован: 28 мар 2017, 01:58

Re: Занятие 2

Сообщение Lev » 16 апр 2017, 15:30

Код: Выделить всё

void OnTimer()
 {
 double a1=a/b; 
 if (a1==10.0)// проверим условие ввода данных
  // алгоритм счетчика
   {i=i+b*z;
   Comment("i= ",i);
   if (i==(a+k)){z=z*-1;k=k+a*z;}
   }
 else
   {Comment("Условие неверно!");}
 }
У вас нет необходимых прав для просмотра вложений в этом сообщении.

Аватара пользователя
BERSERKER
Сообщения: 6
Зарегистрирован: 02 дек 2016, 13:26

Занятие 2

Сообщение BERSERKER » 17 апр 2017, 19:44

Домашнее задание.

Код: Выделить всё

//+------------------------------------------------------------------+
//|                                                       DomZad.mq4 |
//|                                                        Berserker |
//|                                            http://www.mysite.com |
//+------------------------------------------------------------------+
#property copyright "Berserker"
#property link      "http://www.mysite.com"
#property version   "1.00"
#property strict

 //+------------------Домашнее задание-------------------------+
 extern int a=100; //Верхнее значение
 extern int b=10;  //Нижнее значение
 int c=0;
 int e=0; //Переменная флаг
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   if (a>100){ //Проверяем что бы Верхнее значение не было больше допустимого
    a=100; //Если Верхнее значение больше допустимого то задаем допустимое значение
   }
 
   if (b>=a){ //Проверяем что бы Нижнее значение не было больше Верхнего
       b=a-1; //Если Нижнее значение больше Верхнего то задаем допустимое значение
      }
     
   if (b<10){ //Проверяем что бы Нижнее значение не было Меньше минимально допустимого
       b=10;  //Задаем минимально допустимое Нижнее значение
      }
     
 c=b; //Назначаем начальное значение для начала отсчета
     
   EventSetMillisecondTimer(500);
     

   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- destroy timer
   EventKillTimer();
     
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

   
  }
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {

//+------------------Домашнее задание-------------------------+

 if (e==0){ //Проверяем флаг
   
    if (c<a){ //Считаем от Нижнего к большему
      c=c+1;
 
      }else {

        e=1; //Меняем флаг
       }
   
 }else { //Если условие флага не выполняется то работает вторя часть функции
   
    if (c>b){ //Считаем от большего к меньшему
       c=c-1;
 
     }else {

       e=0; //Меняем флаг
     }
   
   }

 
 Comment(
  "C = ",c,"\n","Флаг = ",e,"\n"
 
 );


  }
   
Жаба - хотя и зверь маленький, но давит не хуже медведя.

Аватара пользователя
Valentin
Администратор
Сообщения: 25
Зарегистрирован: 13 ноя 2016, 22:42

Re: Занятие 2

Сообщение Valentin » 24 апр 2017, 11:26

Кирилл писал(а):Вопрос Федору: Что значит в конце программы return ? Я попробовал убрать - ничего не меняется, как считал так и считает.

Попробую ответить за Федора)))
return используется в конце функции для передачи результата.
если функция void тоесть не выдает результат, начиная с 600 билда return требовался как флаг окончания функции. Сейчас он уже в данном типе функции не нужен, но если установить, благополучно будет обработан.

Аватара пользователя
Valentin
Администратор
Сообщения: 25
Зарегистрирован: 13 ноя 2016, 22:42

Re: Занятие 2

Сообщение Valentin » 24 апр 2017, 11:42

Фёдор писал(а):Также есть вопросы к Валентину по материалу урока:
1). На 2-м уроке Вы написали 3-мерный массив в таком формате:
c[2,10,10]
То есть, номер столбца идёт первым, а на слайде у Вас приводится такой формат:
ms[номер столбца, номер строки]
ms[номер столбца][номер строки]
Какой формат последовательности является правильным и имеет ли это значение?


Значения где столбец где строка не имеет никакого, индекс используется чисто для нашего удобства и имеет относительное значение. Например, если мы решим, что у нас будет идти сначала строка, затем столбец и затем номер страницы и дальше будем придерживаться этого варианта то все будет работать. Хотя когда пишем программы вряд ли кто думает где стока, где столбец.
Обычно мы решаем, что первое значение - это, например, номер по порядку ордера, 2 данные ордера и т.д.
Например у нас есть массив Orders[100,5]; В данном случае я зарезервировал место под 100 ордеров с различными параметрами Так Orders[0,0] - например, номер тикета выбранного (0) ордера, Orders[0,1] цена установки того же ордера, Orders[0,2] - объем лота того же ордера и т.д. Потом берем Orders[1,0] - это будет номер тикета выбранного уже следующего (1) ордера и т.д.
Фёдор писал(а):2). Ещё вопрос по оператору continue.


Этот вопрос рассмотрим на примере на 3 занятии.

Aleks
Сообщения: 3
Зарегистрирован: 01 дек 2016, 20:31

Re: Занятие 2

Сообщение Aleks » 28 апр 2017, 08:16

В решении ДЗ, которое разбирали на 3-м занятии, нет полного соответствия информации в окне графика со счётчиком. Счётчик считает до "100", а в окне отражается на один меньше, до "99". Чтобы в окне отражалось до "100", счёт надо увеличить до 101, но это нарушает условие задачи - считать до 100.

Аватара пользователя
Valentin
Администратор
Сообщения: 25
Зарегистрирован: 13 ноя 2016, 22:42

Re: Занятие 2

Сообщение Valentin » 02 май 2017, 17:44

Если говорить буквально, то да, хотя счетчик и достигает нужного значения, оно не выводится на экран, так как флаг направления счета меняет свое состояние и выполняется операция обратного счета до вывода на экран:
Изображение

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


Вернуться в «Мастерская Forex Роботов 3»

Кто сейчас на конференции

Сейчас этот форум просматривают: Alexa [Bot] и 0 гостей