подскажите код - страница 2

 

читаю справку, в голове не укладывается работа с массивами.

можно какой нибудь пример, например для лоу сделать.

нужно найти лоу цены со вчера и в течение 365 дней например

 
Stells:

читаю справку, в голове не укладывается работа с массивами.

можно какой нибудь пример, например для лоу сделать.

нужно найти лоу цены со вчера и в течение 365 дней например

Вот, скрипт. Ищет на текущем инструменте Low за год:

//+------------------------------------------------------------------+
//|                                         CopyLow_ArrayMinimum.mq5 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   datetime    yesterday;
   datetime    year_ago;
   double      array_low[];
   MqlDateTime str1;
   int         index;
   
   TimeToStruct(TimeLocal(),str1);
   str1.day--;
   yesterday=StructToTime(str1);
   str1.year--;
   year_ago=StructToTime(str1);
   
   ResetLastError();
   int rezult=CopyLow(Symbol(),Period(),yesterday,year_ago,array_low);
   if(rezult==-1)
     {
      Print("Error CopyLow ",GetLastError());
      return;
     }
   index=ArrayMinimum(array_low,0,WHOLE_ARRAY);
   Print("Low = ",array_low[index]);
  }
//+------------------------------------------------------------------+
 
Karputov Vladimir:

Вот, скрипт. Ищет на текущем инструменте Low за год:

спасибо большое.

 
Stells:

спасибо большое.

Можно ещё приделать такую вещь: определили Low и по этой цене нарисовали горизонтальную линию. Нужно?
 
//+------------------------------------------------------------------+
//|                                         CopyLow_ArrayMinimum.mq5 |
//|                        Copyright 2015, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   datetime    yesterday;
   datetime    year_ago;
   double      array_high[];
   double      array_low[];
   double      array_high2[];
   double      array_low2[];   
   MqlDateTime str1;
   int         index_high,index_low,index_high2,index_low2;
   double srednee_dvizenie;
   TimeToStruct(TimeLocal(),str1);
   str1.day--;
   yesterday=StructToTime(str1);
   str1.year--;
   year_ago=StructToTime(str1);
   
   ResetLastError();
   int rezult_high=CopyHigh(Symbol(),Period(),yesterday,year_ago,array_high);
   if(rezult_high==-1)
     {
      Print("Error CopyLow ",GetLastError());
      return;
     }
   index_high=ArrayMaximum(array_high,0,WHOLE_ARRAY); //  Хай за прошлый год
   Print("High = ",array_high[index_high]);
   
   
    int rezult_low=CopyLow(Symbol(),Period(),yesterday,year_ago,array_low);
   if(rezult_low==-1)
     {
      Print("Error CopyLow ",GetLastError());
      return;
     }
   index_low=ArrayMinimum(array_low,0,WHOLE_ARRAY);//  Лоу за прошлый год
   Print("Low = ",array_low[index_low]);
   
   yesterday=year_ago;
   str1.year--;
   year_ago=StructToTime(str1);
   
   ResetLastError();
   int rezult_high2=CopyHigh(Symbol(),Period(),yesterday,year_ago,array_high2);
   if(rezult_high2==-1)
     {
      Print("Error CopyLow ",GetLastError());
      return;
     }
   index_high2=ArrayMaximum(array_high2,0,WHOLE_ARRAY);//  Хай за позапрошлый год
   Print("High2 = ",array_high2[index_high2]);
   
   
    int rezult_low2=CopyLow(Symbol(),Period(),yesterday,year_ago,array_low2);
   if(rezult_low2==-1)
     {
      Print("Error CopyLow ",GetLastError());
      return;
     }
   index_low2=ArrayMinimum(array_low2,0,WHOLE_ARRAY);//  Лоу за позапрошлый год
   Print("Low2 = ",array_low2[index_low2]); 
    
   //  Среднее движение за 2 прошлых года
   srednee_dvizenie=((array_high[index_high]-array_low[index_low])+(array_high2[index_high2]-array_low2[index_low2]))/2/_Point;
   Print("srednee_dvizenie = ",srednee_dvizenie);
  }

посмотрите пожалуйста, сделал такой код (из вашего кода) для поиска среднегодового движения цены. Считается два последних года.

может можно проще как то ?

можно сделать чтобы в настройках было-за сколько лет мы ищем среднее движение ?

 
Stells:

посмотрите пожалуйста, сделал такой код (из вашего кода) для поиска среднегодового движения цены. Считается два последних года.

может можно проще как то ?

можно сделать чтобы в настройках было-за сколько лет мы ищем среднее движение ?

Можно так. 

А что для Вас означает период "среднегодовое движение"?

  1. От сегодня и назад на 365 дней;
  2. От сегодня и до нового года.
 
Karputov Vladimir:

Можно так. 

А что для Вас означает период "среднегодовое движение"?

  1. От сегодня и назад на 365 дней;
  2. От сегодня и до нового года.

среднегодовое это не за один год;  рассматривается период в несколько лет.

поэтому к вашим пунктам вопросов это не подходит.

допустим в один год дельта (разница между мин. и макс.) - 2000 пунктов

во второй 3000 пунктов,

среднегодовое движение за два года =(2000+3000)/2 .

 
Stells:

среднегодовое это не за один год;  рассматривается период в несколько лет.

поэтому к вашим пунктам вопросов это не подходит.

допустим в один год дельта (разница между мин. и макс.) - 2000 пунктов

во второй 3000 пунктов,

среднегодовое движение за два года =(2000+3000)/2 .

Ясно. Если вводить количество лет, для которых будет вестись расчёт среднегодового движения, нужно будет ввести цикл в котором будет сдвигаться дата и будут получаться High и Low.
 
Karputov Vladimir:
Ясно. Если вводить количество лет, для которых будет вестись расчёт среднегодового движения, нужно будет ввести цикл в котором будет сдвигаться дата и будут получаться High и Low.

тоже для меня сложно,

можете сделать ?

 
Stells:

тоже для меня сложно,

можете сделать ?

Да. Утром.
Причина обращения: