오류, 버그, 질문 - 페이지 2450

 
Alexey Navoykov :

오 감사합니다 그런건 저도 몰랐네요. 사실, 당신은 그것을 가지고 있으며 매크로에 대해 걸려 넘어진다고합니다. 그러나 우리는 확실히 확인할 것입니다.

이 프로젝트를 계속 개발하고 있습니까? 따라서 MQL의 많은 부분이 구현되지 않았고 많은 부분이 스텀프 데크(버그)와 개발자를 통해 작동하기 때문에 특히 자체적으로 언어를 개선하는 측면에서 잠재력은 정말 큽니다. , 더 이상 언어 자체를 개선할 계획이 없습니다.

매크로를 처리하려면 추가로 구현해야 합니다. 전체 체인의 시작 부분에 더 가까운 레이어 - 매크로의 문법을 설명하기 위해 소스 코드에서 구문 분석하고 해석합니다 (각 매크로에 대한 결과 소스/값 가져오기). 복잡하고 일부 MQL 프로그래머에게만 응용이 필요하므로 개발이 필요 없다.

제품의 변경 사항을 식별하기 위해 해시를 사용하는 것과 관련하여 이것은 선택 사항이 아닌 것 같습니다(또는 우리가 말하는 사용 사례가 무엇인지 모르겠습니다). 일종의 ex-file을 생성한 후 내장된 특정 모듈과 소스 코드 가 어떤 버전인지 이해하는 데 보통 1~2년이 걸립니다. 이렇게 하려면 분명히 빌드 프로세스를 버전 제어 시스템과 도킹해야 합니다. 해시로는 충분하지 않습니다.

 
Igor Zakharov :

프롬프트, OnTradeTransaction() . 다음은 정상적인 동작입니까? 나는 테스터에서 그것을 확인했다 - 그것은 사실이다 :( 그리고 "라이브" 계정에서?

OnTick()에는 위치를 순서대로 닫는 루프가 있습니다.

OnTradeTransaction()에서 열린 위치의 수를 계산합니다.

EA는 다음을 수행합니다. 먼저 마감 주기를 끝까지 실행한 다음 OnTradeTransaction으로 전환하고 동일한 순서로 계산을 수행합니다.

다시 말해서 하지마

저것들. 병렬로 작동하지 않고 직렬로 작동합니다.

위의 경우가 정상이라면 OnTradeTransaction()은 하나의 주문만 열거나 닫는 Expert Advisors에서만 안전하게 사용할 수 있음을 알 수 있습니다. 그리드가 다중 기호(또는 발견된 다중 기호 그리드 :) )인 경우 - 알고리즘이 중단됩니다.

문서에서 인용

터미널에서 수동으로 또는 OrderSend()/OrderSendAsync() 거래 함수를 통해 전송된 하나의 거래 요청은 거래 서버에서 여러 개의 연속 거래 거래를 생성할 수 있습니다. 동시에 이러한 거래가 터미널에 도착하는 순서 보장 되지 않으므로 다른 거래가 도착한 후 일부 거래가 수신될 것으로 예상하여 거래 알고리즘을 구축 할 수 없습니다 .

따라서 모든 것이 계산되지만 예상되는 순서대로 계산되지는 않습니다.

OnTradeTransaction()에서 포지션 수를 계산하기로 결정한 이유를 설명할 수 있습니까? 계산이 제대로 구성되지 않으면 불필요한 작업이 발생할 가능성이 배제되지 않습니다. 결국, 한 주기에서 여러 위치를 닫는 경우 각 위치를 닫은 후 모든 위치를 다시 계산할 필요가 없습니다. 주기가 끝난 후 한 번 계산하면 충분합니다. 또는 OnTradeTranscaction()에서 IN 유형의 경우 수량이 1 증가하고 OUT 유형의 경우 감소하도록 구성합니다. 그리고 이 경우에도 위치가 완전히 닫히지 않은 경우 이를 고려해야 합니다.

 
Alexey Viktorov :

OnTradeTransaction()에서 포지션 수를 계산하기로 결정한 이유를 설명할 수 있습니까?

각 틱을 계산하면 리소스 집약적이며 특히 전략 테스터에서 두드러집니다. Trade 이벤트에서만 다시 계산하는 것이 더 정확하지 않습니까? 공석 목록에서 실제로 변경되는 사항은 언제입니까? OnTradeTransaction()은 Expert Advisor의 작업에서 사용자 개입에 대한 제어를 단순화합니다. (전례가 있습니다 :)

이 로봇에서 무익 + 수익성 > X 구성표에 따라 그리드를 닫을 가능성을 테스트한 다음 둘 다 닫습니다(일반적으로 다른 기호). 그러나 실패가 발생하기 때문입니다. 그들이 닫혀 있다는 사실에도 불구하고 테스터는 그것에 대해 알지 못하고 다음 반복으로 진행하여 기존 항목을 이미 닫힌 항목과 잘못 "짝짓기"합니다. 저것들. 각 닫기 후에 다시 계산을 추가해야 했습니다.

카운터 재설정으로 다시 계산하고 모든 열린 항목에 대해 먼저 +1 / -1이 아닌 다시 계산합니다.

알렉세이 빅토로프 :

문서에서 인용

처음부터 OnTradeTransaction()을 사용 하는 것은 위험하다는 데 동의합니다. 일반적으로 요청 이 비동기적이지 않고 문제가 있는 경우에는 거부할 것입니다.

 
fxsaber :

다중 문자 그리드의 경우 비동기가 좋습니다. 그래서 나는 두 번째 옵션을 선택할 것입니다.

나는 이미 그 라인을 따라 생각하고 있습니다 ;)

 
Igor Zakharov :

***

이 로봇에서 무익 + 수익성 > X 구성표에 따라 그리드를 닫을 가능성을 테스트한 다음 둘 다 닫습니다(일반적으로 다른 기호).

***

이 두 위치를 정확히 마감해야 한다는 것을 알고 있다면 이 위치의 티켓을 기억하고 닫을 때까지 닫는 것이 좋습니다. 여전히 이 티켓이 있는 위치입니다. 그렇다면 다시 닫으려고 시도하고 OnTick을 종료합니다.)

 
Vladimir Karputov :

이 두 위치를 정확히 마감해야 한다는 것을 알고 있다면 이 위치의 티켓을 기억하고 닫을 때까지 닫는 것이 좋습니다. 여전히 이 티켓이 있는 위치입니다. 그렇다면 다시 닫으려고 시도하고 OnTick을 종료합니다.)

소중한 아이디어. 아마도 그럴까요?: OnTick()은 티켓으로 배열을 형성하고 한 번 닫으려고 시도하고 OnTimer()는 더 이상 있는지 확인하고 있으면 닫습니다.

틱 사이에 몇 분이 있을 수 있으므로 작업을 타이머로 전송합니다.
 
Igor Zakharov :

소중한 아이디어. 아마도 그럴까요?: OnTick()은 티켓으로 배열을 형성하고 한 번 닫으려고 시도하고, OnTimer()는 더 있는지 확인하고 더 있으면 닫습니다.

틱 사이에 몇 분이 있을 수 있으므로 작업을 타이머로 전송합니다.

나는 포지션 마감 작업을 위해 Sleep과 OnTimer를 모두 버릴 것입니다. 나는 이것을 할 것입니다 : 닫기 명령 - OnTick 종료, 다음 틱 확인 : 필요한 티켓이있는 위치가 아직 살아있는 경우 - onTick의 입구 / 출구를 통해 원을 따라 다시 닫으라는 명령을 실행합니다.

논리는 다음과 같습니다. 포지션을 청산하는 것이 최우선이므로 청산 주기는 OnTick의 맨 처음에 있습니다. 그리고 마감 티켓 배열의 형성은 OnTick의 어느 곳에서나 가능합니다. 적어도 맨 마지막에는 말이죠.


이고르 자카로프 :

***

틱 사이에 몇 분이 있을 수 있으므로 작업을 타이머로 전송합니다.

따라서 할 일이 없습니다. 새 틱을 기다리십시오.

Совершение сделок - Торговые операции - MetaTrader 5
Совершение сделок - Торговые операции - MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 
Igor Zakharov :

OnTick()은 티켓으로 배열을 형성하고 한 번 닫으려고 하는 반면, OnTimer()는 티켓이 더 있는지 확인하고 있으면 닫습니다.

또 다른 옵션(실제 - 그게 전부), 가상 환경에서 어드바이저 시작(이상적인 실행이 있음) 및 실제 생활에서는 가상 환경과의 동기화만 가능합니다.

 
Vladimir Karputov :

따라서 할 일이 없습니다. 새 틱을 기다리십시오.

예를 들어 네트워크에 장애가 발생한 경우 다음 틱을 기다리는 것은 닫을 기회를 놓치는 것입니다.

 
fxsaber :

예를 들어 네트워크에 장애가 발생한 경우 다음 틱을 기다리는 것은 닫을 기회를 놓치는 것입니다.

네트워크 오류 == 연결 끊김을 의미합니까? 음, 인터넷이 없습니다. 즉, 아무것도 닫거나 열 수 없습니다. 여기서 놓친 기회는 무엇입니까?

그리고 일반적으로 거래 시스템이 모든 재채기(거기 또는 다른 것)에 매우 민감하다면 그러한 거래 시스템은 용광로에 있습니다.