[ARŞİV!] Forumu kirletmemek için herhangi bir acemi sorusu. Profesyonel, kaçırmayın. Sensiz hiçbir yerde - 4. - sayfa 429

 

Merhaba.

Lütfen kodda hangi değişikliklerin yapılması gerektiğini bana bildirin. Böylece histogram sadece düşüş çubukları için değerler görüntüler.

Göstergenin kendisi 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 );
}
 

Güzel gün. Dosya işaretçisi hakkında bir soru... MQL4'te bulunan MQL 4 hakkındaki kitapta. "Standart işlevler " bölümünde, "Dosya işlemleri" bölümünde, bir dosyadan veri okumak ve sembol penceresinde grafik nesneleri görüntülemek için tasarlanmış timetablenews.mq4 komut dosyasının bir örneği vardır:

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

Aşağıda, MQL 4'teki Kitapta bu komut dosyası analiz edilirken, şu ifade verilir: " Belirtilen kontrol (blok 5-6'daki son 2 satır) silinirse, programın yürütülmesi sırasında fazladan bir nesne oluşturulur. Ve ancak bundan sonra while döngüsü sonlandırma koşulu çalışacak ve kontrol 8-9" bloğuna aktarılacaktır.

Doğru mu anladım???... Dosya işaretçisi METİN KARAKTERLERİ ARASINDA DEĞİLDİR (örn: tek | st , burada | bir dosya işaretçisidir), ancak AYRIŞTIRMALI bir işaretçidir, örneğin: te k st , burada k , dosya işaretçisi tarafından vurgulanan " k " karakteridir. Bu, hatların varlığının gerekliliğini açıklar (bkz. s. 164):

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

Gerçekten. Sondan bir önceki yinelemede, LAST nesnesinin oluşturulmasından sonra

2007.05.11 18:30; JPY Endüstriyel üretim

dosya işaretçisi son nesnenin konumundadır, yani:

2007.05.11 18:30; JPY Endüstriyel üretim

(burada o , dosya işaretçisi tarafından vurgulanan " o " sembolüdür). Ardından, while ifadesinin başına denetimi aktarırken, FileIsEnding ( handle ) işlevi açıkça true değerini döndürür , çünkü dosya işaretçisi dosyanın SONUNDA DEĞİL, o dosyanın SON KARAKTERİNDEDİR. Ardından, ilk iki satır yürütüldüğünde, dosya işaretçisi BOŞ bir yere gidecek ve satır yoksa

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

komut dosyası, boş bir açıklama ve 0'a karşılık gelen bir zaman koordinatıyla bir grafik (yani bir satır) oluşturacaktır. " Belirtilen kontrol (blok 5-6'daki son 2 satır) silinirse, programın yürütülmesi sırasında fazladan bir nesne oluşturulacaktır. " ifadesinde kastedilen budur.

Soru : Doğru mu anladım:

a) bir dosya işaretçisinin tanımlanması;

b) " ifadesinin anlamı, eğer belirtilen kontrol (5. bloktaki son 2 satır) silinirse, programın yürütülmesi sırasında fazladan bir nesne oluşturulacaktır. Ve ancak bundan sonra while döngüsü sonlandırma koşulu olacaktır. iş ve kontrol 8-9 bloğa aktarılacak "

P. S. forumu kirletmemek adına şimdiden teşekkürler

 
İnsanlar!!! Lütfen saatlik çubuğu açma işlevini verin (önceki mumun Açılışını belirlemek gerekir), aksi takdirde (TimeMinute( TimeCurrent() )==m && TimeSeconds(TimeCurrent())==n) için nedense çalışmıyor, m=1 n=1 olarak ayarladım.
 
stater :
İnsanlar!!! Lütfen saatlik çubuğu açma işlevini verin (önceki mumun Açılışını belirlemek gereklidir), aksi takdirde (TimeMinute(TimeCurrent())==m && TimeSeconds(TimeCurrent())==n) için nedense çalışmıyor, m=1 n=1 koyuyorum, kusura bakmayın, kusura bakmayın...
https://docs.mql4.com/ru/series
 
cevap için teşekkürler, ancak saatlik mumun açıldığını öğrenmek için hangi fonksiyonun yardımıyla anlamadım ....
 
stater :
cevap için teşekkürler, ancak saatlik mumun açıldığını öğrenmek için hangi fonksiyonun yardımıyla anlamadım ....

iZaman
 
Danışman her zaman 0 hatası veriyor, söyle bana - neden verdiğini nasıl kontrol edeceğim, burayı nasıl bulacağım?
 
FAQ :

iZaman
Sabrınız için teşekkürler!
 
Egori4 :
Danışman her zaman 0 hatası veriyor, söyle bana - neden verdiğini nasıl kontrol edeceğim, burayı nasıl bulacağım?

Hata 0, hata olmamasıdır.

Yazdırmayı bırak (uyarı) =)

 

Bir denklem birkaç kez tekrarlanırsa formülün yazımı nasıl kısaltılır?