Hata Kodu 5004 - sayfa 3

 
RaptorUK :

Ekli dosya yoktu. . .

Okumaya çalıştığınız dosyanın gerçekten var olduğunu onayladınız mı? lütfen doğru klasöre bakın ve kontrol edin. . . başka bir şey, neden bir dosyadan OKUMAK için filewriting() adlı bir işleve sahipsiniz?


Sevgili RaptorUK,

Evet, DAT dosyasının MQL4/files klasöründe olduğunu onaylayabilirim. Aslında, fileopen'ın başarılı olup olmadığını ve çoğu zaman başarılı olup olmadığını (%90) ve %10'unun açılamadığını ve 5004 hata kodu oluşturup oluşturmadığını bir koşul koyduğumu bildirdim.

Dosya açma işlemi başarısız olduğunda filewriting() işlevi çağrılır. Ardından, işlev dosya yazma bir dosya oluşturmaya çalışır (yazmak için açılır) ve işlevin sonunda dosya kapatma işlemini yapar.

Dosyayı Print() deyiminden MQL4\logs klasöründen ekledim. "Dosya Seç" düğmesine tıkladım ve dosya adının görüntülendiğini görebiliyordum.

Sevgilerimle,

Yükselen ateş

Dosyalar:
 
raisingfire :


Sevgili RaptorUK,

Evet, DAT dosyasının MQL4/files klasöründe olduğunu onaylayabilirim. Aslında, fileopen'ın başarılı olup olmadığını ve çoğu zaman başarılı olup olmadığını (%90) ve %10'unun açılamadığını ve 5004 hata kodu oluşturup oluşturmadığını bir koşul koyduğumu bildirdim.

Dosya açma işlemi başarısız olduğunda filewriting() işlevi çağrılır. Ardından, işlev dosya yazma bir dosya oluşturmaya çalışır (yazmak için açılır) ve işlevin sonunda dosya kapatma işlemini yapar.

Dosyayı Print() deyiminden MQL4\logs klasöründen ekledim. "Dosya Seç" düğmesine tıkladım ve dosya adının görüntülendiğini görebiliyordum.

Sevgilerimle,

Yükselen ateş

Bu dosyalar nereden geliyor? onları ne yazar?
 
RaptorUK :
Bu dosyalar nereden geliyor? onları ne yazar?

Sevgili RaptorUK,

Tüm DAT dosyaları, her pozisyon açtığımızda belirli göstergelerin başlangıç değerlerini tutan geçici dosyalardır. Bunları oluşturduk ve programlarımızda kullandık.

Dosyayı yazmak üzere açmak için standart işlevi kullanıyoruz:

fhandle=FileOpen(mf, FILE_BIN|FILE_WRITE );

Geçici dosyalara standart dizi yazma (DAT):

FileWriteArray(fhandle, mpara, 0, maxori); // mpara dizidir, Maxori dizinin maksimum boyutudur

Standart dosya kapatma işlevi:

FileClose(fhandle);

Yardımın için teşekkürler.


Saygılarımızla,

Yükselen ateş

 
raisingfire :

Sevgili RaptorUK,

Tüm DAT dosyaları, her pozisyon açtığımızda belirli göstergelerin başlangıç değerlerini tutan geçici dosyalardır. Bunları oluşturduk ve programlarımızda kullandık.

Dosyayı yazmak üzere açmak için standart işlevi kullanıyoruz:

fhandle=DosyaOpen(mf, FILE_BIN|FILE_WRITE);

Geçici dosyalara standart dizi yazma (DAT):

FileWriteArray(fhandle, mpara, 0, maxori); // mpara dizidir, Maxori dizinin maksimum boyutudur

Standart dosya kapatma işlevi:

FileClose(fhandle);


Tamam, ama aslında soruma cevap vermedin. . . bunları okumaya çalışan aynı EA tarafından mı yazılmışlar? veya farklı bir EA, Komut Dosyası veya Gösterge?
 
RaptorUK :

Tamam, ama aslında soruma cevap vermedin. . . bunları okumaya çalışan aynı EA tarafından mı yazılmışlar? veya farklı bir EA, Komut Dosyası veya Gösterge?


Dosya Yazma işlevi aynı EA'dadır . Her seferinde bir "FILEOPEN" yayınlıyoruz, onunla belirli bir görevi yaptıktan sonra daima "FILECLOSE" ile takip ediyoruz. Dolayısıyla açılmaya çalışılan kilitli dosyada bir sorun olduğunu düşünmüyorum.

Uzun zaman önce, kilitli bir dosyanın okunmaya çalışıldığı böyle bir problemimiz vardı. Ve MT4 bunu günlük dosyasında otomatik olarak bildirdi. Böylece, 1 veya 2 gün sonra, Günlükler ve geçmiş klasörleri, bu raporlarla dolu olarak çok büyük (yüzlerce Mbyte) hale geldi. Ardından, her FILEOPEN yaptığımızda bir FILECLOSE veririz. Sorun çözüldü ve günlükler ve geçmiş klasörleri artık hiç büyük olmadı. Şimdi, birleştirilmiş günlük ve geçmiş klasörleri yalnızca 100 Kbayttan daha azını içeriyor (açılmaya devam eden 5004 hata koduna rağmen).


Teşekkürler,

Yükselen ateş

 
raisingfire :

Dosya Yazma işlevi aynı EA'dadır. Her seferinde bir "FILEOPEN" yayınlıyoruz, onunla belirli bir görevi yaptıktan sonra daima "FILECLOSE" ile takip ediyoruz. Dolayısıyla açılmaya çalışılan kilitli dosyada bir sorun olduğunu düşünmüyorum.

Uzun zaman önce, kilitli bir dosyanın okunmaya çalışıldığı böyle bir problemimiz vardı. Ve MT4 bunu günlük dosyasında otomatik olarak bildirdi. Böylece, 1 veya 2 gün sonra, Günlükler ve geçmiş klasörleri, bu raporlarla dolu olarak çok büyük (yüzlerce Mbyte) hale geldi. Ardından, her FILEOPEN yaptığımızda bir FILECLOSE veririz. Sorun çözüldü ve günlükler ve geçmiş klasörleri artık hiç büyük olmadı. Şimdi, birleştirilmiş günlük ve geçmiş klasörleri yalnızca 100 Kbayttan daha azını içeriyor (açılmaya devam eden 5004 hata koduna rağmen).

Tamam bilgi için teşekkürler. Fikirlerim bitti. . . Şimdi önerebileceğim tek şey, burada yayınlayabileceğiniz ve bir Hizmet Masası biletinin parçası olarak MetaQuotes'a gönderebileceğiniz sorunu yeniden üreten bir test EA'sı oluşturmak ve onlardan araştırmalarını istemek.
 
RaptorUK :
Tamam bilgi için teşekkürler. Fikirlerim bitti. . . Şimdi önerebileceğim tek şey, burada yayınlayabileceğiniz ve bir Hizmet Masası biletinin parçası olarak MetaQuotes'a gönderebileceğiniz sorunu yeniden üreten bir test EA'sı oluşturmak ve onlardan araştırmalarını istemek.


Sevgili RaptorUK,


Yine de tüm yardımlarınız ve bilgileriniz için teşekkür ederim. Bana söylediklerini yapmaya çalışacağım.

Bir kez daha teşekkür ederim.


Saygılarımızla,

 
//+------------------------------------------------------------------+
//| expert count strategy open position function  (closedPos)          |
//+------------------------------------------------------------------+
void closedPos() {  

   int file=FileOpen("hist0935.csv",FILE_WRITE|FILE_CSV);
   
  
      
for(int i=OrdersHistoryTotal()-1; i>=0; i--) {

int file=FileOpen("hist0935.csv",FILE_READ|FILE_WRITE|FILE_CSV);

ResetLastError();
file=FileOpen("hist0935.csv",FILE_READ|FILE_WRITE|FILE_CSV);


      OrderSelect(i, SELECT_BY_POS, MODE_HISTORY); 

  if (file != INVALID_HANDLE){    

   PrintFormat("%s file is available for writing",file);
  
  
     
      FileWrite(file,OrderTicket(),OrderClosePrice(),OrderCloseTime());
      
      //--- close the file
     Print("error="+GetLastError());
      FileClose(file);
      PrintFormat("%s file is closed",file);
       
  }else{
      Alert("hist0935 Events File Error.",GetLastError());
   }
  
   }        
 // return();
}
 
raisingfire :

Sevgili RaptorUK,


Yine de tüm yardımlarınız ve bilgileriniz için teşekkür ederim. Bana söylediklerini yapmaya çalışacağım.

Bir kez daha teşekkür ederim.


Saygılarımızla,



samoye :

5004 hatasının bir çözümü var mı lütfen? Bir dosyaya yazmaya çalışırken aynı hata mesajını alıyorum.

 //+------------------------------------------------------------------+
//| expert count strategy open position function  (openPos)          |
//+------------------------------------------------------------------+
void closedPos() {  

   int file= FileOpen ( "hist0935.csv" , FILE_WRITE | FILE_CSV );
   
  
      
for ( int i=OrdersHistoryTotal()- 1 ; i>= 0 ; i--) {

int file= FileOpen ( "hist0935.csv" , FILE_READ | FILE_WRITE | FILE_CSV );

ResetLastError ();
file= FileOpen ( "hist0935.csv" , FILE_READ | FILE_WRITE | FILE_CSV );


       OrderSelect (i, SELECT_BY_POS, MODE_HISTORY); 
//Print("OrderClosePrice()= " +OrderClosePrice()+"OrderCloseTime()= " + OrderCloseTime()+"OrderComment()= " + OrderComment()+ "OrderCommission()= " +OrderCommission()+ "OrderExpiration()= " +OrderExpiration()+ "OrderLots()= " +OrderLots()+ "OrderMagicNumber()= " +OrderMagicNumber()+ "OrderOpenPrice()= " +OrderOpenPrice()+ "OrderOpenTime()= " +OrderOpenTime()+ "OrderProfit()= " +OrderProfit()+ "OrderStopLoss()= " +OrderStopLoss()+ "OrderSwap()= " +OrderSwap()+ "OrderSymbol()= " +OrderSymbol()+ "OrderTakeProfit()= " +OrderTakeProfit()+ "OrderTicket()= " +OrderTicket()+ "OrderType()= " +OrderType() ); 
 

   if (file != INVALID_HANDLE ){    

   PrintFormat ( "%s file is available for writing" ,file);
  
   
       //FileWrite(file,OrderClosePrice(),OrderCloseTime(), OrderComment(),OrderCommission(),OrderExpiration(),OrderLots(),OrderMagicNumber(),OrderOpenPrice(),OrderOpenTime(),OrderProfit(),OrderStopLoss(),OrderSwap(),OrderSymbol(),OrderTakeProfit(),OrderTicket(),OrderType());
     
       FileWrite (file,OrderTicket(),OrderClosePrice(),OrderCloseTime());
      
       //--- close the file
     Print ( "error=" + GetLastError ());
       FileClose (file);
       PrintFormat ( "%s file is closed" ,file);
       
  } else {
       Alert ( "hist0935 Events File Error." , GetLastError ());
   }
  
   }        
 // return();
}

Ben 765 inşa ediyorum.

Yardımınız için çok minnettarım.

 
   int file= FileOpen ( "hist0935.csv" , FILE_WRITE | FILE_CSV );  
      
for ( int i=OrdersHistoryTotal()- 1 ; i>= 0 ; i--) {

int file= FileOpen ( "hist0935.csv" , FILE_READ | FILE_WRITE | FILE_CSV );
                                                                
ResetLastError ();                                               
file= FileOpen ( "hist0935.csv" , FILE_READ | FILE_WRITE | FILE_CSV );    

  1. Dosyayı yazmak için açıyorsunuz, şimdi sıfır uzunlukta.
  2. Döngüye başla
  3. Dosyayı okumak ve yazmak için açarsınız. Artık dosyayı iki kez açtınız ve orijinal tutamacı kaybettiniz.
  4. ResetLastError gereksiz, yalnızca bir sorununuz olduğunda GetLastError'a bakın
  5. Dosyayı üç kez açtınız ve iki tutamacı kaybettiniz.
  6. Sonraki döngüde dosyayı daha fazla açarsınız.