Hatalar, hatalar, sorular - sayfa 2614

 
Andrei Kossarev :
Göstergeden ikili dosya okumak çalışmıyor, danışmandan gelen benzer bir kod sorunsuz çalışıyor!

Büyük olasılıkla, göstergelerdeki ChartScreenShot eşzamansız olarak çalışır.

 
fxsaber :

Büyük olasılıkla, göstergelerdeki ChartScreenShot eşzamansız olarak çalışır.

Kontrol ettim, bu yüzden döngüyü koydum

 
Andrei Kossarev :

Kontrol ettim, bu yüzden döngüyü koydum

Döngünün sonu, dosyanın varlığını garanti etmez.

 

Andrei Kossarev :
Не работает чтение бинарного файла из индикатора, аналогичный код из советника работает без проблем!

void TestPhoto() {
   string name;
   MqlDateTime   dtLocal;
   TimeToStruct ( TimeLocal (), dtLocal);
   string date = IntegerToString (dtLocal.year) + IntegerToString (dtLocal.mon, 2 , '0' ) + IntegerToString (dtLocal.day, 2 , '0' );
   string time = IntegerToString (dtLocal.hour, 2 , '0' ) + "." + IntegerToString (dtLocal.min, 2 , '0' ) + "." + IntegerToString (dtLocal.sec, 2 , '0' );
   name = "ScreenShots/" + date + "/" + _Symbol + "_" +date + "_" + time + ".png" ;
   
   if (! ChartScreenShot ( 0 , name, 1920 , 1200 , ALIGN_RIGHT ))
       return ;

   ResetLastError ();
   
   for ( int i= 0 ; i < 100000 ; i++){
       if ( FileIsExist (name, false ) && FileSize (name) > 0 )
         break ;
   }
   //---
   int flags= FILE_READ | FILE_BIN | FILE_SHARE_READ ;

   //---
   int file= FileOpen (name,flags);
   if (file< 0 ) {
       Print ( "Операция FileOpen неудачна, ошибка " , GetLastError ());
       return ;
}
   uchar photo[];
   FileReadArray (file,photo);
   FileClose (file);
   
   Print ( ArraySize (photo));
}

Kodunuzda hatalar olması sizi rahatsız etmiyor mu?

 ulong    FileSize ( 
   int   file_handle       // handle файла 
   );

FileSize işlevi bir int değişkeni bekler ve siz oraya bir dize koyarsınız...

 
//+------------------------------------------------------------------+
//|                                                         Test.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link        "https://www.mql5.com"
#property version    "1.00"
#property indicator_chart_window
#property indicator_plots    1
#property indicator_buffers 1
#include <Trident\TCoreMain.mqh>
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit ()
  {
   :: EventSetMillisecondTimer ( 500 );
   return ( INIT_SUCCEEDED );
  }
  
   void OnDeinit ( const int reason) {
   :: EventKillTimer ();
}

void OnTimer () {
   :: EventKillTimer ();
   TestPhoto();
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate ( const int rates_total,
                 const int prev_calculated,
                 const datetime &time[],
                 const double &open[],
                 const double &high[],
                 const double &low[],
                 const double &close[],
                 const long &tick_volume[],
                 const long &volume[],
                 const int &spread[])
  {
//---
   
//--- return value of prev_calculated for next call
   return (rates_total);
  }
//+------------------------------------------------------------------+

void TestPhoto() {
   string name;
   MqlDateTime   dtLocal;
   TimeToStruct ( TimeLocal (), dtLocal);
   string date = IntegerToString (dtLocal.year) + IntegerToString (dtLocal.mon, 2 , '0' ) + IntegerToString (dtLocal.day, 2 , '0' );
   string time = IntegerToString (dtLocal.hour, 2 , '0' ) + "." + IntegerToString (dtLocal.min, 2 , '0' ) + "." + IntegerToString (dtLocal.sec, 2 , '0' );
   name = "ScreenShots/" + date + "/" + _Symbol + "_" +date + "_" + time + ".png" ;
   
   if (! ChartScreenShot ( 0 , name, 1920 , 1200 , ALIGN_RIGHT ))
       return ;

   ResetLastError ();
   
   //---
   int flags= FILE_READ | FILE_BIN | FILE_SHARE_READ ;

   //---
   int file= FileOpen (name,flags);
   if (file< 0 ) {
       Print ( "Операция FileOpen неудачна, ошибка " , GetLastError ());
       return ;
   }
   
   for ( int i= 0 ; i < 100000 ; i++){
       if ( FileSize (file) > 0 )
         break ;
   }
   
   uchar photo[];
   FileReadArray (file,photo);
   FileClose (file);
   
   Print ( ArraySize (photo));
}

Düzeltilmiş kod, hala çalışmıyor

 
Andrei Kossarev :

Düzeltilmiş kod, hala çalışmıyor

Kodu iki ayrı işleve bölmeyi deneyin:

1. Dosyayı okumak ve aşağıdaki işlemleri yapmak.

2. Ekran görüntüsü.

Ve sonuç sıfırsa, bayrağı ayarlamayı deneyin. Ve fonksiyon çağrı dizisi, önce bir okuma girişiminde bulunur, ancak okuma bayrak tarafından atlanır, ardından ekran alınır, bayrak çalıştırılır ve bayrak bayrak tarafından değiştirilir. Ve bundan sonra, bir sonraki tikte dosya okunur.

 

Öneri, aracı tarafından değiştirilemeyen ve rollover'lar sırasında korunması gereken kullanıcı bilgilerini depolamak için bir alan daha eklemektir.

Kısacası sadece kullanıcı tarafından değiştirilebilen yok edilemez bir alan.

 
Михаил :

Öneri, aracı tarafından değiştirilemeyen ve rollover'lar sırasında korunması gereken kullanıcı bilgilerini depolamak için bir alan daha eklemektir.

Kısacası sadece kullanıcı tarafından değiştirilebilen yok edilemez bir alan.

artı 100600
 
Vladislav Andruschenko :
artı 100600

olmayacak, MT'nin yeniden yazılması gereken sunucu kısmı, 10+ yıldır bunu yapmadılar, bu yüzden yakın gelecekte böyle olacak, verdiklerini kullanın - bir dosya, global terminal değişkenleri , bir veritabanı

Siparişlerin durumunu bir dosyaya yazıyorum, işte evrensel veritabanımın şablonu https://www.mql5.com/en/forum/85652/page17#comment_12370424

işte geliştiricilerin son önerisi - SQLite DB https://www.mql5.com/en/forum/327940

 
Igor Makanu :

olmayacak, MT'nin yeniden yazılması gereken sunucu kısmı, 10+ yıldır bunu yapmadılar, bu yüzden yakın gelecekte böyle olacak, verdiklerini kullanın - bir dosya, global terminal değişkenleri , bir veritabanı

Siparişlerin durumunu bir dosyaya yazıyorum, işte evrensel veritabanımın şablonu https://www.mql5.com/en/forum/85652/page17#comment_12370424

işte geliştiricilerin son önerisi - SQLite DB https://www.mql5.com/en/forum/327940


Evet, ben de veri tabanında bilgi saklıyorum. Ama ama ama..