6 numaralı hata - sayfa 10

 
[alıntı
Senin örneğin daha iyi olurdu
[/alıntı]

Bu örnek çalışmıyor. Hatalar verir. Daha deneyimli bir geliştirici olarak, çalışmasına yardımcı olabilir misiniz?
Samimi olarak,
kuark
 

Soru: while(!IsStopped()) nasıl çalışır? Yardımdan tam olarak net değil, Canlı Ticarete İzin Ver için bir çek olduğunu düşündüm.

Bu, uzmanı dışarıdan kapatmak isteyip istemediklerinin bir kontrolüdür.

Soru: Bu süre ve Uyku sistemi yavaşlatmaz mı?

sistem yavaşlamayacak. sadece tek bir uzman

Soru: Uyku ve semafor, test modunda doğru şekilde işlenecek mi?

testteki kayma hiçbir şekilde çözülmez, basitçe atlanır. bir semafor ile soru daha zordur. gerçek çalışan uzmanlar, test sırasında bu semafor için rekabet edebilir. Test ederken, yalnızca bir Uzman Danışman test edildiğinden semaforları hiç kullanamazsınız - etkileşimli Uzman Danışmanların eşzamanlı testini düzenleyemiyoruz. test sırasında bir semaforla çalışmayı hariç tutmak için IsTesting işlevini kullanın

Daha mantıklı. Bir semafor ayarlamak ve kaldırmak arasında, siparişlerle çalışmak için iki (maksimum) fırsatımız var. Önce Buy() veya Sell() ve ardından aşağıda, CloseOrder(). Bu iki "faaliyet", bir uzman içinde bile, aynı zamanda iki uzman varmış gibi birbirleriyle rekabet etmeyecek mi? Yoksa işlemin lineer olması garanti mi ve Buy() dönene kadar CloseOrder() oraya ulaşmayacak mı?

bu faaliyetler birbiriyle rekabet etmeyecektir, çünkü alım satım işlemlerimiz artık senkrondur, yani Expert Advisor alım satım işleminin tamamlanmasını beklemektedir. "sürecin doğrusal olması garanti edilir"
 
Bu örnek çalışmıyor. Hatalar verir. Daha deneyimli bir geliştirici olarak, çalışmasına yardımcı olabilir misiniz?

zorlamayacağım. GlobalVariableSetOnCondition işlevi için birkaç gün bekleyin, ardından tüm erişim denetimi sorunları çözülecektir
 
Этот пример не работает. Дает ошибки. Не могли бы Вы, как более опытный разработчик, помочь заставить его работать?

zorlamayacağım. GlobalVariableSetOnCondition işlevi için birkaç gün bekleyin, ardından tüm erişim denetimi sorunları çözülecektir


GlobalVariableSetOnCondition işlevini MT'ye eklemeyi planlıyorsanız, bunun hakkında önceden birkaç şey söyleyebilir misiniz?

Bu durumda nasıl kullanmayı önerirsiniz?

Birkaç gün - hafta sonunu mu sayıyorsunuz?
 
Tartışmamızdan teşekkür ederim, faydalı tavsiyelere ek olarak, çok teşekkürler, bir fikir yaptım :) Daha doğrusu bir öneri. Daha önce bahsetmiştim, tekrar edeceğim.

MT'de sipariş kuyruğu oluşturmanız gerekmez mi? Yani, oradaki bir pozisyonla çalışmak için eşzamansız olarak bir istek yazabilirsiniz ve MT, zaman olduğunda ve başka kimsenin oraya sığmayacağı garantisiyle bu talebi ayrı bir iş parçacığında işleyecektir.

kuark
 
GlobalVariableSetOnCondition işlevini MT'ye eklemeyi planlıyorsanız, bunun hakkında önceden birkaç şey söyleyebilir misiniz?

Bu durumda nasıl kullanmayı önerirsiniz?

Birkaç gün - hafta sonunu mu sayıyorsunuz?

örnek verdim zaten
      if(GlobalVariableSetOnCondition(SemaphoreName, 1.0, 0.0)==true)
        {
         bSemaforlu=doğru;
         kırmak;
        }


global değişken 0.0 değerine sahipse, değeri 1.0 olarak ayarlayın ve true değerini döndürün. aksi takdirde hiçbir şey yüklemeyin. bir işlev çağrısında değeri kontrol etme ve değiştirme.

Her ihtimale karşı "birkaç gün" dedim. umarım bugün yayınlar

 
MT'de sipariş kuyruğu oluşturmanız gerekmez mi? Yani, oradaki bir pozisyonla çalışmak için eşzamansız olarak bir istek yazabilirsiniz ve MT, zaman olduğunda ve başka kimsenin oraya sığmayacağı garantisiyle bu talebi ayrı bir iş parçacığında işleyecektir.

sipariş kuyruğu yapmayacağız
 

örnek verdim zaten


Sadece ne olduğunu söylemediler :) Fonksiyonun bana yazılması önerildi sanıyordum.


Her ihtimale karşı "birkaç gün" dedim. umarım bugün yayınlar


Teşekkür ederim.
 
Bunlara ek olarak.

1. Bu 100 gönderide, Expert Advisor üzerinde çalışırken ve doğrudan onunla ilgili olmayan birkaç hata bulundu. Örneğin, Uzman Danışmanlar, Canlı Ticarete İzin Ver onay kutusu kaldırıldıktan sonra bile ticaret yapmaya devam eder. Umarım onları unutmazsın.

2. Aşağıda TEKRAR uzman kodunu veriyorum. 1, 129, 138 hataları üretir. a) 138'in ( requote ) ne olduğunu, neden oluştuğunu, semaforlarla ilgili olup olmadığını ve nasıl kaldırılacağını açıklayabilir misiniz? b) Neden 129? Fiyatlar bir hata ile birlikte görüntüleniyor, doğru görünüyorlar. c) Şey, yaklaşık 1 de.

Size test yöntemini hatırlatmama izin verin: 12 para birimi için 12 dakikalık pencereler.

Samimi olarak,
kuark

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);
		}
	}
	
	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);
}
 
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.