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

 
Vitaly Muzichenko :

Satırı yorumlamayı deneyin, bir işlevin çalışmasına izin verin


nasıl olduğunu biliyorsan ilginç
 
Rustam Bikbulatov :

nasıl olduğunu biliyorsan ilginç
hiçbir şey bilmene gerek yok, kodda gösterdim //
 
Rustam Bikbulatov :

Tekrar merhaba. Bana ünlü bir programcının kodunu nasıl değiştireceğimi söyle. Şu anda, bu baykuş saniyede yaklaşık bir işlem kapatıyor. Olumlu ve olumsuz işlemlerden bağımsız olarak, belirli bir karı geçtiğinde işlemleri anında kapatmak istiyorum.

Herhangi bir mesaj günlüğe yazılır. hatalar hakkında?

ClosePosBySelect içindeki gecikmeleri daha makul değerlere düşürebilirsiniz. Orada, her siparişi kapatmak için birkaç girişimde bulunulur ve başarısızlık durumunda her seferinde Uyku askıda kalır.

Bu arada, hata kurtarma daha optimal bir şekilde yapılabilir (görünüşe göre bu işlevlerin oluşturulmasından bu yana MT, ERR_CONTEXT_BUSY'den daha farklı kodlar yayınlamayı öğrenmiştir)

 
Rustam Bikbulatov :

nasıl olduğunu biliyorsan ilginç
Bu ikisini bununla değiştirebilirsiniz, benim için mükemmel çalışıyor, ancak çoğu şey DC'niz tarafından siparişlerin uygulanma hızına bağlı.
 
Maxim Kuznetsov :

Herhangi bir mesaj günlüğe yazılır. hatalar hakkında?

ClosePosBySelect içindeki gecikmeleri daha makul değerlere düşürebilirsiniz. Orada, her siparişi kapatmak için birkaç girişimde bulunulur ve başarısızlık durumunda her seferinde Uyku askıda kalır.

Bu arada, hata kurtarma daha optimal bir şekilde yapılabilir (görünüşe göre bu işlevlerin oluşturulmasından bu yana MT, ERR_CONTEXT_BUSY'den daha farklı kodlar yayınlamayı öğrenmiştir)

Sleep'i tamamen kaldırmaya çalıştım ama neye göre farklılar.
 
Vitaly Muzichenko :
Bu ikisini bununla değiştirebilirsiniz, benim için mükemmel çalışıyor, ancak çoğu şey DC'niz tarafından siparişlerin uygulanma hızına bağlı.

Tam teşekküllü bir baykuş mu yoksa kodun bir parçası mı?
 

Lord uzmanlar yardım ediyor! Üçüncü gün, aşağıdaki problem yüzünden kafamı kırdım. Expert Advisor'da, sonraki ayrıştırma için wininet.dll kullanarak İnternetten bir dosya okuma standart (kullanıldığı her yere bakmadım) işlevini kullandım:


dize ReadHTML()

{

if(!IsDllsAllowed())

{

Alert("Ayarlarda DLL kullanımına izin verilmesi gerekiyor");

dönüş("");

}

int rv = InternetAttemptConnect(0);

if(rv != 0)

{

Alert("InternetAttemptConnect() çağrılırken hata oluştu");

dönüş("");

}

int hInternetSession = InternetOpenW("Microsoft Internet Explorer", 0, "", "", 0);

if(hInternetSession <= 0)

{

Alert("InternetOpenW() çağrılırken hata oluştu");

dönüş("");

}

int hURL = InternetOpenUrlW(hInternetSession,URL, "", 0, 0, 0);

if(hURL <= 0)

{

Alert("InternetOpenUrlW() çağrılırken hata oluştu");

InternetCloseHandle(hInternetSession);

dönüş("");

}

int cBuffer[256];

int dwBytesRead[1];

dizi TXT = "";

while(!Stopped())

{

bool bResult = InternetReadFile(hURL, cBuffer, 1024, dwBytesRead);

if(dwBytesRead[0] == 0)

kırmak;

string metin = "";

stringtext0="";

for(int i = 0; i < 256; i++)

{

text0= CharToStr((char)(cBuffer[i] & 0x000000FF));

if (text0!="\r") metin = metin + metin0;

başka dwBytesRead[0]--;

if(StringLen(text) == dwBytesRead[0]) break;

text0= CharToStr((char)(cBuffer[i] >> (8 & 0x000000FF)));

if (text0!="\r") metin = metin + metin0;

başka dwBytesRead[0]--;

if(StringLen(text) == dwBytesRead[0]) break;

text0= CharToStr((char)(cBuffer[i] >> (16 & 0x000000FF)));

if (text0!="\r") metin = metin + metin0;

başka dwBytesRead[0]--;

if(StringLen(text) == dwBytesRead[0]) break;


text0= CharToStr((char)(cBuffer[i] >> (24 & 0x000000FF)));

if (text0!="\r") metin = metin + metin0;

başka dwBytesRead[0]--;

if(StringLen(text) == dwBytesRead[0]) break;

}

txt=txt+metin;

Uyku(1);

}

InternetCloseHandle(hURL);

InternetCloseHandle(hInternetSession);

dönüş(TXT);

}


Her şey yolunda, bilgilerin daha sonra güncellendiği siteyi yalnızca bir kez okuduktan sonra, bu işleve bir sonraki eriştiğinizde (site daha sık güncellenmesine rağmen 1 dakika veya daha kısa bir süre ile), aynı siteyi görüntülemeden görüntüler. değişiklikler (ilk kez okunduğu gibi). Danışmanı yeniden başlatmak yardımcı olmuyor, dosya terminali başlattıktan sonra ilk erişimde okunduğu için veriyor. Yalnızca Internet Explorer'ı istediğiniz siteyle (sırasıyla güncellenmiş bilgilerle) manuel olarak açarsanız, işlev bu güncellenmiş bilgileri okumaya başlarsa ve ardından bu site yapılandırması zaten donmuşsa veya MT4 terminalini yeniden başlattığınızda (ve ayrıca, Yeniden başlattıktan sonra ilk kez okudum, vb. ve sorunlar). InternetOpenW veya InternetOpenUrlW parametreleriyle bir ilgisi olduğundan şüpheleniyorum, varsayılan olarak her yerde sıfırlar var, ancak hiçbir yerde net bir açıklama bulamıyorum ve bir şekilde başkaları için çalışıyor (işlevi sitelerden haber aktaran danışmanlardan aldım) terminale). Evet, istenen site için terminal ayarlarında "WebRequest'e İzin Ver ..." yaptı.

 

Tünaydın.

RAM zaten sigara içiyor: danışmanda sorun ortaya çıktı, TP veya SL aldıktan sonra siparişi tekrar açıyor!

Göstergeden gelen sinyal göründükten sonra danışmanın yalnızca 2. çubuğa eklendiği bir durum düşünemiyorum

veya TP veya SL çalışıyorsa, yeni bir sinyal bekler, ancak yalnızca gösterge sinyali değiştiğinde.


geçersiz OnTick()

{

uptr = NormalizeDouble (iCustom(NULL, 0, "Eğim Yön Çizgisi", nokta, yöntem, fiyat, 0, n), 4);

dntr = NormalizeDouble(iCustom(NULL, 0, "Eğim Yön Çizgisi", nokta, yöntem, fiyat, 1, n), 4);

if(DN_Trend()==doğru)

{

if(CountSell() == 0 && Teklif < dntr && Aç[3] < dntr && Kapat[3] < dntr)

{

bilet = OrderSend(Symbol(), OP_SELL, Lot, Bid, Slippage, 0, 0, "Sloper", Magic, 0, Red);

eğer (bilet > 0)

{

SL = NormalizeDouble(Teklif + StopLoss*Puan, Rakamlar);

TP = NormalizeDouble(Teklif - TakeProfit*Puan, Rakamlar);

if (OrderSelect(bilet, SELECT_BY_TICKET))

if(!OrderModify(bilet, OrderOpenPrice(), SL, TP, 0))

Print("Satış hatası");

}

}

 
d1w4m3 :

Tünaydın.

RAM zaten sigara içiyor: danışmanda sorun ortaya çıktı, TP veya SL aldıktan sonra siparişi tekrar açıyor!

Göstergeden gelen sinyal göründükten sonra danışmanın yalnızca 2. çubuğa eklendiği bir durum düşünemiyorum

veya TP veya SL çalışıyorsa, yeni bir sinyal bekler, ancak yalnızca gösterge sinyali değiştiğinde.

Son kapatılan pozisyon alınan sinyal ile aynı tipte ise ve bu pozisyon stop emirlerinden biri ile kapatılmışsa pozisyonu açmayın.
 
Artyom Trishkin :
Son kapatılan pozisyon alınan sinyal ile aynı tipte ise ve bu pozisyon stop emirlerinden biri ile kapatılmışsa pozisyonu açmayın.


Cevabınız için teşekkürler, ancak birkaç haftalığına kodda nasıl uygulanacağını öğrenmeye başladım veya nerede okuyacağımı söyleyin lütfen. Yoksa Igor Kim'e göre mi?

Ve yine de sisteme göre değil pozisyon açacak, işe ilk başladığında sizin durumunuz bu sorunu ortadan kaldırmıyor.