MQL4 및 MQL5에 대한 초보자 질문, 알고리즘 및 코드에 대한 도움말 및 토론 - 페이지 1688

 
자, 전문가 여러분, 여기서 마법 증가가 2에서 멈추고 고유하지 않은 이유를 설명하십시오. 10개의 주문이 소스 코드에서 열리며 각각에 고유한 증분을 통해 고유한 마법이 할당되어야 합니다. 고유성은 중첩 루프에서 비교(!=)하여 확인됩니다. 하나의 매직 증분에서 모든 주문, 일치하는 항목이 없으면 고유한 항목이 일치하지 않는 항목의 수와 같으며 주문의 수보다 크거나 같으면 마법이 고유하고 주문에 할당됩니다.

제가 복잡하게 설명을 하고 있는 것인지도 모르겠지만, 코드를 보시면 이해가 더 쉬울 것 같습니다.
파일:
 
pribludilsa # :
문제는 핸디캡에 위치 수를 부여하여 모든 배열을 채울 수 있기 때문에 핸디캡이 편리하다는 것입니다. ArrayResize가 위치 수와 연결되어 있기 때문에 0이 입력되면 모든 것이 중단됩니다. 따라서 위치 수가 0보다 크면 이 주기에 추가 조건이 있습니다. 나는 또한 이것과 끊임없이 혼란스러워서 이제 모든 것을 다시 확인했습니다. 그렇지 않으면 for가 for가 필요한 배열의 0 요소를 채우지 않기 때문에 그들은 올바르게 조언합니다.

예, 이것 때문에 지속적인 문제가 있습니다. 도입된 명확성으로 인해 버그 수정에 소요되는 시간이 크게 줄어들기를 바랍니다.

 
Nerd Trader # :
자, 전문가 여러분, 여기서 마법 증가가 2에서 멈추고 고유하지 않은 이유를 설명하십시오. 소스 코드에서 10개의 주문이 열리고 각각에 고유한 매직을 할당해야 합니다. 고유성은 중첩 루프에서 비교(!=)하여 확인합니다. 하나의 매직 증분에서 모든 주문, 일치하는 항목이 없으면 고유한 항목은 이러한 일치하지 않는 항목의 수와 같고 주문의 수와 같으면 마법이 고유하고 주문에 할당됩니다.

제가 복잡하게 설명을 하고 있는 것인지도 모르겠지만, 코드를 보시면 이해가 더 쉬울 것 같습니다.

다른 마법으로 10개의 주문을 생성하는 주기가 필요하다면 그렇게 해야 합니다.

     for ( int i = 0 ; i < 10 ; i ++)
    { 
     int order_send = OrderSend ( Symbol (), OP_BUY, 0.01 , Bid, 10 ,
     0 , 0 , "" , i, 0 , CLR_NONE);
     if (order_send == - 1 ) ResetLastError ();
    }

이때 i는 주기장 역할 뿐만 아니라 주문을 위한 마법의 역할도 수행합니다.


귀하의 예에는 일종의 rebus를 만든 많은 실수가 있습니다. 그 이유가 무엇인지 철저히 알아내는 사람은 거의 없습니다.

글쎄, 적어도 주문 반복주기는 정확하지 않습니다. 그리고 매직 변수는 로컬이며 지속적으로 재설정됩니다.. (누적되지 않음)

 
Nikolay Ivanov # :

다른 마법으로 10개의 주문을 생성하는 주기가 필요하다면 그렇게 해야 합니다.

이때 i는 주기장 역할 뿐만 아니라 주문을 위한 마법의 역할도 수행합니다.


귀하의 예에는 일종의 rebus를 만든 많은 실수가 있습니다. 그 이유가 무엇인지 철저히 알아내는 사람은 거의 없습니다.

글쎄, 적어도 주문 반복주기는 정확하지 않습니다. 그리고 매직 변수는 로컬이며 지속적으로 재설정됩니다.. (누적되지 않음)

이것은 테스트 코드이며 이러한 주기에서 EA에서 주문이 생성되지 않습니다. 테스트에 끌어들여서는 안 되는 논리가 있습니다. 주문 주기가 정확하지 않은 이유는 무엇입니까? 마법을 초기화해야 하며, 누적될 이유가 없습니다. 그리고 내부에 몇 줄의 코드가 있는 두 개의 중첩 루프만 이해해야 합니다.

 
Nerd Trader # :

예, 이것 때문에 지속적인 문제가 있습니다. 도입된 명확성으로 인해 버그 수정에 소요되는 시간이 크게 줄어들기를 바랍니다.

나도 알아낼 수 없었다. 아이러니하게도 여기에 대한 다른 사용자의 메시지와 동시에 이해하기 시작했습니다. 방금 올바른 복사-붙여넣기를 한 다음 루프 입력만 확인했지만 출력을 잊어버렸기 때문에 알아내고 잘못 썼습니다. 강제로 체크 값을 입력하여 코드를 인쇄하십시오.
 
Nerd Trader # :

이것은 테스트 코드이며, 그러한 주기에서 EA에서 주문이 생성되지 않으며, 테스트에 끌어다 놓을 필요가 없다는 논리가 있습니다. 주문 주기가 정확하지 않은 이유는 무엇입니까? 마법을 초기화해야 하며, 누적될 이유가 없습니다.

아니 -1

 for ( int i = OrdersTotal () - 1 ; i >= 0 ; i --)

이것이 마술로 의도 된 방식이라면 논리 (일반 설계에서)에 오류가 있음이 밝혀졌습니다. 그것을 찾으려면 rebus를 해결해야합니다 ..

 
Nikolay Ivanov # :

아니 -1

이것이 마술로 의도 된 방식이라면 논리 (일반 설계에서)에 오류가 있음이 밝혀졌습니다. 그것을 찾으려면 rebus를 해결해야합니다 ..

그게 다야. 그러나 -1조차도 거기에서 아무 것도 해결하지 못합니다. 왜 오류가 발생합니까? 매직은 고유(마법과 오더 매직 간의 불일치 수)이 오더 수보다 크거나 같을 때 할당됩니다. 마법을 재설정해야 합니다. 그렇지 않으면 5와 6의 마법으로 여러 주문을 닫으면 새 주문이 마지막 주문의 마법보다 더 큰 마법, 즉 11-12 등의 마법을 갖게 됩니다. 그래서 주문을 생성할 때 0으로 하면 처음부터 비교와 반복이 발생합니다. 이것은 닫힌 마법, 즉 5와 6이 있는 새로운 주문을 제공합니다...

 
pribludilsa # :
나도 알아낼 수 없었다. 아이러니하게도 여기에 대한 다른 사용자의 메시지와 동시에 이해하기 시작했습니다. 방금 올바른 복사-붙여넣기를 한 다음 루프 입력만 확인했지만 출력을 잊어버렸기 때문에 알아내고 잘못 썼습니다. 강제로 체크 값을 입력하여 코드를 인쇄하십시오.
mql4에 일반 디버거가 없다는 것이 너무 짜증납니다. 위 소스의 실제 데이터에서도 디버거는 루프에 진입하지 않습니다. 인쇄를 해야 하는데 심각하지 않습니다.
 

일반적으로 여기에서는 모든 것이 간단합니다. 고유한 것은 서로 다른 마술사 간에 일치하지 않는 모든 주문을 요약합니다..

예를 들어 주문이 3개 있습니다.

첫 번째 반복 매직 = 1 고유 = 0, 반복이 끝날 때 고유 = 2

두 번째 반복 마법 = 2   고유 = 2, 반복 종료 시   유일한 것 = 3

3>=모든 주문의 수이므로 while 루프가 중단됩니다. 그리고 magic =3은 확인되지 않았습니다... Total magic again =2 등등 모두에 대해..

 
pribludilsa # :
네, 감사합니다. 그러나 어떤 종류의 목발은 물론 입니다. 그러나 모든 mql과 마찬가지로

더 많은 모든 프로그래밍 언어 를 목표 삼으십시오.

간단합니다. 프로그래밍 언어에서 카운트다운은 0부터 시작합니다. 배열의 첫 번째 셀의 인덱스는 0입니다. 따라서 이를 포함하여 0까지 루프백해야 합니다. 저것들. >=0

OrdersTotal()은 예를 들어 10을 제공합니다. 그리고 10에서 루프를 시작합니다. 그리고 배열의 마지막 인덱스는 9입니다(0에서 시작한다는 것을 기억하십니까?). 그리고 존재하지 않는 배열 셀에 접근하면 어떻게 될까요? 맞습니다 . 어레이에 할당되지 않은 메모리 영역으로 올라간 이후 심각한 오류로 인해 프로그램이 충돌했습니다.

이것은 바로 견고한 목발 입니다. 읽고, 연구하면 모든 것이 당신에게 올 것입니다.