[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate oltre. Da nessuna parte senza di te - 4. - pagina 455

 
sss2019:

Visualizza le linee sul grafico in base ai dati delle matrici. Gli avvisi mostrano che gli array sono pieni, ma le linee non vengono visualizzate.


Qualcosa è stato disegnato

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


È possibile completare le linee di Fibonacci?


Una volta che queste linee sono state disegnate sul grafico, il prezzo di quel livello verrebbe automaticamente scritto contro i livelli.

E cambierebbe automaticamente man mano che la fibra si allunga

Certo che puoi, perché no?
 
Vinin:


Disegnare qualcosa


Grazie, cosa hai risolto per favore dimmi? Non sono bravo a confrontare il codice
 
VladislavVG:
Certo che puoi, perché non funziona?

Tutti)) Non conosco mql

Potete dirmi cosa devo modificare?) e quale file devo modificare?

 
neon51r:

Tutti)) Non conosco mql

Puoi dirmi per favore cosa devo scavare?) e quale file devo modificare?

La vostra scelta:

  1. Lavoro

  2. Tutorial e documentazione
 
Reshetov:

Da scegliere.

Grazie)

Tutto deciso. Grazie:%)

 
sss2019:

Grazie, e cosa hai risolto, per favore dimmi? Non sono bravo a confrontare il codice

double mass1[];
double mass2[];
 

Potete consigliarmi sull'implementazione tecnica di questo?

Se la connessione internet sulla stazione di lavoro viene persa, allora il telefono o il modem gsm collegato alla stazione di lavoro (lo stesso) invierà un messaggio sms?

 
solar:

Potete consigliarmi sull'implementazione tecnica di questo?

Se la connessione a Internet sulla stazione di lavoro è persa, poi collegato alla stazione di lavoro (lo stesso) telefono o gsm-modem, eseguito l'invio di messaggi SMS?

Avevo un programma che inviava un messaggio a ICQ. Pagina con file e descrizione ... https://www.mql5.com/ru/code/10352

Nel codice dell'Expert Advisor si può porre la funzione di invio di un messaggio quando internet si interrompe e si connette ....

 
ilunga:
esattamente

Ho modificato un po' lo script:

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

Il risultato è il seguente:


È sorta naturalmente una domanda: in questo caso ho copiato i dati delle barre del grafico corrente in un array1 bidimensionale utilizzando la funzione ArrayCopyRates(array1). Poi nella linea successiva con la funzione ArrayCopy(array2,array1,0,0,WHOLE_ARRAY) ho copiato i dati dell'array1 nell'array2. Poi, usando la funzione ArrayGetAsSeries, ho controllato se array2 è un array-timeseries. E si è scoperto (come potete vedere dallo screenshot), che l'array è un array di serie temporali, anche se non l'avevo "elaborato" con la funzione ArraySetAsSeries prima.

Domanda: perché nel primo caso (domanda precedente) avevo bisogno di usare la funzione ArraySetAsSeries (per organizzare il mio array come un array di serie temporali), mentre in questo caso non ho bisogno di tale elaborazione.

P.S. Scusate l'insistenza, voglio solo capirlo completamente, in modo che non rimangano "vuoti nella storia". Grazie per tutte le risposte precedenti.