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

 

Salve.

Potete dirmi quali modifiche devono essere apportate al codice. Voglio che l'istogramma mostri solo i valori delle barre ribassiste.

L'indicatore stesso https://www.mql5.com/ru/code/8920

int start()
{
    if (OpenTime != iOpen(Symbol(), PERIOD_M1, 0))
    {
        OpenTime = iOpen(Symbol(), PERIOD_M1, 0);

        int n, MaxVolume;
        double max = iHigh(Symbol(), PERIOD_M1, iHighest(Symbol(), PERIOD_M1, MODE_HIGH, MinutesCount, 0));
        double min = iLow(Symbol(), PERIOD_M1, iLowest(Symbol(), PERIOD_M1, MODE_LOW, MinutesCount, 0));
        int items = MathRound((max-min) / PricePoint);

        if (max == 0)
        {
            Alert("There is no minutes data. Please download M1.");
            return (0);
        }

        ArrayResize(Hist, items);      
        ArrayInitialize(Hist, 0);
        for (int i = 1; i <= MinutesCount; i++)
        {
            n = MathRound((iClose(Symbol(), PERIOD_M1, i)-min) / PricePoint);
            Hist[n] += (iVolume(Symbol(), PERIOD_M1, i));    
        }

        MaxVolume = Hist[ArrayMaximum(Hist)];
        DeleteObjects();
        for (i = 0; i <= items; i++)
        {
            DrawLine(i, min + i*PricePoint, Hist[i], MaxVolume);
        }
    }
        return(0);
}
 

Buon pomeriggio. Domanda su un puntatore di file... Nel libro MQL4, che si trova all'indirizzo MQL4.community, nella sezione "Standard Functions", c'è un esempio dello script "File Operations", che è destinato a leggere dati da un file e a visualizzare oggetti grafici in una finestra simbolo:

//--------------------------------------------------------------------
// timetablenews.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------- 1 --
int start()                            // Спец. функция start
  {
//--------------------------------------------------------------- 2 --
   int Handle,                         // Файловый описатель
       Stl;                            // Стиль вертикальной линии
   string File_Name="News.csv",        // Имя файла
          Obj_Name,                    // Bмя объекта
          Instr,                       // Название валюты
          One,Two,                     // 1я и 2я чать названия инстр.
          Text,                        // Текст описания события
          Str_DtTm;                    // Дата и время события(строка)
   datetime Dat_DtTm;                  // Дата и время события(дата)
   color Col;                          // Цвет вертикальной линии
//--------------------------------------------------------------- 3 --
   Handle=FileOpen(File_Name,FILE_CSV|FILE_READ,";");// Открытие файла
   if(Handle<0)                        // Неудача при открытии файла
     {
      if(GetLastError()==4103)         // Если файла не существует,..
         Alert("Нет файла с именем ",File_Name);//.. извещаем трейдера 
      else                             // При любой другой ошибке..
         Alert("Ошибка при открытии файла ",File_Name);//..такое сообщ
      PlaySound("Bzrrr.wav");          // Звуковое сопровождение
      return;                          // Выход из start()      
     }
//--------------------------------------------------------------- 4 --
   while(FileIsEnding(Handle)==false)// До тех пор, пока файловый ..
     {                                // ..указатель не в конце файла
      //--------------------------------------------------------- 5 --
      Str_DtTm =FileReadString(Handle);// Дата и время события(дата)
      Text     =FileReadString(Handle);// Текст описания события
      if(FileIsEnding(Handle)==true)   // Файловый указатель в конце
         break;                        // Выход из чтения и рисования
      //--------------------------------------------------------- 6 --
      Dat_DtTm =StrToTime(Str_DtTm);   // Преобразование типа данных
      Instr    =StringSubstr(Text,0,3);// Извлекаем первые 3 символа
      One=StringSubstr(Symbol(),0,3);// Извлекаем первые 3 символа
      Two=StringSubstr(Symbol(),3,3);// Извлекаем вторые 3 символа
      Stl=STYLE_DOT;                   // Для всех - стиль пунктир
      Col=DarkOrange;                  // Для всех - цвет такой
      if(Instr==One || Instr==Two)     // А для событий по нашему ..
        {                             // .. финансовому инструменту..
         Stl=STYLE_SOLID;              // .. такой стиль..
         Col=Red;                      // .. и такой цвет верт. линии
        }
      //--------------------------------------------------------- 7 --
      Obj_Name="News_Line  "+Str_DtTm;     // Имя объекта
      ObjectCreate(Obj_Name,OBJ_VLINE,0,Dat_DtTm,0);//Создаем объект..
      ObjectSet(Obj_Name,OBJPROP_COLOR, Col);       // ..и его цвет,..
      ObjectSet(Obj_Name,OBJPROP_STYLE, Stl);       // ..стиль..
      ObjectSetText(Obj_Name,Text,10);              // ..и описание 
     }
//--------------------------------------------------------------- 8 --
   FileClose( Handle );                // Закрываем файл
   PlaySound("bulk.wav");              // Звуковое сопровождение
   WindowRedraw();                     // Перерисовываем объекты
   return;                             // Выход из start()
  }
//--------------------------------------------------------------- 9 --

Di seguito, quando si analizza questo script nel libro su MQL4, viene data la seguente frase: "se il controllo specificato (le ultime 2 righe del blocco 5-6) viene rimosso, un oggetto extra verrà creato a runtime. E solo dopo questo, la condizione di fine del ciclo while scatterà e il controllo verrà passato al blocco 8-9".

Ho capito bene? Un puntatore a file NON è INFLUITO DA SEGNI DI TESTO (per esempio: testo| dove | è un puntatore a file), ma è un puntatore CON ESPRESSIONE, per esempio: testo dove k è il carattere "a", k-esimo è evidenziato da un puntatore a file. Questo spiega la necessità delle corde (vedi p.164):

      if(FileIsEnding(Handle)==true)   // Файловый указатель в конце
         break;                        // Выход из чтения и рисования
      //--------------------------------------------------------- 6 --

Infatti. Alla penultima iterazione, dopo aver creato l'ULTIMO oggetto

2007.05.11 18:30;JPY

il puntatore del file è nella posizione dell'ultimo oggetto, cioè

2007.05.11 18:30;JPYFabbricazione industriale

(dove o è il carattere" o", k è l'indice del file). Poi, quando si passa il controllo all'intestazione dell'istruzione while, la funzione FileIsEnding(handle) restituirà ovviamente true, perché il puntatore del file NON è alla fine del file, ma all'ULTIMO carattere di quel file. Poi, quando le prime due linee vengono eseguite, il puntatore del file si sposta nello spazio vuoto e se non ci sono linee

      if(FileIsEnding(Handle)==true)   // Файловый указатель в конце
         break;                        // Выход из чтения и рисования
      //--------------------------------------------------------- 6 --

lo script creerà un grafico (cioè una linea) con una descrizione vuota e una coordinata temporale che corrisponde a 0. Questo è ciò che si intende nella frase: "se il controllo specificato (le ultime 2 linee nel blocco 5-6) viene rimosso, allora un oggetto extra verrà creato a runtime. "

Domanda: ho capito bene:

a) la definizione di un puntatore di file;

b) il significato della frase "Se il controllo specificato (le ultime 2 righe del blocco 5-6) viene cancellato, allora un oggetto extra verrà creato all'esecuzione del programma.E solo dopo che la condizione di fine del ciclo while sarà attivata e il controllo sarà passato al blocco 8-9".

P.S. Per non sporcare il forum, vi ringrazio in anticipo per la vostra risposta

 
Gente!!! Per favore datemi la funzione per aprire la barra delle ore (ho bisogno di determinare l'apertura della candela precedente) e se (TimeMinute(TimeCurrent())==m && TimeSeconds(TimeCurrent())==n) per qualche ragione non funziona mettendo m=1 n=1 ma vi prego, a chi importa...
 
stater:
Gente!!! Per favore datemi la funzione per aprire la barra delle ore (ho bisogno di determinare l'apertura della candela precedente) e se (TimeMinute(TimeCurrent())==m && TimeSeconds(TimeCurrent())==n) per qualche ragione non funziona mettendo m=1 n=1 ma vi prego, a chi importa...
https://docs.mql4.com/ru/series
 
grazie per il tuo feedback, ma non capisco quale funzione viene utilizzata per sapere se una candela oraria si è aperta....
 
stater:
grazie per la risposta, ma non capisco quale funzione viene utilizzata per sapere se una candela oraria si è aperta....

iTime
 
Il consulente continua a dare l'errore 0, potete dirmi come controllare cosa lo causa, come trovare questo posto?
 
FAQ:

iTime
Grazie per la vostra pazienza!
 
Egori4:
EA continua a dare l'errore 0, consigli - come controllare cosa lo sta causando, come trovare questo posto?

L'errore 0 è che non ci sono errori.

Smettere di fare la stampa (allarme) =)

 

come si abbrevia la scrittura di una formula se un'equazione viene ripetuta più volte?