실수 번호 6

 
"거래 서버와 연결되지 않았습니다". 모든 것이 괜찮지만 주문을 열려고 할 때마다 팝업이 나타납니다. MT를 다시 시작합니다. 주문이 즉시 열립니다. 무엇이 잘못되었는지 아는 사람이 있습니까?
 
동시에 개발자에게 질문합니다. 내가 바 시작 부분에서 거래하고 다른 1000명도 거래한다면, 바 시작 부분에 있는 서버가 안 되는 이유가 이거 아닙니까?

대답 좀 해주실 래요. 그렇다면 그냥 연기를 해드리겠지만 먼저 그 이유를 알고 싶습니다.
 
친애하는 개발자 여러분!
나는 약간 다른 표현으로 질문을 반복합니다. 오류 번호 6(견적을 사용할 수 있지만 거래 서버는 없음) - 서버가 시간별 막대의 시작 부분에 과부하가 걸리기 때문입니까? Expert Advisor에서 문제를 찾아야 합니까, 아니면 서버의 부하가 덜한 바 시작 3분 후에 거래를 시작해야 합니까?

같은 시리즈의 두 번째 질문: 많은 전문가가 동시에 있고 모든 사람이 막대 시작 부분에서 무언가를 하고 있다면 문제가 있습니까? 아니면 계산이 딱 맞춰질까요? 예를 들어 Expert Advisor가 계산할 시간이 없었지만 새 틱이 이미 도착한 경우 이전 가격으로 계산이 완료됩니까? 그리고 그것이 새로운 틱이라면 계산(튜토리얼에서 권장하는 코드로 막대의 시작을 확인함)이 여전히 막대의 시작을 표시한다고 보장합니까?

이것들은 중요한 질문입니다. 자세히 설명하고 싶습니다.

감사합니다,
쿼크
 
1. 운영 체제가 무엇입니까?
2. 전문가들은 각자의 스레드에서 병렬로 작업합니다. 새 틱이 도착하고 EA가 여전히 실행 중인 경우 틱은 무시됩니다. Expert Advisor가 작업하는 모든 가격 데이터는 원본으로 유지됩니다(Expert Advisor는 실제로 데이터 복사본으로 작업함). 최신 변경된 데이터를 가져오기 위해 RefreshRates 기능이 있습니다.
 
윈도우 2000

사실, 막대 시작 부분에서 위치를 열려고 할 때 오류 6이 두 번 발생했기 때문에 질문을 했습니다.

부울 bIsBarEnd = 거짓;
if(timePrev != 시간[0]) 
	bIsBarEnd = true;
timePrev = 시간[0];

if(!bIsBarEnd)
	리턴(0);
....



문제는 남아 있습니다. 막대 시작 부분의 모든 것이 더 활성화되어 있기 때문에 서버 과부하 때문입니까? 아니면 다른 이유로?

 
서버에서 올 가능성은 거의 없습니다. 이제 win98에서 이러한 오류를 분석하고 있습니다. 그러나 그것이 발생하는 이유는 분명합니다. 핸들이 충분하지 않습니다.
 
이제 모스크바 시간 13시에 같은 전문가가 오류 번호 2 - 일반적인 오류를 제공했습니다.
Alpari에서 누군가가이 게시물을 읽고 있다면 계정은 116122입니다.

이것은 이러한 종류의 오류에 대한 경고를 제공하는 유일한 전문가 조언자입니다. 데모 Expert Advisor가 있는 사람들은 OrderSend가 -1을 반환하면 경고를 설정할 것을 제안합니다(이 상황이 항상 발생하면 어떻게 될까요?). 다음은 구매 코드입니다. 판매 원칙은 동일합니다.

int nResult = OrderSend(Symbol(), OP_BUY, dLotSize, Ask, nSlip, Ask - dStopLoss, 
	0, "댓글", nMagic, 0, 아쿠아);

if(n결과 == -1)
{
	정수 nError = GetLastError();
	경고(n오류);
}



또한 만일의 경우를 대비하여 논리가 있는 부분(확실히 관련이 없음)을 제외하고 전체 Expert Advisor를 제시합니다. 봐주세요. 그래도 MT라고 생각합니다. EA는 단순히 EURUSD 시간별 차트 에 매달리고 거래 대신 주기적으로 오류를 생성합니다.

첫 번째 실행(Expert Advisor가 차트에 집착하거나 해당 코드를 다시 컴파일할 때)이 오류 없이 정상적으로 작동한다는 점에 주목하고 싶습니다. 즉, 오류가 발생했습니다. 5초 후에 편집기에서 F5를 누르고 Expert Advisor가 시작되고 거래가 열렸습니다.

일반적으로 도와주세요!

double dStopLoss;
int nHoursToHold;

datetime timePrev = 0;
bool bIsFirst = true;

int nSlip = 5;

double dTp = 0;

double dLotSize = 0.1;

int nNumOfExperts = 5;
int nMagic = 0;

//////////////////
int init ()
{
	timePrev = 0;
	
	if(Symbol() == "EURUSD" && Period() == 60)
	{
		dStopLoss = 110 * Point;
		nHoursToHold = 1;
		
		nMagic = 23;
	}

	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]) 
		bIsBarEnd = true;
	timePrev = Time[0];
	
	if(!bIsBarEnd)
		return(0);

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

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

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

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

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

	dLotSize = GetLotSize();

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

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

	dLotSize = GetLotSize();

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

	if(nResult == -1)
	{
		int nError = GetLastError();
		Alert(nError);
	}
}
// ------

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

// ------

int GetSignal()
{
	int nSignal = OP_BUY;
	return(nSignal);
}

// ------


 
서버에서 올 가능성은 거의 없습니다. 이제 win98에서 이러한 오류를 분석하고 있습니다. 그러나 그것이 발생하는 이유는 분명합니다. 핸들이 충분하지 않습니다.


무엇의 손잡이? 이 손잡이가 몇 개나 있습니까? 전문가, 차트 등의 수에 제한이 있나요?

추신 이 질문은 내 이전 게시물을 취소하지 않습니다 :)
 
전문가는 오류 번호 2 - 일반적인 오류를 발행했습니다.
아주 드문 실수 =)
나는 반년 동안 그런 오류를 5 번만 준 전문가가 있습니다.
경고를 희생시키면서 - 그것은 불편합니다. 나는 비누 + 파일에 쓰기에 대한 참조가 있습니다. 곧 해당 기능으로 라이브러리를 완성하겠습니다. 게시하겠습니다.
 
эксперт выдал ошибку номер 2 - common error.
아주 드문 실수 =)
나는 반년 동안 그런 오류를 5 번만 준 전문가가 있습니다.
경고를 희생시키면서 - 그것은 불편합니다. 비누 + 파일 쓰기에 대한 참조가 있습니다. 곧 해당 기능으로 라이브러리를 완성하겠습니다. 게시하겠습니다.


오히려 편리합니다. 경보는 아무 방해가 되지 않고 MT는 계속 작동하지만 바로 볼 수 있습니다... 음... 컴퓨터 앞에 앉아있으면... 네 알겠습니다 :)

"내" EA는 70%의 경우에 이 오류를 생성합니다. 즉, 이것이 아니라 2, 6, 14 .., 한마디로 시스템이 없습니다. 가격을 확인해보니 맞는 것 같은데... MT 소스는 개발자들, 서버들은 Alpari 라서 기본적으로는 이 정도입니다. 다른 사람이 이 작업을 실행하고 자신의 컴퓨터에서 문제를 재현할 수 있음을 확인하면 좋을 것입니다.
 
вряд ли это от сервера. сейчас мы разбираем такую ошибку на вин98. но там понятно отчего происходит - хэндлов не хватает.


무엇의 핸들? 이 손잡이가 몇 개나 있습니까? 전문가, 차트 등의 수에 제한이 있나요?

핸들은 시스템 리소스를 나타냅니다. 열린 위치 목록을 그릴 때 gdi 리소스 누수가 있는 버그를 찾아 무력화했습니다. 프로세스당 핸들 수가 2000보다 훨씬 적은 98에서 거래를 위해 소켓을 열 수 없다는 것을 포함하여 리소스 부족 오류가 매우 빠르게 나타났습니다. 오랜 작업으로 이 오류는 2000년에도 나타납니다. 이 결함이 최신 빌드에서만 나타나는 이유는 자연의 신비입니다.
차트 수에는 제한이 있습니다 - 99. 전문가 수에도 동일한 제한이 있음을 의미합니다.