매직넘버 생성 - 페이지 4

 
7bit :

아니요, 그들은 당신이 원하는 무엇이든 될 수 있습니다. 댓글처럼요. 일종의 숫자 주석으로 볼 수 있습니다. 일반 MT4 사용자 인터페이스로 열린 모든 수동 거래는 매직 넘버 0을 갖기 때문에 예를 들어 모든 EA 거래를 건드리지 않고 모든 주문을 반복하고 모든 수동 거래 및 주문을 마감/삭제할 수 있습니다.

하나의 특정 주문만 고유하게 식별하기 위해 티켓 번호가 있습니다.

정리하고 의견을 공유해 주셔서 감사합니다. 후후.. 많이 배웠습니다..

 
7bit :
 /**
* Rotate a 32 bit integer value bit-wise 
* the specified number of bits to the right.
* This function is needed for calculations
* in the hash function makeMacicNumber()
*/
int bitRotate( int value , int count){
   int i, tmp, mask;
   mask = MathPow( 2 , count) - 1 ;
   tmp = value & mask;
   value = value >> count;
   value = value | (tmp << ( 32 - count));
   return ( value );
}

나는 MathPow()가 필요하지 않습니다. 왜 아무도 이것을 보지 못했습니까?
 /**
* Rotate a 32 bit integer value bit-wise 
* the specified number of bits to the right.
* This function is needed for calculations
* in the hash function makeMacicNumber()
*/
int bitRotate( int value , int count){
   int i, tmp, mask;
   mask = ( 0x00000001 << count) - 1 ;
   tmp = value & mask;
   value = value >> count;
   value = value | (tmp << ( 32 - count));
   return ( value );
}
첫 번째 게시물을 지금 업데이트합니다.
 
7bit :
나는 MathPow()가 필요하지 않습니다. 왜 아무도 이것을 보지 못했습니까?

세 가지 주요 이유가 떠오릅니다.

  • 이미 해싱 함수 를 사용하고 있는 사람은 코드로 이를 대체할 가능성이 낮으므로 코드의 세부 사항에 대해 신경 쓰지 않을 것입니다.
  • 현재 해싱 기능을 사용하고 있지 않지만 그것이 좋은 생각이라고 생각하는 사람은 아마도 당신의 코드와 같은 코드를 신뢰하고 받아들이고 그것이 얼마나 우아하고 최적화되었는지가 아니라 작동 여부에만 관심을 가질 것입니다.
  • MathPow()를 비트 연산으로 교체하면 makeMagicNumber() 호출당 밀리초보다 훨씬 적게 절약됩니다. makeMagicNumber()가 EA의 수명 동안 init()에서 한 번 호출된다고 제안하고 있습니다. 따라서 변경 사항은 EA 수명당 1밀리초 미만을 절약합니다. 그것은 완전히 사소한 변경입니다(그리고 틀림없이 코드의 명확성을 감소시킵니다).
 
jjc : 틀림없이 코드의 명확성을 감소시킵니다.

    나는 그것이 선명도를 감소시킨다고 말하지 않을 것입니다. 내 주요 의도는 성능이 아니라 명확성과 우아함 및 정확성입니다.

    나는 또한 비트 연산자를 전혀 사용하지 않고 실제 비트 시프팅을 수행하기 위해 거듭제곱, 곱셈, 나눗셈(및 모듈로)을 사용할 수 있습니다. 그러나 우아함(또한 명확성)을 위해 나는 독점적으로 하나 또는 다른 것과 함께 수행해야 하지만 혼합해서는 안됩니다. 그리고 함수의 의미는 비트를 이동하는 것이므로 곱셈으로 비트 이동을 수행하는 경우에만 코드를 난독화할 것입니다.

    또한 덧셈과 곱셈이 정수로 수행될 수 있지만 MathPow() 함수 는 내부적으로 대수를 사용하고 근사치와 같은 냄새가 나며 필요한 것에 비해 엄청나게 복잡하지만 이중 값을 사용하고 반환하며 이것은 정수와 아무 관련이 없습니다. n 비트만 이동해야 하는 함수입니다.

    내가 이것을 보지 못했는가 하는 질문을 했어야 했을지도 모른다. 처음에 MathPow()를 사용한 이유는 무엇입니까? 나는 그것을 모른다. 마지막으로 어셈블러를 수행한 것은 15년 전이었습니다. 오늘날 저는 더 높은 추상화의 문제에 대해 생각하는 데 익숙합니다. 아마도 이것이 이유였을 것입니다. 내 두뇌 어딘가에 n번째 비트가 2^n이라는 강한 연결이 있습니다. 나는 그것에 대해 잠시 생각하지 않고 이것을 썼습니다. 어셈블러 프로그래머는 결코 이것을 하지 않았을 것입니다. 왼쪽으로 이동하면 2를 곱하고 2를 곱하면 왼쪽으로 이동합니다.

     
    여러분, 왜 같은 tf와 같은 설정을 가진 기호를 실행하는 둘 이상의 전문가가 필요한지 궁금하십니까?

    지속성을 위한 내 솔루션은 int의 32비트를 사용하여 내가 사용하는 tf(그 중 10개), 주문을 연 전문가 버전 또는 거래 방법(그 중 4개 있음)을 유지하는 것입니다. 필요한 경우 아직 많은 비트가 남아 있습니다. 비트 연산과 일부 변환 함수 를 사용하여 이를 처리합니다. 나는 다른 사람들이 이것을 하거나 비슷한 것을 한다는 것을 알고 있지만 이것이 당신의 상황에 충분하지 않은 것 같아서 나는 여전히 내가 한 질문에 대해 내 머리를 감싸려고 노력하고 있습니다.
     
    7bit :

    귀하의 예에서 Symbol()은 어떻게 MN의 일부가 될까요? EA 번호와 Timeframe 번호가 있지만 기호는 어떻습니까?

    그렇지는 않겠지만 내가 사용하고 있는 자금 관리는 MN을 기반으로 합니다. 따라서 이 경우 MM이 모든 미결제 거래를 고려하도록 모두 동일해야 합니다. 나는 항상 내가 개발 중인 EA가 사용하고 MQL4 전략 테스터 에 로깅하고 있는 버전과 TimeFrame을 알고 있고 이를 trade#, 통화 쌍 또는 설명 필드. 저널을 볼 때 거래가 어떤 통화인지 알려줍니다. 분석을 위해 Excel로 전송할 때 원하는 필드별로 정렬할 수 있습니다.
    나는 당신의 접근 방식의 장점을 볼 수 있으며 미래의 어느 시점에서 그것을 활용할 수 있습니다. 그러나 NuB이기 때문에 MQL4.Com의 코드 기반에서 MM을 활용하고 있습니다. 따라서 프로그래밍 학습 곡선의 이 시점에서 MM은 내 우선 순위가 아닙니다. 내가 연결할 수 있는 더 나은 방법을 찾을 수 있다면 MM이 내 우선 순위 목록의 맨 위에 올 때까지 나는 그것을 사용하는 것에 반대하지 않습니다. 우리 NuB는 우리가 얻을 수 있는 모든 도움이 필요합니다!
    이름 및/또는 버전 번호와 관련하여 MN은 숫자만 허용하고 문자는 허용하지 않습니다.
    귀하의 코드를 살펴보지는 않았지만 귀하의 알고리즘이 이름을 MN의 일부로 변환하고 있다고 가정합니다. 이 경우 주소를 지정하는 통화 쌍을 즉시 알려주지 않습니다.
     
    FourX :
    귀하의 알고리즘은 이름을 MN의 일부로 변환하고 있으며 이 경우 주소를 지정하는 통화 쌍을 즉시 알려주지 않습니다.

    모든 문자열을 고유한 정수로 안정적으로 변환합니다. 이 변환은 일방통행이지만 다시 변환할 필요는 없습니다.

    내가 알아야 할 것은 같은 번호의 이러한 거래가 함께 속한다는 것입니다. 루프에서 단 하나의 if()로 이 특정 EA/기호/TF 조합의 모든 거래를 쉽게 찾을 수 있는 ID 번호입니다. 이 숫자에 대해 알아야 할 유일한 사실은 이 숫자가 각 EA/기호/시간 프레임 조합에 대해 고유하고 결정적이며 내 PC가 충돌하기로 결정하더라도 변경되지 않는다는 것입니다.

    논리적으로 함께 속하는 모든 거래는 동일한 MN을 갖습니다. 나중에 어떤 기호가 만들어졌는지 알려야 하는 경우(예: 월말에 통계를 수행하기 위해) 이 주문에 OrderSymbol()을 사용할 수 있습니다.

     
    circlesquares wrote >>
    여러분, 왜 같은 tf와 같은 설정을 가진 기호를 실행하는 둘 이상의 전문가가 필요한지 궁금하십니까?

    지속성을 위한 내 솔루션은 int의 32비트를 사용하여 내가 사용하는 tf(그 중 10개), 주문을 연 전문가 버전 또는 거래 방법(그 중 4개 있음)을 유지하는 것입니다. 필요한 경우 아직 많은 비트가 남아 있습니다. 비트 연산과 일부 변환 함수를 사용하여 이를 처리합니다. 나는 다른 사람들이 이것을 하거나 비슷한 것을 한다는 것을 알고 있지만 이것이 당신의 상황에 충분하지 않은 것 같아서 나는 여전히 내가 한 질문에 대해 내 머리를 감싸려고 노력하고 있습니다.


    다른 사람을 대신할 수는 없지만 주문을 마감하는 데 시간이 걸릴 수 있는 EA가 있으며 이전 주문에서 아직 마감되지 않았기 때문에 새로운 진입점을 놓치고 있습니다. 각 항목을 독립적으로 처리하고 각 거래의 규칙에 따라 각 거래를 따르기를 원합니다(sl 이동, tp가 처음 도달할 때 절반 닫기 등).
     
    joetrader :


    다른 사람을 대신할 수는 없지만 주문을 마감하는 데 시간이 걸릴 수 있는 EA가 있으며 이전 주문에서 아직 마감되지 않았기 때문에 새로운 진입점을 놓치고 있습니다. 각 항목을 독립적으로 처리하고 각 거래의 규칙에 따라 각 거래를 따르기를 원합니다(sl 이동, tp가 처음 도달할 때 절반 닫기 등).

    알겠어요. 그래서 서버 응답을 기다리는 데 묶여 있고 그 동안 다른 주문을 열 수 있습니까?

    그러나 거래 컨텍스트가 바쁘면 주문 관련 작업이 중지되지 않습니까?

    그것이 작동하는 한, 그것이 정말로 중요한 전부라고 생각합니다.

     

    서버 응답이 많지 않고 주문이 열려 있습니다. 따라서 EA는 매수 신호 를 받고 매수한 다음 열린 상태를 유지할 수 있습니다. 몇 시간 후 또 다른 매수 신호가 왔지만 이미 오픈 포지션이 있기 때문에 첫 주문을 마감하기 위해 기다리고 있기 때문에 매수하지 않습니다. 그러나 첫 번째 매수 신호가 두 번째 매수 신호보다 더 수익성이 있을 것이라고 가정하거나 EA가 추가 주문을 열 수 있도록 허용하기 전에 첫 번째 매수 신호가 종료될 때까지 기다리면 얻을 수 있는 것이 있다고 가정할 이유가 없습니다. 그러나 나는 여전히 그것에 대해 연구하고 있으므로 나에게 그것은 여전히 이론입니다. :)

    사유: