6 numaralı hata - sayfa 6

 
Fena değil ama özünde aynı :)
SetTrace nedir?


Opanki :) Şu anda reklam yapacağım, dikkat - http://forexsystems.ru/phpBB/viewtopic.php?t=694&start=45
 
хэндлов не хватает.


Sistem ayarlarında (W'XP) tutamaç sayısını değiştirmek mümkün müdür ve nasıl?
 
Geliştiriciler için başka bir soru.

Nasıl:

1.
for(int nCnt = 0; nCnt < OrdersTotal(); 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);
		}
	}
}



2.

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



3. Fark etmez.
4. Bir sonraki siparişte iade koymak ve bir sonraki siparişi işlemek gerekir.
5. Başka bir şekilde gereklidir.

Açıklamama izin ver. Diyelim ki iki açık siparişimiz var, ikisi de kapalı olmalı. Döngü

for(int nCnt = 0; nCnt < OrdersTotal(); nCnt++)



Sıfır siparişi kapatacak, ardından ilki sıfır olacak. Sonra ilk siparişi kapatmaya çalışacak - ve bir hata verecektir. Böyle?

Bu başlıkta tartışılan uzmanın tüm hatalarının bu konuyla ilgili olduğunu düşünmüyorum, örneğin genel hatanın bununla hiçbir ilgisi yok gibi görünüyor. Ama haklıysam, o zaman belki bu, a) sipariş kilitli ve benzerlerini ve b) hatalara neden olmak için birkaç uzman gerektiğini açıklar.



 
хэндлов не хватает.


Можно ли изменить число хэндлов в системных установках (W'XP) и как?

oraya gitmemek daha iyidir. program yeterli tutamaçlara sahip değilse, bu program hatalarla yazılmıştır. diğer durumlarda, büyük bir marjla yeterli tutamaç vardır.
 
Tabii ki, ikinci seçenek doğru, ancak geri dönmek yerine, 30 ve bıyık için Sleep () saniye koymanız gerekiyor.
 
değiştirildiğini ekleyeyim
for(int nCnt = 0; nCnt < OrdersTotal(); nCnt++)
üzerinde
for(int nCnt = OrdersTotal() - 1; nCnt >= 0; nCnt--)
gittim :) hata 139'dan 138 ve 4109'a
(requote, dizide başlatılmamış dize )
Sonuncusuna yorum yok...
 
Tabii ki, ikinci seçenek doğru, ancak geri dönmek yerine, 30 ve bıyık için Sleep () saniye koymanız gerekiyor.


Bir dakika arayla 10 uzmanla, her biri 30 saniye... Yanlış, böyle yaşayamazsın.
 
Sence bu mu? Her biri kendi para birimine ve kendi Uzman Danışmanına sahip 12 pencerem vardı. 11 tanesinde ticareti yasakladım (canlı ticarete izin ver). Ve her ikisinden de hatalar geldi ve geldi. Başka bir hata.
 
Конечно, второй вариант правилен, только вместо return надо ставить Sleep() секунд на 30 и усе.


Bir dakika arayla 10 uzmanla, her biri 30 saniye... Yanlış, böyle yaşayamazsın.



İnsan böyle yaşamalı ve yaptığınız şey, demirin gücünün bir testidir.
 
Test için Expert Advisor'ın yeni sürümü. Ne değişti:
1. Döngüler düzeltildi.
2. Sihirli sayı, çubuğun başlama saatine eklenir. Bu, yanılmıyorsam bir açılış gecikmesi veriyor. Yani, çarpanı 7 olan bir uzman, barın başlamasından 7 saniye sonra açılacaktır. Bu, sunucunun, bilgisayarın işlemcisinin aşırı yüklenmesini, eğer hala orada bir yerdeyse, maksimum 2,5 saniyelik bir çakışmayı önleyecektir...

Ama ne yazık ki hatalar devam ediyor.

Kurallar aynıdır - herhangi bir zaman diliminde (örneğin dakikalar) birkaç pencere açın ve bekleyin.

double dStopLoss;
int nHoursToHold;

datetime timePrev = 0;

int nSlip = 5;

double dLotSize = 0.1;

int nMagic = 0;

//////////////////
int init ()
{
	timePrev = 0;

	dStopLoss = 110 * Point;
	nHoursToHold = 1;
	
	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;
		
	timePrev += nMagic;	// Open nMagic seconds after the new bar

	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;
	
	if(!bIsBarEnd)
		return(0);

	// ------
	
	int nSignal = GetSignal();

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

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

	return(0);
}
// ------

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

	dLotSize = GetLotSize();

	int nResult = OrderSend(Symbol(), OP_SELL, dLotSize, Bid, nSlip, Bid + dStopLoss, 
		0, "Friday", nMagic, 0, OrangeRed);

	if(nResult == -1)
	{
		int nError = GetLastError();
		Alert(Symbol() + ", " + nError);
	}
}
// ------
void Buy()
{
	if(AccountFreeMargin() < 500)
		return;

	dLotSize = GetLotSize();

	int nResult = OrderSend(Symbol(), OP_BUY, dLotSize, Ask, nSlip, Ask - dStopLoss, 
		0, "Friday", nMagic, 0, Aqua);

	if(nResult == -1)
	{
		int nError = GetLastError();
		Alert(Symbol() + ", " + 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);
}

// ------