Hata Kodu 5004 - sayfa 2

 
mfilename = StringSubstr(OrderTicket(),StringLen(OrderTicket())-7,7) + ".DAT";

fhandle=FileOpen(mfilename, FILE_BIN|FILE_READ);

if(fhandle<=0)

{ Alert( "File:", mfilename, " not found, the last error is: ", GetLastError());

filewriting(mfilename); }

        if(fhandle>0)

FileClose(fhandle);
 
raisingfire :

Bu, dosyayı açıp dosyayı kapatan bölümdür:

DLL çağrılarını değil, standart MQL4 dosya işlevlerini kullanıyorum.

Aşağıdakileri ekleyip çıktının ne olduğunu geri bildirir misiniz lütfen. . .

mfilename = StringSubstr ( OrderTicket (), StringLen ( OrderTicket ())- 7 , 7 ) + ".DAT" ;

Print ( "Filename:  " , mfilename);     // <--- add this line

fhandle= FileOpen (mfilename, FILE_BIN | FILE_READ );

if (fhandle<= 0 )

{ Alert ( "File:" , mfilename, " not found, the last error is: " , GetLastError());

filewriting(mfilename); }

         if (fhandle> 0 )

FileClose (fhandle);


Dosyanın doğru dizinde bulunduğunu onayladınız mı? artık uzmanlar\dosyalarda olmamalıdır. . . . MQL4\Files içinde olmalıdır Dosya > Veri Klasörünü Aç'ı tıklayarak MT4'ten doğru MQL4 klasörünü bulabilirsiniz

 
  1. mfilename = StringSubstr ( OrderTicket (), StringLen ( OrderTicket ())- 7 , 7 ) + ".DAT" ;

    Orderticket bir int, StringLen bir dize bekliyor

    SiparişBilet
    dizeLen StringSubstr
    12345678
    8
    ("12345678", 1, 7) = "2345678"
    1234567
    7
    ("12345678", 0, 7) = "1234567"
    123456 6 ("123456", -1, 7) GEÇERSİZ

    bu nedenle, basamak sayısı <7 ise (test cihazında olduğu gibi) arama başarısız olur. > 7 baştaki basamak kaldırıldı mı?

    Denemek IntegerToString ( OrderTicket(), 7, '0') + ".DAT" // 12345 -> 0012345.DAT

  2. MetaTrader 4 Build 600 ve Üzeri - MQL4 Makalelerinde uzman \ dosya yok Veri Yapısı
 
RaptorUK :

Aşağıdakileri ekleyip çıktının ne olduğunu geri bildirir misiniz lütfen. . .


Dosyanın doğru dizinde bulunduğunu onayladınız mı? artık uzmanlar\dosyalarda olmamalıdır. . . . MQL4\Files içinde olmalıdır Dosya > Veri Klasörünü Aç'ı tıklayarak MT4'ten doğru MQL4 klasörünü bulabilirsiniz.


Raptorİngiltere :

Aşağıdakileri ekleyip çıktının ne olduğunu geri bildirir misiniz lütfen. . .


Dosyanın doğru dizinde bulunduğunu onayladınız mı? artık uzmanlar\dosyalarda olmamalıdır. . . . MQL4\Files içinde olmalıdır Dosya > Veri Klasörünü Aç'ı tıklayarak MT4'ten doğru MQL4 klasörünü bulabilirsiniz.

Sevgili RaptorUK,

Burada Print ifadesinin ardından dosyayı günlükten ekledim.

Klasör yapısının yapı 610'da değiştirildiğinin farkındayım. Ancak daha sonra, varsayılan klasörleri kullandığım için terminal istemci programı bunu otomatik olarak ayarlamalıdır.

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

 
WHRoeder :
  1. Orderticket bir int, StringLen bir dize bekliyor

    SiparişBilet
    dizeLen StringSubstr
    12345678
    8
    ("12345678", 1, 7) = "2345678"
    1234567
    7
    ("12345678", 0, 7) = "1234567"
    123456 6 ("123456", -1, 7) GEÇERSİZ

    bu nedenle, basamak sayısı <7 ise (test cihazında olduğu gibi) arama başarısız olur. > 7 baştaki basamak kaldırıldı mı?

    Denemek IntegerToString ( OrderTicket(), 7, '0') + ".DAT" // 12345 -> 0012345.DAT

  2. MetaTrader 4 Build 600 ve Üzeri - MQL4 Makalelerinde uzman \ dosya yok Veri Yapısı


Sevgili WHRoder,

Önerinizi denedim ve hala aynı hata kodunu veriyor: 5004. orderticket'in int döndürdüğüne dair iyi bir bilgiye dikkat çektiniz. Ancak, eski istemci terminal programı (580 gibi bir şey oluşturun) herhangi bir derleme hatası veya çalışma zamanı hatası döndürmedi. Bu hata kodu 5004, daha önce de bahsettiğim gibi, EA performansımı hiç etkilemiyor gibi görünüyor. EA'm hala doğru durumda pozisyonu açıp kapatabilir.

Varsayılan dizini kullanıyorum, belirli bir dizin belirtmiyorum. Dosyaların orada olduğunu görebiliyordum ama yine de onları açamıyor. Daha fazla karışıklık eklemek için, her zaman başarısız olmaz. Çoğu zaman dosya açmayı başarır. Dosya açmanın başarılı olup olmadığını test etmek için başka bir koşul ekledim. Başarı oranı, 1'in dosya açma başarısız olduğu yerde 10: 1 oranı civarındadır.

Yine de yardımın için teşekkür ederim.

 

hangi sürümü kullanıyorsun

& belki de bir UAC sorunu

 
//you are looking for a word in a number.... twice... It's like asking how many ounces are in a foot. Wrong datatype.
//Change your ticket number to a string.

string ticketString= IntegerToString ( OrderTicket ());
//now your ticket number is a string.

mfilename = StringSubstr (ticketString, StringLen (ticketString)- 7 , 7 ) + ".DAT" ;
//now you are asking for the substring and length of a string instead of an integer.

fhandle= FileOpen (mfilename, FILE_BIN | FILE_READ );

if (fhandle == - 1 )
//if you are getting an INVALID HANDLE that is -1 you could also just say <0 instead of <=0 this may be why it only fails some times.

{ Alert ( "File:" , mfilename, " not found, the last error is: " , GetLastError());

filewriting(mfilename); }

         if (fhandle> 0 )

FileClose (fhandle);

WHRoeder'ın yukarıda söylediği gibi .. test cihazını kullanıyorsanız ve en az 7 basamak içeren bir bilet numarası kullanmıyorsanız, 6 eksi 7(ticketString-7) veya -1 ile başlayan alt dizi olarak aramasını istiyorsunuz. pozisyon .. hangi düşmesine neden olacak. Ayrıca 'varsayılan' klasörden bahsettiniz.

'Varsayılan' klasör eskisinden değişti. 'Varsayılan' derken Mql4/files'deki yeni 'varsayılan' klasörden bahsettiğinizi varsaymak zorunda kalacağım. eski uzmanlar/dosyalardan değil.

Yukarıdaki öneriyi aldığınızdan ve >Veri Klasörünü Aç dosyasını kullandığınızdan ve platformunuzun kullandığı gerçek konuma baktığınızdan emin olun. UAC'yi önerildiği gibi kullanıyorsanız, kullanıcılarda/appdata'da bitmiş olabilir ... bunun farkında olduğunuz sürece sorun yok ve gerekirse yollarınızı buna göre ayarlayın.

Görünüşe göre düzgün bir şekilde işlem yapıyorsa, kodun bu kısmı yalnızca kayıt tutma ve günlük kaydı içindir ve stratejinin ayrılmaz bir parçası değildir. Umarım bu önerilerden bazıları, hatasız çalıştırmanıza yardımcı olur.. Foruma Hoş Geldiniz!

PipPip...Jimdandy

 
qjol :

hangi sürümü kullanıyorsun

& belki de bir UAC sorunu


kullandığım mevcut istemci terminali 610 inşa ediyor.
 
Jimdandy :

WHRoeder'ın yukarıda söylediği gibi .. test cihazını kullanıyorsanız ve en az 7 basamak içeren bir bilet numarası kullanmıyorsanız, 6 eksi 7(ticketString-7) veya -1 ile başlayan alt dizi olarak aramasını istiyorsunuz. pozisyon .. hangi düşmesine neden olacak. Ayrıca 'varsayılan' klasörden bahsettiniz.

'Varsayılan' klasör eskisinden değişti. 'Varsayılan' derken Mql4/files'deki yeni 'varsayılan' klasörden bahsettiğinizi varsaymak zorunda kalacağım. eski uzmanlar/dosyalardan değil.

Yukarıdaki öneriyi aldığınızdan ve >Veri Klasörünü Aç dosyasını kullandığınızdan ve platformunuzun kullandığı gerçek konuma baktığınızdan emin olun. UAC'yi önerildiği gibi kullanıyorsanız, kullanıcılarda/appdata'da bitmiş olabilir ... bunun farkında olduğunuz sürece sorun yok ve gerekirse yollarınızı buna göre ayarlayın.

Görünüşe göre düzgün bir şekilde işlem yapıyorsa, kodun bu kısmı yalnızca kayıt tutma ve günlük kaydı içindir ve stratejinin ayrılmaz bir parçası değildir. Umarım bu önerilerden bazıları, hatasız çalıştırmanıza yardımcı olur.. Foruma Hoş Geldiniz!

PipPip...Jimdandy


WHRoeder'a yanıt verdiğim için önerisini takip ettim ve hala bana aynı hata kodu 5004'ü veriyor.

Varsayılan klasör için, yapı 610'da klasör yapısının değiştiğinin farkındayım. EA'mı yeniden derledim ve hiçbir zaman kendi klasörlerimi belirtmedim. Bu yüzden, EA'nın istemci terminali varsayılan klasörlerinde DAT dosyalarını oluşturacağını ve arayacağını varsaydım. Ve çoğu zaman FILEOPEN'in başarılı olduğu doğrulanır. Aynı ifadenin yalnızca %10'u başarısız olur. (Başarılı olup olmadığını test etmek için basit if ifadesi kullanıyorum).

Şerefe,

 
raisingfire :

Sevgili RaptorUK,

Burada Print ifadesinin ardından dosyayı günlükten ekledim.

Klasör yapısının yapı 610'da değiştirildiğinin farkındayım. Ancak daha sonra, varsayılan klasörleri kullandığım için terminal istemci programı bunu otomatik olarak ayarlamalıdır.

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

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şleviniz var?