6 numaralı hata - sayfa 2

 

çizelge sayısında bir sınır vardır - 99. Bu, uzman sayısında aynı sınır anlamına gelir


Hayır. Benim durumum değil. İlk olarak, 99'dan az Uzman Danışmanım var. İkincisi, uzun bir çalışma söz konusu değildir - yeniden başlatma ve bir saat içinde bir uyarı.

Öyleyse bir uzmana görün?
 
Pekala, sıcak takipte. Başka bir uzman. Göstergenin ne olduğu önemli değil. Önemli bir şekilde, aynı para birimi için açtığı iki işlemi keşfettim. EA'nın mantığı buna izin vermiyor. Mantıksal olarak (grafiklere bakarsanız), önceki ticaretin kapanması gerekirdi. Ve kapanmadı. Loglarda bir şey yok. Aynı semptom mu?

Daha iyisi, elbette, yukarıda bahsettiğim uzmana bakın. Orada her şey kod açısından daha basit. Ve hiçbir gösterge yok.

kuark.

// MT4 tested
#include "mylib.mq4"

extern double dBuyLevel;
extern double dSellLevel;
extern double dStopLoss;
extern double dTrailingStop;
extern double dTakeProfit;

extern int nNocInterval;
extern double dNocRange;
extern int nNocMa;

// ------

datetime timePrev = 0;

int nSlip = 5;
double dTp = 0;

double dProfit = 0;
double dInitAmount = 1000;
double dLotSize = 0.1;

int nNumOfExperts = 5;
int nMagic = 0;
bool bReportDone = false;

bool bUseMm = false;

//////////////////
int init ()
{
	if(Symbol() == "EURUSD" && Period() == 60)
	{
		if(!IsTesting())					
		{							// (0.21,0.94,240,40,0.02,3,240), (0.19,0.82,200,30,0.025,5,200)
			dBuyLevel = 0.19;		// (0.21,0.83,160,27,0.026,4,260), (), ()
			dSellLevel = 0.82;
									
			dStopLoss = 230 * Point;		
			dTrailingStop = dStopLoss;
			dTakeProfit = 0;
			
			nNocInterval = 28;
			dNocRange = 0.024;
			nNocMa = 6;
			
			// Max: 0.19,0.82,230,230,0,28,0.024,6; dd: 653, balance: 6900
		}
		else
		{
			dStopLoss = dStopLoss * Point;

			if(dTakeProfit == 700)
				dTakeProfit = 0;			
			dTakeProfit = dTakeProfit * Point;

			dTrailingStop = /*dTrailingStop * Point;*/dStopLoss;
		}

//		bBuy = false;
//		bSell = false;

		nMagic = 10;
	}
	else if(Symbol() == "EURJPY" && Period() == 60)
	{
		if(!IsTesting())					
		{							// (0.17,0.96,120,40,0.01,13)
			dBuyLevel = 0.17;		// balance: 3650, dd: 539
			dSellLevel = 0.96;
											
			dStopLoss = 120 * Point;		
			dTrailingStop = dStopLoss;
			dTakeProfit = 0;
			
			nNocInterval = 40;
			dNocRange = 0.01;
			nNocMa = 13;
		}
		else
		{
			dStopLoss = dStopLoss * Point;

			if(dTakeProfit == 700)
				dTakeProfit = 0;			
			dTakeProfit = dTakeProfit * Point;

			dTrailingStop = /*dTrailingStop * Point;*/ dStopLoss;
		}

//		bBuy = false;
//		bSell = false;

		nMagic = 11;
	}
	else if(Symbol() == "USDCHF" && Period() == 60)
	{
		if(!IsTesting())					
		{									// (0.19,0.82,200,35,0.01,5)
			dBuyLevel = 0.05;				// balance: 6200, dd: 763
			dSellLevel = 0.92;	
											// (0.05,092,250,30,0.025,3)
			dStopLoss = 250 * Point;		// balance: 3600, dd: 500
			dTrailingStop = dStopLoss;
			dTakeProfit = 0;				// (0.07,0.92, 250,40,0.025,9)
											// balance: 3500, dd: 362
			nNocInterval = 30;
			dNocRange = 0.025;				
			nNocMa = 3;						
		}
		else
		{
			dStopLoss = dStopLoss * Point;

			if(dTakeProfit == 700)
				dTakeProfit = 0;			
			dTakeProfit = dTakeProfit * Point;

			dTrailingStop = /*dTrailingStop * Point;*/ dStopLoss;
		}

//		bBuy = false;
//		bSell = false;

		nMagic = 12;
	}
	else if(Symbol() == "GBPUSD" && Period() == 60)
	{
		if(!IsTesting())					
		{									// (0.21,0.84,250,30,0.01,11)	// BUY ONLY: retest!!!
			dBuyLevel = 0.15;				// balance: 6588, dd: 1169
			dSellLevel = 0.84;	
											// (0.15,0.86,250,20,0.025,9)	// BUY ONLY: retest!!!
			dStopLoss = 200 * Point;		// balance: 3337, dd: 552
			dTrailingStop = dStopLoss;
			dTakeProfit = 0;				// (0.15,0.84,200,20,0.025,7)	// buy and sell
											// balance: 4171, dd: 850
			nNocInterval = 20;
			dNocRange = 0.025;				// (0.15,0.88,200,20,0.025,9)	// buy only? retest
			nNocMa = 9;						// balance: 2895, dd: 424
		}
		else
		{
			dStopLoss = dStopLoss * Point;

			if(dTakeProfit == 700)
				dTakeProfit = 0;			
			dTakeProfit = dTakeProfit * Point;

			dTrailingStop = /*dTrailingStop * Point;*/ dStopLoss;
		}

//		bBuy = false;
//		bSell = false;

		nMagic = 13;
	}
	else if(Symbol() == "GBPCHF" && Period() == 60)
	{
		if(!IsTesting())					
		{									// (0.11,0.86,280,20,0.025,7)
			dBuyLevel = 0.11;				// balance: 5564, dd: 777
			dSellLevel = 0.86;	
											// (0.15,0.84,280,25,0.025,11)
			dStopLoss = 280 * Point;		// balance: 4275, dd: 685
			dTrailingStop = dStopLoss;
			dTakeProfit = 0;				// (0.11,0.86,280,25,0.025,9)
											// balance: 4159, dd: 456
			nNocInterval = 25;
			dNocRange = 0.025;				
			nNocMa = 9;						
		}
		else 
		{
			dStopLoss = dStopLoss * Point;

			if(dTakeProfit == 700)
				dTakeProfit = 0;			
			dTakeProfit = dTakeProfit * Point;

			dTrailingStop = /*dTrailingStop * Point;*/ dStopLoss;
		}

//		bBuy = false;
//		bSell = false;

		nMagic = 14;
	}
	else if(Symbol() == "USDJPY" && Period() == 60)
	{
		if(!IsTesting())					
		{									// (0.07,0.82,280,25,0.025,3)
			dBuyLevel = 0.07;				// balance: 3764, dd: 527
			dSellLevel = 0.82;	
											// (0.07,0.8,160,30,0.025,3)
			dStopLoss = 280 * Point;		// balance: 3297, dd: 491
			dTrailingStop = dStopLoss;
			dTakeProfit = 0;				// (0.09, 0.94,280,15,0.025,3)
											// balance: 2703, dd: 541
			nNocInterval = 25;
			dNocRange = 0.025;				
			nNocMa = 3;						
		}
		else 
		{
			dStopLoss = dStopLoss * Point;

			if(dTakeProfit == 700)
				dTakeProfit = 0;			
			dTakeProfit = dTakeProfit * Point;

			dTrailingStop = /*dTrailingStop * Point;*/ dStopLoss;
		}

//		bBuy = false;
//		bSell = false;

		nMagic = 15;
	}
	else if(Symbol() == "AUDUSD" && Period() == 60)
	{
		if(!IsTesting())					
		{									// (0.14,0.9,280,40,0.015,11)
			dBuyLevel = 0.14;				// balance: 3834, dd: 468
			dSellLevel = 0.9;	
											// (0.13,0.92,240,35,0.01,13)
			dStopLoss = 280 * Point;		// balance: 3463, dd: 303
			dTrailingStop = dStopLoss;
			dTakeProfit = 0;				
											
			nNocInterval = 40;
			dNocRange = 0.015;				
			nNocMa = 11;						
		}
		else 
		{
			dStopLoss = dStopLoss * Point;

			if(dTakeProfit == 700)
				dTakeProfit = 0;			
			dTakeProfit = dTakeProfit * Point;

			dTrailingStop = /*dTrailingStop * Point;*/ dStopLoss;
		}

//		bBuy = false;
//		bSell = false;

		nMagic = 16;
	}
	else if(Symbol() == "EURGBP" && Period() == 60)
	{
		if(!IsTesting())					
		{									// (0.09,0.84,200,35,0.01,3)
			dBuyLevel = 0.21;				// balance: 2517, dd: 486
			dSellLevel = 0.82;	
											// (0.21,0.82,280,40,0.015,3)
			dStopLoss = 280 * Point;		// balance: 2726, dd: 324
			dTrailingStop = dStopLoss;
			dTakeProfit = 0;				// (0.21,0.84,160,15,0.01,3)
											// balance: 2255, dd: 314
			nNocInterval = 40;
			dNocRange = 0.015;				
			nNocMa = 3;						
		}
		else 
		{
			dStopLoss = dStopLoss * Point;

			if(dTakeProfit == 700)
				dTakeProfit = 0;			
			dTakeProfit = dTakeProfit * Point;

			dTrailingStop = dStopLoss;
		}

//		bBuy = false;
//		bSell = false;

		nMagic = 17;
	}
	else if(Symbol() == "USDCAD" && Period() == 60)
	{
		if(!IsTesting())					
		{									// (0.05,0.88,280,25,0.015,7)
			dBuyLevel = 0.07;				// balance: 3536, dd: 235
			dSellLevel = 0.86;	
											// (0.07,0.86,280,15,0.015,3)
			dStopLoss = 280 * Point;		// balance: 3414, dd: 380
			dTrailingStop = dStopLoss;
			dTakeProfit = 0;				
											
			nNocInterval = 15;
			dNocRange = 0.015;				
			nNocMa = 3;						
		}
		else 
		{
			dStopLoss = dStopLoss * Point;

			if(dTakeProfit == 700)
				dTakeProfit = 0;			
			dTakeProfit = dTakeProfit * Point;

			dTrailingStop = dStopLoss;
		}

//		bBuy = false;
//		bSell = false;

		nMagic = 18;
	}
	else if(Symbol() == "EURCHF" && Period() == 60)
	{
		if(!IsTesting())					
		{									// (0.17,0.84,280,15,0.01,5)
			dBuyLevel = 0.17;				// balance: 1471, dd: 221
			dSellLevel = 0.84;	
											// (0.17,0.88,200,15,0.01,5)
			dStopLoss = 200 * Point;		// balance: 1433, dd: 135
			dTrailingStop = dStopLoss;
			dTakeProfit = 0;				
											
			nNocInterval = 15;
			dNocRange = 0.01;				
			nNocMa = 5;						
		}
		else 
		{
			dStopLoss = dStopLoss * Point;

			if(dTakeProfit == 700)
				dTakeProfit = 0;			
			dTakeProfit = dTakeProfit * Point;

			dTrailingStop = dStopLoss;
		}

//		bBuy = false;
//		bSell = false;

		nMagic = 19;
	}
	else if(Symbol() == "EURAUD" && Period() == 60)
	{
		if(!IsTesting())					
		{									// (0.05,0.8,240,30,0.025,9)
			dBuyLevel = 0.05;				// balance: , dd: 
			dSellLevel = 0.8;	
											// ()
			dStopLoss = 240 * Point;		// balance: , dd: 
			dTrailingStop = dStopLoss;
			dTakeProfit = 0;				
											
			nNocInterval = 30;
			dNocRange = 0.025;				
			nNocMa = 9;						
		}
		else 
		{
			dStopLoss = dStopLoss * Point;

			if(dTakeProfit == 700)
				dTakeProfit = 0;			
			dTakeProfit = dTakeProfit * Point;

			dTrailingStop = dStopLoss;
		}

//		bBuy = false;
//		bSell = false;

		nMagic = 20;
	}

	return(0);
}
// ------
int deinit()
{
	return(0);
}

// ------

int start()
{
	if(Bars < nNocInterval + nNocMa)
		return(0);
	
	Report("Noc_1", nMagic, bReportDone);

	// The previous bar just closed
	bool bIsBarEnd = false;
	if(timePrev != Time[0]) 
		bIsBarEnd = true;
	timePrev = Time[0];
	
	if(!bIsBarEnd)
		return(0);
	
	// ------
	
	double dNoc = iCustom(NULL, 0, "_Noc_Ind", nNocInterval, dNocRange, nNocMa, 0, 1);
	double dNocPrev = iCustom(NULL, 0, "_Noc_Ind", nNocInterval, dNocRange, nNocMa, 0, 2);
		
	int nNumOfOpenedOrders = 0;
	for(int nCnt = 0; nCnt < OrdersTotal(); nCnt++)
	{
		OrderSelect(nCnt, SELECT_BY_POS, MODE_TRADES);
		if(OrderMagicNumber() == nMagic)
		{
			if(OrderType() <= OP_SELL)
				nNumOfOpenedOrders++;
		}
	}

	if(bUseMm == true)
	{
		dProfit = 0;
		
		for(nCnt = 0; nCnt < HistoryTotal(); nCnt++)
		{
			OrderSelect(nCnt, SELECT_BY_POS, MODE_HISTORY);
			if(OrderMagicNumber() == nMagic && OrderType() <= OP_SELL)
			{
				dProfit += OrderProfit();
			}
		}   
 	}
 	
	if(nNumOfOpenedOrders == 0)
	{
		if(dNocPrev <= dBuyLevel && dNoc >= dBuyLevel) 
			Buy();
		else if(dNocPrev >= dSellLevel && dNoc <= dSellLevel) 
			Sell();
		
		return(0);
	}
	else
	{
		for(nCnt = 0; nCnt < OrdersTotal(); nCnt++)
		{
			OrderSelect(nCnt, SELECT_BY_POS, MODE_TRADES);
			if(OrderMagicNumber() == nMagic)
			{
				if(OrderType() == OP_BUY)
				{         
					if(dNocPrev >= dSellLevel && dNoc <= dSellLevel)
					{
						OrderClose(OrderTicket(), OrderLots(), Bid, nSlip, Aqua);

						Sell();

						return(0);
					}
				}
				else if(OrderType() == OP_SELL)
				{
        			if(dNocPrev <= dBuyLevel && dNoc >= dBuyLevel)
					{
						OrderClose(OrderTicket(), OrderLots(), Ask, nSlip, OrangeRed);

						Buy();

						return(0);
					}
				}
			}
		}
	}
	
	// ------
	
	for(nCnt = 0; nCnt < OrdersTotal(); nCnt++)
	{
		OrderSelect(nCnt, SELECT_BY_POS, MODE_TRADES);
		if(OrderMagicNumber() == nMagic && OrderSymbol() == Symbol())
		{
			if(OrderType() == OP_BUY)// && Bid - OrderOpenPrice() > dStopLoss) 
			{
				if(OrderStopLoss() < Bid - dTrailingStop - 5 * Point)
				{
					OrderModify(OrderTicket(), OrderOpenPrice(), 
						Bid - dTrailingStop, OrderTakeProfit(), 0, Aqua);

					return(0);
				}
			}
			
			if(OrderType() == OP_SELL)// && OrderOpenPrice() - Ask > dStopLoss)
			{
				if(OrderStopLoss() > Ask + dTrailingStop + 5 * Point)// || OrderStopLoss() == 0)
				{
					OrderModify(OrderTicket(), OrderOpenPrice(), 
						Ask + dTrailingStop, OrderTakeProfit(), 0, OrangeRed);

					return(0);
				}
			}
		}
	}
	
	return(0);
}

// ------

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

	dLotSize = GetLotSize();

	if(dTakeProfit == 0)
		dTp = 0;
	else
		dTp = Bid - dTakeProfit;

	OrderSend(Symbol(), OP_SELL, dLotSize, Bid, nSlip, Bid + dStopLoss, 
		dTp, "Noc_1", nMagic, 0, OrangeRed);

}

// ------

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

	dLotSize = GetLotSize();

	if(dTakeProfit == 0)
		dTp = 0;
	else
		dTp = Ask + dTakeProfit;

	OrderSend(Symbol(), OP_BUY, dLotSize, Ask, nSlip, Ask - dStopLoss, 
		dTp, "Noc_1", nMagic, 0, Aqua);
}
// ------
double GetLotSize()
{
	double dLot = 0.1;
	
	if(bUseMm)
	{
		dLot  = (0.1 * dInitAmount + 0.2 * dProfit) / 1000;

		if(dLot * 2 * dInitAmount > AccountFreeMargin() / nNumOfExperts)
			dLot = AccountFreeMargin() / (2 * dInitAmount * nNumOfExperts);

		dLot = MathFloor(dLot * 10) / 10;
	
		if(dLot < 0.1)
			dLot = 0.1;
	}
	
	return(dLot);
}

// ------


 
2 aydır tek bir hesapta 9 Uzman Danışmanım var. Hepsi benzer bir tasarıma sahiptir:
 bilet=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Bid+StopLoss*Puan,Bid-TakeProfit*Puan,"sell",ExpertMagicNumber,0,Red);
                  if(bilet<0)
                     {
                     Print("OrderSend # hatasıyla başarısız oldu",GetLastError());
                     dönüş(0);
                     }



Günlükler temiz, siparişler verildi.

 
2 aydır tek bir hesapta 9 Uzman Danışmanım var. Hepsi benzer bir tasarıma sahiptir:
 bilet=OrderSend(Symbol(),OP_SELL,Lots,Bid,Slippage,Bid+StopLoss*Puan,Bid-TakeProfit*Puan,"sell",ExpertMagicNumber,0,Red);
                  if(bilet<0)
                     {
                     Print("OrderSend # hatasıyla başarısız oldu",GetLastError());
                     dönüş(0);
                     }



Günlükler temiz, siparişler verildi.



Peki, ne söyleyebilirim? İlk verdiğim Uzman Danışmanımı deneyin. Saatte bir işlem veriyor. Genellikle ikinci işlem bir hata mesajıyla sonuçlanır. Bir günde hata yoksa, bilmiyorum bile ...
 
Kapat, görünüşe göre 10 dakika içinde bir şeyler yapmalı. Umarım benim için diğer danışmanları kırmaz. Ё000, zaten bir sipariş açtı, her saat söz verdin, ama burada bir dakika geçmedi.
 
Kapat, görünüşe göre 10 dakika içinde bir şeyler yapmalı. Umarım benim için diğer danışmanları kırmaz. Ё000, zaten bir sipariş açtı, her saat söz verdin, ama burada bir dakika geçmedi.


İlk seferde hemen bir sipariş açar (bkz. çubuğun başındaki koşulları kontrol etme). Ardından, dokunmazsanız, izin başında. saat.
 
Neyse sirk devam ediyor. İkinci uzman üzerinde Hung Alert. Saatin başında, iki eğrinin kesişmesi bekleniyordu ve dürüstçe bir emir açmaya çalıştı. Bunun yerine - hata numarası 6. Beyler, geliştiriciler?
 
Rosh, dinle, yardımın için teşekkürler, tabii ki. Ama burada düşündüm ki, danışmanım "kendi" işlemlerini sihirli sayılarla takip ediyor. Bu yaklaşımın kullandığınız şeyle uyumlu olup olmadığına dikkatlice bakın, aksi takdirde başkalarının siparişlerini gerçekten kapatmaz. Aynı yaklaşıma sahipseniz (her uzmanın kendi mn'si vardır), o zaman bu uzmanın mn'sinin sizinkiyle kesişmediğinden emin olmanız gerekir.
 
Flud yazma, tk. bu tür yazıları okumak çok üzücü oluyor ve bir şeyler söylemeye ihtiyaç var, özellikle de zaten birkaç bardak yuvarladığım için ...

Umarım Uzman Danışmanını batıran kişi Quark'tır. Henüz kendim kontrol edemiyorum, bilgisayarımdan uzakta bir PDA'dan yazıyorum. Ama bu MT ise, o zaman siktir et ..., ancak hafif süvariler sessiz!
 
Gerçekten sessiz ol :)