[ARCHIVE !] Toute question de débutant, pour ne pas encombrer le forum. Professionnels, ne passez pas à côté. Nulle part sans toi - 4. - page 455

 
sss2019:

Affichez des lignes sur le graphique en fonction des données des tableaux. Les alertes indiquent que les tableaux sont pleins, mais les lignes ne sont pas affichées.


Quelque chose est en train d'être dessiné

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


Est-il possible de compléter les lignes de Fibonacci?


Une fois que ces lignes ont été tracées sur le graphique, le prix de ce niveau sera automatiquement écrit contre les niveaux.

Et cela changerait automatiquement lorsque la fibre est étirée.

Bien sûr que vous pouvez, pourquoi pas ?
 
Vinin:


Dessiner quelque chose


Merci, et qu'avez-vous réparé, dites-le moi s'il vous plaît ? Je ne suis pas doué pour comparer les codes
 
VladislavVG:
Bien sûr que vous pouvez, pourquoi cela ne fonctionne-t-il pas ?

Tout le monde)) Je ne connais pas mql

Pouvez-vous me dire ce qu'il faut modifier ? et quel fichier je dois modifier ?

 
neon51r:

Tout le monde)) Je ne connais pas mql

Pouvez-vous me dire ce qu'il faut creuser ?) et quel fichier je dois modifier ?

Vous avez le choix :

  1. Travail

  2. Tutoriel et documentation
 
Reshetov:

A choisir.

Merci)

Tous ont décidé. Merci :%)

 
sss2019:

Merci, et qu'avez-vous réparé, dites-le moi s'il vous plaît ? Je ne suis pas doué pour comparer les codes

double mass1[];
double mass2[];
 

Pouvez-vous nous conseiller sur la mise en œuvre technique de cette mesure ?

Si la connexion internet du poste de travail est perdue, alors le téléphone ou le modem gsm connecté au poste de travail (le même) enverra un message sms ?

 
solar:

Pouvez-vous nous conseiller sur la mise en œuvre technique de cette mesure ?

Si la connexion Internet sur la station de travail est perdue, puis connecté à la station de travail (le même) téléphone ou gsm-modem, a effectué l'envoi de messages SMS ?

J'avais un programme qui envoie un message à ICQ. Page avec fichiers et description ... https://www.mql5.com/ru/code/10352

Dans le code du conseiller expert, vous pouvez placer la fonction d'envoi d'un message lorsque l'internet s'interrompt et se connecte à .....

 
ilunga:
exactement

J'ai modifié un peu le 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 -

Le résultat est le suivant :


Une question s'est naturellement posée : Dans ce cas, j'ai copié les données des barres du graphique actuel dans un tableau bidimensionnel array1 en utilisant la fonction ArrayCopyRates(array1). Puis dans la ligne suivante avec la fonction ArrayCopy(array2,array1,0,0,WHOLE_ARRAY) j'ai copié les données de array1 dans array2. Ensuite, en utilisant la fonction ArrayGetAsSeries, j'ai vérifié si array2 est un array-timeseries. Et il s'est avéré (comme vous pouvez le voir sur la capture d'écran), que le tableau est un tableau de séries temporelles, même si je ne l'avais pas "traité" avec la fonction ArraySetAsSeries auparavant.

Question: pourquoi dans le premier cas (question précédente) j'ai dû utiliser la fonction ArraySetAsSeries (pour que mon tableau soit organisé comme un tableau de séries temporelles), alors que dans ce cas je n'ai pas besoin d'un tel traitement.

P.S. Désolé d'insister, je veux juste le comprendre complètement, afin de ne pas laisser de "trous dans l'histoire". Merci pour toutes les réponses précédentes.

Raison: