[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 455

 
sss2019:

Anzeige von Linien im Diagramm entsprechend den Daten aus den Arrays. Die Warnmeldungen zeigen an, dass die Arrays voll sind, aber die Zeilen werden nicht angezeigt.


Es wird etwas gezeichnet

#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:


Ist es möglich, die Fibonacci-Linien zu vervollständigen?


Sobald diese Linien auf dem Diagramm eingezeichnet sind, wird der Preis dieses Niveaus automatisch gegen die Niveaus geschrieben.

Und sie würde sich automatisch ändern, wenn die Faser gedehnt wird.

Natürlich können Sie das, warum nicht?
 
Vinin:


Etwas malen


Danke, was haben Sie repariert, bitte sagen Sie es mir? Ich bin nicht gut im Vergleichen von Code
 
VladislavVG:
Natürlich können Sie das, warum funktioniert es nicht?

Alle)) Ich weiß nicht, mql

Können Sie mir bitte sagen, was ich bearbeiten soll?) und welche Datei ich bearbeiten soll?

 
neon51r:

Alle)) Ich weiß nicht, mql

Können Sie mir bitte sagen, was ich ausgraben soll?) und welche Datei ich bearbeiten soll?

Sie haben die Wahl:

  1. Arbeit

  2. Arbeitsbuch und Dokumentation
 
Reshetov:

Zur Auswahl stehen.

Dankeschön)

Alle haben entschieden. Vielen Dank:%)

 
sss2019:

Danke, was haben Sie repariert, bitte sagen Sie es mir? Ich bin nicht gut im Vergleichen von Code

double mass1[];
double mass2[];
 

Können Sie uns über die technische Umsetzung dieser Maßnahme informieren?

Wenn die Internetverbindung an der Arbeitsstation unterbrochen wird, sendet das an die Arbeitsstation angeschlossene Telefon oder GSM-Modem (dasselbe) eine SMS-Nachricht?

 
solar:

Können Sie uns über die technische Umsetzung dieser Maßnahme informieren?

Wenn die Internet-Verbindung auf der Workstation verloren geht, dann an der Workstation (das gleiche) Telefon oder GSM-Modem angeschlossen, durchgeführt das Senden von SMS-Nachrichten?

Ich hatte ein Programm, das eine Nachricht an ICQ sendet. Seite mit Dateien und Beschreibung ... https://www.mql5.com/ru/code/10352

Im Code des Expert Advisors können Sie die Funktion zum Senden einer Nachricht bei einer Internetunterbrechung und einer Verbindung zu .... einrichten.

 
ilunga:
genau

Ich habe das Skript ein wenig geändert:

//+------------------------------------------------------------------------------------------+
//|                                                                     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 -

Das Ergebnis ist wie folgt:


Es stellte sich natürlich eine Frage: In diesem Fall habe ich die Daten der Balken im aktuellen Diagramm mit der Funktion ArrayCopyRates(array1) in ein zweidimensionales Array1 kopiert. Dann habe ich in der nächsten Zeile mit der Funktion ArrayCopy(array2,array1,0,0,WHOLE_ARRAY) die Daten von array1 in array2 kopiert. Dann habe ich mit der Funktion ArrayGetAsSeries überprüft, ob array2 eine Array-Zeitreihe ist. Und es stellte sich heraus (wie Sie auf dem Screenshot sehen können), dass das Array ein Zeitreihen-Array ist, obwohl ich es vorher nicht mit der Funktion ArraySetAsSeries "verarbeitet" hatte.

Frage: warum im ersten Fall (vorherige Frage) ich brauchte, um ArraySetAsSeries-Funktion zu verwenden (um mein Array als eine Zeitreihe Array organisiert werden), während in diesem Fall ich nicht solche Verarbeitung benötigen.

P.S. Verzeihen Sie, dass ich darauf bestehe, aber ich möchte es einfach verstehen, damit keine "Lücken in der Geschichte" entstehen. Vielen Dank für alle bisherigen Antworten.

Grund der Beschwerde: