[АРХИВ!] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 4. - страница 457

 
sss2019:

Отображение линий на графике согласно данным из массивов. По алертам видно что массивы заполнены, но линии не отображаются.


Что-то рисует

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Red
#property indicator_color2 Blue
#property indicator_minimum 0
#property indicator_maximum 100

double mass1[];
double mass2[];

extern bool A = false;

void init() {
   SetIndexBuffer(0, mass1);
   SetIndexStyle(0, DRAW_LINE, STYLE_SOLID, 1);
   SetIndexBuffer(1, mass2);
   SetIndexStyle(1, DRAW_LINE, STYLE_SOLID, 1);
}

void start() {
   int limit = Bars - IndicatorCounted();
   int i = 0, g = 0, summ = 0;
   int startbar, endbar, starttime, endtime, lowbarend, lowbarstart, highbarstart, highbarend;
   double low, high;
   int lowsum, highsum;
   starttime = iTime(Symbol(), Period(), i);
   endtime = iTime(Symbol(), Period(), i + 1);
   startbar = iBarShift(Symbol(), PERIOD_M1, starttime, false);
   endbar = iBarShift(Symbol(), PERIOD_M1, endtime, false);
        
   while(i < 5) {
      lowsum = 0;
      highsum = 0;
      if(i != 0) {
         starttime = iTime(Symbol(), Period(), i);
         endtime = iTime(Symbol(), Period(), i + 1);
         startbar = iBarShift(Symbol(), PERIOD_M1, starttime, false);
         endbar = iBarShift(Symbol(), PERIOD_M1, endtime, false);
      }
      else
      {
         starttime = iTime(Symbol(), Period(), i);
         endtime = iTime(Symbol(), Period(), i + 1);
         startbar = iBarShift(Symbol(), PERIOD_M1, TimeCurrent(), false);
         endbar = iBarShift(Symbol(), PERIOD_M1, endtime, false);
      }
                        
      //Alert(TimeToStr(starttime, TIME_DATE|TIME_MINUTES),"   ",TimeToStr(TimeCurrent(), TIME_DATE|TIME_MINUTES));   
      low = iLow(Symbol(), PERIOD_M1, endbar);
      high = iHigh(Symbol(), PERIOD_M1, endbar);
      lowbarend = endbar;
      highbarend = endbar;
      lowbarstart = endbar;
      highbarstart = endbar;
                
      while(endbar >= startbar) {
         if((low - iLow(Symbol(), PERIOD_M1, endbar)) / Point > 0) {
            //Alert(low, " ", iLow(Symbol(), PERIOD_M1, endbar), " ", endbar, " ", startbar);
            low = iLow(Symbol(), PERIOD_M1, endbar);
            lowbarstart = endbar;
         }
         if((iHigh(Symbol(), PERIOD_M1, endbar) - high) / Point > 0) {
            high = iHigh(Symbol(), PERIOD_M1, endbar);
            highbarstart = endbar;
            //Alert(high, " ", iHigh(Symbol(), PERIOD_M1, endbar), " ", endbar, " ", startbar);
         }
         endbar--;
      }
      //Alert(highbarstart, " ", highbarend, " = ", lowbarstart, " ", lowbarend);
                        
      while(lowbarstart < lowbarend + 1) {
         lowsum = lowsum + iVolume(Symbol(), PERIOD_M1, lowbarstart);
         lowbarstart++;
      }
      while(highbarstart < highbarend + 1) {
         highsum = highsum + iVolume(Symbol(), PERIOD_M1, highbarstart);
         highbarstart++;
      }
      mass2[i] = lowsum;
      mass1[i] = highsum;
//      Alert(mass2[i], " ", highsum, " ", ArraySize(mass1));
      //Alert(mass1[i], " ", i);
      i++;
   }
}
 
neon51r:


Можно ли доделать Линии Фибоначчи?


После того как бы на графике начертили эти линии, напротив уровней писались бы автоматически цена этого уровня.

И автоматически она изменяется при растягивании фибы 

 

Конечно можно, а что не получается ?
 
Vinin:


Что-то рисует

 


Спасибо, а что вы исправили, скажите пожалуйста? Сравнивать код у меня плохо получается
 
VladislavVG:
Конечно можно, а что не получается ?

Все)) Я не знаю mql

Подскажите пожалуйста, что ковырять?) и какой файл следует редактировать?

 
neon51r:

Все)) Я не знаю mql

Подскажите пожалуйста, что ковырять?) и какой файл следует редактировать?

На выбор:

  1. Работа

  2. Учебник и Документация
 
Reshetov:

На выбор

Спасибо)

Все решили. Спасибо:%)

 
sss2019:

Спасибо, а что вы исправили, скажите пожалуйста? Сравнивать код у меня плохо получается

double mass1[];
double mass2[];
 

Подскажите , кто нибудь сталкивался с технической реализацией :

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

 
solar:

Подскажите , кто нибудь сталкивался с технической реализацией :

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

Я сталкивался с программой которая отправляла сообщение на ICQ . Страница с файлами и описанием ... https://www.mql5.com/ru/code/10352

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

 
ilunga:
именно

Чуть-чуть видоизменил скрипт:

//+------------------------------------------------------------------------------------------+
//|                                                                     ArraySetAsSeries.mq4 |
//+------------------------------------------------------------------------------------------+
//|                         script program start function                                    |
//+------------------------------------------------------------------------------------------+
//------------------------------------ НАЧАЛО START -------------------------------------- 1 -
int start()                                                              //функция start
  {                                                                      //начало start
   double Timestart=GetTickCount();                                      //переменная, с помощью которой вычисляется время (в милисекундах) начала выполнения скрипта
   double array1[][6];                                                   //объявляем массив-источник (массив, из к-о будут скопированы данные)
   double array2[][6];                                                   //объявляем массив-приемник (массив, куда будут скопированы данные), к-й на
                                                                         //момент объявления заполнен некоторыми данными
   int element_1=ArrayCopyRates(array1);                                 //копируем данные баров текущего графика в массив array1 
   int element_2=ArrayCopy(array2,array1,0,0,WHOLE_ARRAY);               //копируем данные всех баров в пользовательский массив
   bool element_3=ArrayGetAsSeries(array2);                              //проверка: является ли массив array1 массивом-таймсерией
   bool try_1=ArraySetAsSeries(array2,false);                            //устанавливаем НАПРАВЛЕНИЕ индексирования массива  
   bool element_4=ArrayGetAsSeries(array2);                              //проверка: является ли массив array2 массивом-таймсерией
   double element=array2[0][1];                                          //получаем значение цены открытия нулевого бара
//----------------------------------------------------------------------------------------- 2 -
   Comment("\nФункция ArrayCopyRates(array1) вернула: ",element_1,
           "\nФункция ArrayCopy(array2,array1,0,WHOLE_ARRAY) вернула: ",element_2,
           "\nФункция ArrayGetAsSeries(array2) вернула: ",element_3,
           "\nФункция ArraySetAsSeries(array2;false) вернула: ",try_1,
           "\nФункция ArrayGetAsSeries(array2) вернула: ",element_4,
           "\nЦена открытия нулевого бара (т.е. бара с ИНДЕКСОМ 0) равна: ",element,
           "\nСкрипт выполнялся всего ",GetTickCount()-Timestart," миллисекунд, из них: ",
           MathFloor((GetTickCount()-Timestart)/1000)," секунд ",((GetTickCount()-Timestart)/1000-MathFloor((GetTickCount()-Timestart)/1000))*1000,
           " миллисекунд");//печать сообщения на экран
//----------------------------------------------------------------------------------------- 3 -
   return(0);                                                             //выход из start
  }                                                                       //конец start
//-------------------------------------- КОНЕЦ START -------------------------------------- 4 -

В результате получил:


Естественно тут же возник вопрос: в данном случае функцией ArrayCopyRates(array1) я скопировал данные баров текущего графика в двумерный массив array1. После чего в следующей строке функцией ArrayCopy(array2,array1,0,0,WHOLE_ARRAY) я скопировал данные массива array1 в массив array2. После чего функцией ArrayGetAsSeries проверил, является ли массив array2 массивом-таймсерией. И оказалось (как видно из скриншота), что массив таки является массивом-таймсерией, хотя предварительно я его не "обрабатывал" функцией ArraySetAsSeries.

Вопрос: почему в первом случае (предыдущий вопрос) требуется обработка функцией ArraySetAsSeries (чтобы искомый массив был организован как массив-таймсерия), а в этом случае такой обработки не требуется.

P.S. Извините за настойчивость, просто хочется полностью разобраться, чтобы не осталось "пробелов в истории". Благодарю за все предыдущие ответы.