실수 번호 6 - 페이지 29

 
로그를 보냈습니다.
이 코드를 어디에 넣을까요?
 동안(!IsStopped() && !IsTradeAllowed()) 절전(1000);
    GlobalVariableSet(strTradeSemaphore, 0.0);


시작 기능 종료 시
 
Sleep()을 선택했습니다.
눈에 띄는 개선 없이 최대 100,000

교체됨
 if(!IsTesting())
	{
		수면(1000);
		GlobalVariableSet(strTradeSemaphore, 0.0);
	}



 동안(!IsStopped() && !IsTradeAllowed()) 절전(1000);
    GlobalVariableSet(strTradeSemaphore, 0.0);



같은 고추.
오류 146

 
후에. 몇 가지 생각 후에 정확한 방법이 있음이 밝혀졌습니다. 나는 그것을 공식화하려고 노력할 것이다.
    동안(!IsStopped() && !IsTradeAllowed()) 절전(1000);
    GlobalVariableSet(strTradeSemaphore, 0.0);


즉, 우리는 우리가 점유한 거래 컨텍스트의 해제를 기다리고 있습니다.

일반적으로 예외적으로 이상한 상황입니다. 거래 작업 후 컨텍스트가 즉시 해제됩니다. 그렇지 않으면 사이클에서 포지션을 청산하는 것이 불가능할 것입니다.



다시.

위의 코드는 트레이드 플래그가 지워지면 EA를 정지시킵니다.
아무도 세마포어 신호를 보내지 않기 때문에 거래가 완전히 중단됩니다. 이 상황은 플래그가 손으로만 제거되기 때문에 최소한 어떻게든 제어할 수 있습니다.
세마포어를 사용하면 상황이 더 나빠집니다. GlobalVariableSet 은 세마포어를 닫을 때 다른 Expert Advisor에 떨어질 수 있습니다. 결과적으로 여러 Expert Advisors가 동시에 거래를 시도합니다.
보시다시피, 개발자들 사이에는 터미널에서 발생하는 비동기 프로세스에 대한 완전한 오해가 있습니다. 그리고 이 오해는 포럼으로 내보내집니다.
여기서 논의된 것과 같은 치명적인 오류가 나타나는 것은 놀라운 일이 아니며 이러한 오류는 수정할 수 없습니다.

나쁜 조언을 합니까?
 
вредные 조언을 합니까?

고문이 이 장소에 도달했다면 무역 깃발이 꽂혀 있다고 가정합니다!
 
Зачем давать вредные советы?

고문이 이 장소에 도달했다면 무역 깃발이 꽂혀 있다고 가정합니다!

그러한 가정의 근거는 무엇입니까? 가정이 현실과 일치하지 않으면 예상치 못한 오류가 나타납니다.
플래그는 넌센스입니다.
동기화, 뮤텍스, 공유 리소스 - 문제는 현실입니다. 사용자 수준에서 전역 변수 를 사용하여 문제를 해결하도록 조언하는 것은 말도 안됩니다. 특히 예제가 작동하지 않기 때문에.
 
Sun\Mon 자정 12시부터 전문가들이 MQ-demo와 Alpari-demo를 작업했습니다. 항상 거기에 오류 128이 없었고 Alpari에는 하나의 오류 6(ping 오류)이 있었고 둘 다 - 여러 오래된 틱이 있었습니다. 주문은 완벽하게 처리되었습니다. 05.10에서 빌드 1.8.3. 아마도 다른 것입니까? 예를 들어, 다른 인터넷 제공업체의 443번 포트를 통해 연결하는 구체적인 내용은 무엇입니까? 결국 MT3에는 오류가 있었지만 이러한 양은 없었습니다.


아아. "밤 12시부터"는 통계가 아닙니다. 알 수 없는 이유로 문제는 파도처럼 오고 때로는 그렇지 않고 때로는 여러 번에 걸쳐 발생합니다.
 

Quark, 양심을 가지고 포럼에 그런 로그를 게시하지 마십시오 =)))))


나는 생각했다 - 누가 (Kindzadz의 바이올리니스트의 음색으로) 상관 :))


닫힘/열림이라는 현실을 대가로 모든 기능을 확인하고 오류가 표시되지만 이는 FALSE 오류입니다. 로그와 주문 내역을 확인했는데 모든 포지션이 닫혔습니다. 명령이 역사로 이동할 시간이 없다는 것입니다. 확인하기 전에 1초 정도 지연을 시켰는데 이 정도면 충분하지 않습니다... 물어보니 답이 없더군요.


좋은 생각입니다. 그러나 한 시간 후에도 주문이 사라지지 않은 경우, 즉 때로는 거짓이 아닌 경우가있었습니다.
저도 10초 딜레이가 있습니다.
 
좋은 생각입니다. 그러나 한 시간 후에도 주문이 사라지지 않은 경우, 즉 때로는 거짓이 아닌 경우가있었습니다.
저도 10초 딜레이가 있습니다.

내 모든 실수는 코드에 있었다 =) 즉. 주문 마감 후 확인을 잘못했습니다.
수정하고 나니 없습니다. 사실이야, 오랜만이야, 우리는 기다려야 할거야...
 

내 모든 실수는 코드에 있었다 =) 즉. 주문 마감 후 확인을 잘못했습니다.
수정하고 나니 없습니다. 사실이야, 오랜만이야, 우리는 기다려야 할거야...


수정된 코드는 어떻게 생겼습니까?
 
수정된 코드는 어떻게 생겼습니까?

주문 닫기:
 //---- 위치가 실제로 닫혀 있는지 확인하고 그렇지 않은 경우 정보를 표시하고 종료하고 -5를 반환합니다.
	( int x = 0; x < 5; x++ )
	{
		수면(1000);
		if ( OrderSelect( Close_OrderTicket, SELECT_BY_TICKET ) )
		{
			if ( OrderCloseTime() <= 0 )
			{
				Processing_Error( 0, "주문 마감" );
				_Return_ ( 3, "오류", 0, "포지션이 마감되지 않았습니다", "OrderClose(...)", "포지션이 마감되지 않았습니다" );
				반환(-5);
			}
			또 다른
			{ 부서지다; }
		}
		Close_GetLastError = GetLastError();
		_Print_ ( 3, "OrderSelect( " + Close_OrderTicket + ", SELECT_BY_TICKET )", ​"오류 번호" + Close_GetLastError + " ( " + ErrorDescription( Close_GetLastError ) + " )" );
	}


주문 보내기 - 두 번째 일시 중지와 함께 주문을 선택하기 위해 5번만 시도합니다.
수정을 위해 - 이전 값을 현재 값과 비교