6 numaralı hata - sayfa 11

 
10 dakikalık grafiklerde 50 dakikalık çalışma için, sadece 2 alıntı . artık hata yok. meta düzenleyici sözlüğü ekle ve değişiklikleri gönder
 
hata 138 yeniden alıntı kolayca oluşabilir. Potansiyel olarak, çalışan 10 uzmanla, bir semafor sürümü için bekleme süresi 30 saniye veya daha fazla olabilir. Bu süre zarfında fiyat kolayca değişebilir. bu durumda, RefreshRates işlevini kullanın ve yeni teklifi veya talep değerini alın. veya yeni bir fiyat için MarketInfo ile iletişime geçin. 129 - aynı planın hatası, yanlış fiyat - fiyat çok ileri gitti ve bekleme süresi boyunca birkaç değişiklik oldu. 1 kesinlikle bir hata değildir. önceden ayarlanmış aynı değerlere sahip bir siparişi değiştirme girişiminde bulunulduğunda görünür. gelmesi garip. bizim durumumuzda, bir işlem iptal edildiğinde bir işlemi manuel olarak onaylarken ortaya çıkar.


Teşekkürler fakat...
En son gönderdiğim Expert Advisor'ın 3 saniye gecikmesi ve 50 (!) puanlık bir kayması var. Fiyat
3 saniye için 12 çizelge - fiyatın şimdiye kadar koşmak için zamanı olmayacak. Yoksa bir şey anlamadım?
 
EA'ya RefreshRates eklendi (aşağıdaki kod). Şimdi 1 numaralı hatalar dökülüyor.
Umarım takip edebilirsiniz. "Rip" - bu, yaklaşık 2-3 dakikada bir anlamına gelir. İşinize yaramazsa, sunucu muhtemelen çok yakındır veya bilgisayar orada çok hızlıdır. İşlemcimin bir kısmı bir sinir ağı paketi tarafından işgal ediliyor, bu yüzden MT yüzde 50 alıyor ... Şimdi ... Burada sinir ağını kapattım (diğer bazı programlardan farklı olarak bir duraklatma düğmesi var). Bir numaralı hata ortadan kalkmadı, ancak biraz daha az yaygın hale geldi. MT, işlemcinin yüzde 55-99'unu "yiyor". Açıyorum... MT, 1,5 kat daha az CPU süresi alıyor. Hata da daha sık hale geldi.

double dStopLoss;
int nHoursToHold;

datetime timePrev = 0;
int nBars;
int nDelaySeconds = 3;

int nSlip = 50;

double dLotSize = 0.1;

int nMagic = 0;
int nDigits;

string strTradeSemaphore = "TradeSemaphore";

//////////////////
int init()
{
	nBars = Bars;

	if(!IsTesting() && !GlobalVariableCheck(strTradeSemaphore)) 
		GlobalVariableSet(strTradeSemaphore, 0.0);
	
	dStopLoss = 110 * Point;
	nHoursToHold = 1;

	nDigits = MarketInfo( Symbol(), MODE_DIGITS );
	
	if(Symbol() == "EURUSD")
		nMagic = 1;
	else if(Symbol() == "EURJPY")
		nMagic = 2;
	else if(Symbol() == "USDCHF")
		nMagic = 3;
	else if(Symbol() == "GBPUSD")
		nMagic = 4;
	else if(Symbol() == "GBPJPY")
		nMagic = 5;
	else if(Symbol() == "GBPCHF")
		nMagic = 6;
	else if(Symbol() == "USDJPY")
		nMagic = 7;
	else if(Symbol() == "AUDUSD")
		nMagic = 8;
	else if(Symbol() == "EURGBP")
		nMagic = 9;
	else if(Symbol() == "USDCAD")
		nMagic = 10;
	else if(Symbol() == "EURCHF")
		nMagic = 11;
	else if(Symbol() == "EURAUD")
		nMagic = 12;
		
	return(0);	
}

// ------

int deinit()
{
	return(0);
}

// ------

int start()
{
	if(Bars < 5)
		return(0);
	
/*	// The previous bar just closed
	bool bIsBarEnd = false;
	if(timePrev != Time[0] + nMagic) 
		bIsBarEnd = true;
	timePrev = Time[0] + nMagic;
*/

	bool bIsBarEnd = false;
	if(nBars != Bars)
	{
		if(IsTesting() || (!IsTesting() && CurTime() > Time[0] + nMagic * nDelaySeconds))
		{
			bIsBarEnd = true;
			nBars = Bars;
		}
	}
	
	if(!bIsBarEnd)
		return(0);

	// ------
	
	if(!IsTesting())
	{
		while(!IsStopped())
		{
			if(GlobalVariableGet(strTradeSemaphore) == 0.0)
				GlobalVariableSet(strTradeSemaphore, nMagic);

			if(GlobalVariableGet(strTradeSemaphore) == nMagic)
				break;
		
			Sleep(1000);
		}
	}
	
	RefreshRates();
	
	for(int nCnt = OrdersTotal() - 1; nCnt >= 0; nCnt--)
	{
		OrderSelect(nCnt, SELECT_BY_POS, MODE_TRADES);

		if(OrderMagicNumber() == nMagic)
		{
			if(CurTime() - OrderOpenTime() > (nHoursToHold - 1) * 60 * 60)
			{
				if(OrderType() == OP_BUY)
					OrderClose(OrderTicket(), OrderLots(), Bid, nSlip, Aqua);
				else if(OrderType() == OP_SELL)
					OrderClose(OrderTicket(), OrderLots(), Ask, nSlip, OrangeRed);
			}
		}
	}

	int nSignal = GetSignal();
	
	if(nSignal == OP_BUY) 
		Buy();
	else if(nSignal == OP_SELL) 
		Sell();

	if(!IsTesting())
		GlobalVariableSet(strTradeSemaphore, 0.0);	
	
	return(0);
}
// ------

void Sell()
{
	if(AccountFreeMargin() < 500)
		return;

	dLotSize = GetLotSize();

	double dNormalizer = MathPow(10, nDigits);
	double dBid = Bid;//MathFloor(Bid * dNormalizer) / dNormalizer; //NormalizeDouble(Bid, nDigits);
	double dStop = Bid + dStopLoss;//MathFloor((Bid + dStopLoss) * dNormalizer) / dNormalizer; //NormalizeDouble(Bid + dStopLoss, nDigits);

	int nResult = OrderSend(Symbol(), OP_SELL, dLotSize, dBid, 
		nSlip, dStop, 0, "Friday", nMagic, 0, OrangeRed);

	if(nResult == -1)
	{
		int nError = GetLastError();
		Alert(Symbol() + ", sell: " + dBid + ", Stop: " + dStop + ", error: " + nError);
	}
}

// ------

void Buy()
{
	if(AccountFreeMargin() < 500)
		return;

	dLotSize = GetLotSize();

	double dNormalizer = MathPow(10, nDigits);
	double dAsk = Ask;//MathFloor(Ask * dNormalizer) / dNormalizer; //NormalizeDouble(Bid, nDigits);
	double dStop = Ask - dStopLoss;//MathFloor((Ask - dStopLoss) * dNormalizer) / dNormalizer; //NormalizeDouble(Bid + dStopLoss, nDigits);

	int nResult = OrderSend(Symbol(), OP_BUY, dLotSize, dAsk, 
		nSlip, dStop, 0, "Friday", nMagic, 0, Aqua);

	if(nResult == -1)
	{
		int nError = GetLastError();
		Alert(Symbol() + ", buy: " + dAsk + 
			", Stop: " + dStop + ", error: " + nError);
	}
}
// ------

double GetLotSize()
{
	double dLot = 0.1;
	
	return(dLot);
}

// ------

int GetSignal()
{
	int nSignal;
	if(MathMod(Hour(), 2) == 0)
		nSignal = OP_BUY;
	else
		nSignal = OP_SELL;
		
	return(nSignal);
}


 
Özetleyeyim, sanırım. Görünüşe göre, tek başına çalışanlar dışında herhangi bir uzmanın koruyucu semaforlara ihtiyacı var. Pazartesi günü geliştiriciler tarafından tanıtılan yeni bir özelliği deneyeceğim (ve Rosh, Geliştiricinin sürümü değiştirmek istemediğini söyledi! Onunla daha sık iletişim kurmam gerekiyor, sadece yüz gönderi). Aslında, geliştiricilere çok teşekkürler. Rosh ve Composer'a da teşekkürler. neyse pazartesiye kadar bekleyelim :)
 
Hayır, Pazartesiye kadar - kesinlikle değil =)))
Güney çağırıyor ve yeni işlev bir hafta içinde hemen kontrol edilecek =)))))

...ve teşekkür ederim, en azından birileri hataları bulmaya çalıştı;)
 
Özetleyeyim, sanırım. Görünüşe göre, tek başına çalışanlar dışında herhangi bir uzmanın koruyucu semaforlara ihtiyacı var. Pazartesi günü geliştiriciler tarafından tanıtılan yeni bir özelliği deneyeceğim (ve Rosh, Geliştiricinin sürümü değiştirmek istemediğini söyledi! Onunla daha sık iletişim kurmam gerekiyor, sadece yüz gönderi). Aslında, geliştiricilere çok teşekkürler. Rosh ve Composer'a da teşekkürler. neyse pazartesiye kadar bekleyelim :)



Quark, geliştiriciler hakkında yazdım, geliştiriciler hakkında değil. :) Kesiyor musun? Bazı dinlerde Tanrı, bazılarında ise farklı bir muameledir.
Yine de 9 Uzman Danışmanımın tek hesapta normal şekilde oynadığını yazdım. Ama aynı zamanda MT4'ün yanlış bir şey kürekleyeceği koşulları bulmakta da iyisiniz :)
 

Hayır, Pazartesiye kadar - kesinlikle değil =)))


benim için pazartesiye kadar :)


Güney çağırıyor ve yeni işlev bir hafta içinde hemen kontrol edilecek =)))))


Büyük merhaba.


...ve teşekkür ederim, en azından birileri hataları bulmaya çalıştı;)


Bir hatayla. Ve kaç tanesi...
 

Quark, geliştiriciler hakkında yazdım, geliştiriciler hakkında değil. :)


Ve sadece güldüm :) Prensip her yerde aynı olsa da. Doğru soruyorsun - bir cevap alıyorsun. Yemin edersin - yasaklanırsın :)


Yine de 9 Uzman Danışmanımın tek hesapta normal şekilde oynadığını yazdım. Ama aynı zamanda MT4'ün yanlış bir şey kürekleyeceği koşulları bulmakta da iyisiniz :)


12 danışmanımla birlikte 72 pencere - çok. Sonra 13.sü eklendi - ve başladı... Genel olarak, tabii ki, bu konuya yazılan son Expert Advisor'ı alıp dakika yerine saat olarak kullanırsanız ve duraklamayı 3 saniyeden 30 saniyeye çıkarırsanız ( tavsiye ettiğiniz gibi, bu arada ), o zaman hata olmayacak. Sonuç olumlu yani...

İngilizce forumdaki arkadaşlar için biraz üzgünüm ama yüz yazımızı onlara çevirmeyeceğim. Sağlık aynı değil :(

İyi şanlar,
kuark
 
Yapılan işe rağmen 6 numaralı hata oluşmaya devam ediyor. Bu, MT optimize ediciyi kullandığında ve aynı anda bir pozisyon açtığında olur. Zaten iki kez yakalandı. Expert Advisor'ın yeniden başlatılması - bir pozisyon açma koşulları geçerliyse - bir pozisyonun açılmasına neden olur, sorun değil.
 
Optimize edici çalışırken, hata 6 çok daha olası görünüyor. Bilgisayarın yeniden başlatılması, MT, vb. önlemler durumu değiştirmez.

Sorun, farklı Uzman Danışmanlarda ortaya çıkıyor. Hepsinin mantığı semaforlar (Slava'nın önerdiği gibi) ve bir gecikme (Rosh) ile değiştirildi - böylece verilen 10 saniye boyunca sadece 1 Uzman Danışman çalışıyor. Yukarıda bahsettiğim tüm hatalar (şimdilik) 6 numara hariç gitti.