MQL4 ve MQL5 ile ilgili herhangi bir acemi sorusu, algoritmalar ve kodlar hakkında yardım ve tartışma - sayfa 477

 
Artyom Trishkin :

Kendim kontrol ettim - her şey mql4'te derlendi.

Başka bir yerde hata yaptın.

Bu benim kodum değil, bu Vasily Sokolov'un sınıfı. İki kişi bana MT4 altında derlenmediğinden şikayet etti. Ayrıca bir hata alıyorum, build 1090. MT4 altında derleme için tüm sınıfı kontrol edebilir misiniz? Ve sonra bazı saçmalıklar ortaya çıkıyor. Şimdiden teşekkürler.

https://www.mql5.com/en/articles/1334#summary - makalenin altındaki sınıfın kendisi

Рецепты MQL5 - Реализуем ассоциативный массив или словарь для быстрого доступа к данным
Рецепты MQL5 - Реализуем ассоциативный массив или словарь для быстрого доступа к данным
  • 2015.03.23
  • Vasiliy Sokolov
  • www.mql5.com
Эта статья описывает удобный класс для хранения информации - ассоциативный массив или словарь. Благодаря этому классу можно получать доступ к информации по ее ключу. Ассоциативный массив напоминает обычный массив, однако вместо индекса он использует некий уникальный ключ, например, перечисление ENUM_TIMEFRAMES или какой-либо текст. Что...
 
Alexey Volchanskiy :

Bu benim kodum değil, bu Vasily Sokolov'un sınıfı. İki kişi bana MT4 altında derlenmediğinden şikayet etti. Ayrıca bir hata alıyorum, build 1090. MT4 altında derleme için tüm sınıfı kontrol edebilir misiniz? Ve sonra bazı saçmalıklar ortaya çıkıyor. Şimdiden teşekkürler.

https://www.mql5.com/en/articles/1334#summary - makalenin altındaki sınıfın kendisi

derleme
 
Artyom Trishkin :
derleme

Bana nasıl kontrol ettiğini göster.

 
Victor Nikolaev :

Bana nasıl kontrol ettiğini göster.

Vit, sana şimdi göstermeyeceğim - bilgisayarda değil.
İncil'imde bu Vasily sınıfını kullanıyorum. Her iki platform için.
Ve bir şey daha - bu satırları yaklaşmakta olan ilk 4. sınıfının özel bölümüne ekledi. Ve her şey derlendi.
 
Victor Nikolaev :

Bana nasıl kontrol ettiğini göster.

işte sınıf

Dosyalar:
Dictionary.mqh  45 kb
 
Selamlar.
= bilet + sembolü adında bir dosya oluşturuyorum.
Pozisyon açılış fiyatını ve güncel fiyatı, fiyatın konumuna göre “P” veya “L” harfini dosyaya yazarım.
30 dakikadan eski olmayan pozisyonların açılış zamanının verilerinin yazılması gerekmektedir.
Sorun, verilerin yalnızca bir konum için, en sonuncusu için yazılmasıdır.
Dosyaların geri kalanına yazılmaz. Pozisyonlar 4.
Nasıl karar verilir?

datetime t_pre= 0 ,t_lo;
string param= "" ; string sy= "" ; int op=- 1 ; int mn=- 1 ;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTick ()
  {
  PO= MarketInfo ( Symbol (), MODE_POINT );
   vspread=( int ) MarketInfo ( Symbol (), MODE_SPREAD );
   datetime _o_t;
   double _Profit,_lot,_Swap,_pr,_tp,_sl,lA=- 1 ;
   int _Ticket,_Type;
   string _Comm;
   int       i,k= OrdersTotal ();

   if (sy== "0" ) sy= Symbol ();
   for (i= 0 ; i<k; i++) 
     {
       if ( OrderSelect (i, SELECT_BY_POS , MODE_TRADES )) 
        {
         if ( OrderSymbol ()==sy || sy== "" ) 
           {
             if ( OrderType ()== OP_BUY || 
               OrderType ()== OP_SELL ) 
              {
               if (op< 0 || OrderType ()==op) 
                 {
                   if (mn< 0 || OrderMagicNumber ()==mn) 
                    {

                     _o_t= OrderOpenTime ();

                     _pr= OrderOpenPrice ();

                     _Ticket= OrderTicket ();

                     _Type= OrderType ();
                     ИмяФайла=_Ticket+ Symbol ()+ ".txt" ;
                     if (_o_t+ 60 < TimeCurrent ())
                         if (t_pre+ 60 < TimeCurrent () && _o_t+ 1800 > TimeCurrent ())
                          {
                           if (_Type== OP_BUY ){ if ( Bid >_pr)text_= "P" ; else text_= "L" ;}
                           if (_Type== OP_SELL ){ if ( Bid <_pr)text_= "P" ; else text_= "L" ;}
                           t_pre= TimeCurrent ();
                           string Текст,Строка;

                           // Открытие или создание файла и перемещение указателя в конец
                           int Файл= FileOpen (ИмяФайла, FILE_CSV | FILE_READ | FILE_WRITE , " " );
                           if (Файл == - 1 )
                             {
                               Alert ( "Ошибка при открытии файла " ,ИмяФайла);
                               return ;
                             }
                           FileSeek (Файл, 0 , SEEK_END );

                           // Если новый файл записать строку заголовков колонок
                           if ( FileSize (Файл)== 0 ) FileWrite (Файл, "           Время Полу   BID     Цена " );

                           // Сбор информации и запись в файл
                           FileWrite (Файл,
                                     TimeToStr ( TimeCurrent ()),
                                     text_,
                                     dstr( Bid ),
                                     "  " ,
                                     dstr(_pr));
                           FileClose (Файл);
                           Файл= 0 ;

                          }
                    }
                 }
              }
           }
        }
     }

   Comment ( "" );
  }
// Преобразование числа double в строку с запятой или точкой в соответствии с локализацией
string dstr( double Цена)
  {
   if (!RUS) return DoubleToStr (Цена, Digits );
   return StringSetChar ( DoubleToStr (Цена, Digits ), StringFind ( DoubleToStr (Цена, Digits ), "." ), ',' );
  }


 
Artyom Trishkin :

işte sınıf


Öylece. Başka bir hata buldum. Bir zamanlar, geliştirme için MT4 terminalim tam olarak güncellenmedi. Terminal versiyonu 1090 ve editör versiyonu 1562'dir. Union diğer terminallerde iyi derler, editör versiyonu 1601'dir! Muhtemelen, güncelleme sırasında editör zaten açık olduğu için oldu, bu yüzden eski sürüm kaldı. Kahretsin, bu çöplükte yarım gün öldürdüm.

Kısacası, her şey 1601 editörü altında iyi derlenir.

 
lil_lil :
Selamlar.
= bilet + sembolü adında bir dosya oluşturuyorum.
Pozisyon açılış fiyatını ve güncel fiyatı, fiyatın konumuna göre “P” veya “L” harfini dosyaya yazarım.
30 dakikadan eski olmayan pozisyonların açılış zamanının verilerinin yazılması gerekmektedir.
Sorun, verilerin yalnızca bir konum için, en sonuncusu için yazılmasıdır.
Dosyaların geri kalanına yazılmaz. Pozisyonlar 4.
Nasıl karar verilir?

kaçırılan FileSeek - dosyanın sonunu arayın ve FileOpen'dan sonra her seferinde başa yazarsınız

 

Alexey Volchanskiy :

Öylece. Başka bir hata buldum. Bir zamanlar, geliştirme için MT4 terminalim tam olarak güncellenmedi. Terminal versiyonu 1090 ve editör versiyonu 1562'dir. Union diğer terminallerde iyi derler, editör versiyonu 1601'dir! Muhtemelen, güncelleme sırasında editör zaten açık olduğu için oldu, bu yüzden eski sürüm kaldı. Kahretsin, bu çöplükte yarım gün öldürdüm.

Kısacası, 1601 editörü altında her şey iyi derlenir.

işte bu garip ;)

 
STARIJ :

cevapsız FileSeek () - dosyanın sonunu arayın ve FileOpen'dan sonra her seferinde başa yazarsınız

FileSeek var (Dosya, 0 , SEEK_END ); ve her şey dosyaya yeni bir satırdan yazılır.

Sorun şu ki, 4 dosya var ve her biri ayrı bir dosyaya dört pozisyon için veri yazmanız gerekiyor, her dosyanın adında bir pozisyon bileti var ve veriler sadece bir tanesine, son dosyaya, sondaki veriye yazılıyor. konum.