실행 정책을 반환합니다. - 페이지 2

 
Vladimir Karputov :

거래 클래스 CTrade의 예. 먼저 ' SYMBOL_FILLING_FOK '를 확인한 다음 ' SYMBOL_FILLING_IOC '를 확인합니다.


확인은 ' Bitwise AND '로 완료됩니다.

비트 AND 연산

x 및 y의 이진 표현의 비트 연산 AND. 표현식의 값은 x와 y가 모두 0이 아닌 값을 포함하는 모든 비트에서 1(TRUE)을 포함합니다. 다른 모든 비트에서는 0(FALSE)입니다.


예시:


비트 연산 에 대한 추가 정보.

글쎄, 이 코드에 따르면, 실행 정책은 ioc 또는 fok 중 하나이거나 둘 중 하나이며 둘 중 하나가 동시에 있을 수 없다는 것이 밝혀졌습니다. 아니면 제가 또 오해한건가요?
 
동시에 두 개가 모두 같을 수는 없습니까? 동시에 두 개가 있도록 함수는 무엇을 반환해야 합니까?
 
방금 답변을 잘못 이해했습니다. 당신은 하나의 거래 계정과 관련하여가 아니라 일반적으로 의미했습니다. 도와 주셔서 감사합니다.
 
Ivan_Invanov :
동시에 두 개가 모두 같을 수는 없습니까? 동시에 두 개가 있도록 함수는 무엇을 반환해야 합니까?
아마도 2, 그러면 함수는 3을 반환할 것입니다. 그러나 이것은 일반적인 상황이 아닙니다. 선택지가 3개뿐이라는 점을 고려하면 1, 2 또는 1 + 2의 합이 될 수 있습니다. 세 번째 옵션이 아니라 합계입니다. 따라서 비트 연산 으로 확인하는 것은 다음과 같은 질문에만 답할 수 있습니다. 이 채우기 정책을 적용할 수 있습니까? 아니면 저 채우기 정책을 적용할 수 있습니까?
 
Ivan_Invanov :
동시에 두 개가 모두 같을 수는 없습니까? 동시에 두 개가 있도록 함수는 무엇을 반환해야 합니까?

MetaQuotes-Demo 서버에서 두 문자를 확인하는 예:

 2020.07 . 19 07 : 35 : 07.922 Info_FILLING (USDRUB,H1)        MetaQuotes-Demo
2020.07 . 19 07 : 35 : 07.922 Info_FILLING (USDRUB,H1)        Fill or Kill, SYMBOL_FILLING_FOK : false
2020.07 . 19 07 : 35 : 07.922 Info_FILLING (USDRUB,H1)        Immediate or Cancel, SYMBOL_FILLING_IOC : true
2020.07 . 19 07 : 35 : 07.922 Info_FILLING (USDRUB,H1)        Return: true
2020.07 . 19 07 : 35 : 07.922 Info_FILLING (USDRUB,H1)        Flags of allowed order filling modes: SYMBOL_TRADE_EXECUTION_INSTANT
2020.07 . 19 07 : 35 : 07.922 Info_FILLING (USDRUB,H1)        
2020.07 . 19 07 : 35 : 45.291 Info_FILLING (EURUSD,H1)        MetaQuotes-Demo
2020.07 . 19 07 : 35 : 45.291 Info_FILLING (EURUSD,H1)        Fill or Kill, SYMBOL_FILLING_FOK : true
2020.07 . 19 07 : 35 : 45.291 Info_FILLING (EURUSD,H1)        Immediate or Cancel, SYMBOL_FILLING_IOC : false
2020.07 . 19 07 : 35 : 45.291 Info_FILLING (EURUSD,H1)        Return: true
2020.07 . 19 07 : 35 : 45.291 Info_FILLING (EURUSD,H1)        Flags of allowed order filling modes: SYMBOL_TRADE_EXECUTION_INSTANT

다음 기호에 대한 사양(채우기)을 살펴봅니다.



여기에 더 일반적인 옵션이 있습니다. 기호에 대해 모든 채우기를 사용할 수 있는 경우

 2020.07 . 19 07 : 40 : 22.818 Info_FILLING (NZDUSD,H1)        MetaQuotes-Demo
2020.07 . 19 07 : 40 : 22.818 Info_FILLING (NZDUSD,H1)        Fill or Kill, SYMBOL_FILLING_FOK : true
2020.07 . 19 07 : 40 : 22.818 Info_FILLING (NZDUSD,H1)        Immediate or Cancel, SYMBOL_FILLING_IOC : true
2020.07 . 19 07 : 40 : 22.818 Info_FILLING (NZDUSD,H1)        Return: true
2020.07 . 19 07 : 40 : 22.818 Info_FILLING (NZDUSD,H1)        Flags of allowed order filling modes: SYMBOL_TRADE_EXECUTION_INSTANT

및 사양


 
감사하다.
 
Alexey Viktorov :
아마도 2, 그러면 함수는 3을 반환할 것입니다. 그러나 이것은 일반적인 상황이 아닙니다. 선택지가 3개뿐이라는 점을 고려하면 1, 2 또는 1 + 2의 합이 될 수 있습니다. 세 번째 옵션이 아니라 합계입니다. 따라서 비트 연산 으로 확인하는 것은 다음과 같은 질문에만 답할 수 있습니다. 이 채우기 정책을 적용할 수 있습니까? 아니면 저 채우기 정책을 적용할 수 있습니까?
하나의 변수가 두 개의 멤버를 반환하는 방법을 여전히 이해하지 못했습니다. 그리고 한 멤버에서 값 3을 반환하면 비트 연산이 작동하지 않습니다. 저는 EXECUTION_INSTANT 모드를 선택하기로 결정했고 항상 FOK 정책을 사용할 것입니다.
 
Ivan_Invanov :
하나의 변수가 두 개의 멤버를 반환하는 방법을 여전히 이해하지 못했습니다. 그리고 한 멤버에서 값 3을 반환하면 비트 연산이 작동하지 않습니다. 저는 EXECUTION_INSTANT 모드를 선택하기로 결정했고 항상 FOK 정책을 사용할 것입니다.

이해하려면 플래그가 무엇인지 이해해야 합니다.

플래그의 다음 각 값은 이전 값에 2를 곱한 값입니다. 즉, 1, 2, 4, 8, 16, 32……… 따라서 값이 33이면 1과 32만 있다는 의미입니다. 또한 값 18이 16과 2로만 구성될 수 있는 경우 이미 영향을 받은 3은 1과 2로만 구성될 수 있습니다.

따라서 비트 단위 연산 은 플래그의 합에서 확인된 값인지 여부를 확인합니다. 임의의 숫자가 18에 있는지 확인하면 값 2와 16을 확인하는 것 외에는 false가 됩니다.

 
Alexey Viktorov :

이해하려면 플래그가 무엇인지 이해해야 합니다.

플래그의 다음 각 값은 이전 값에 2를 곱한 값입니다. 즉, 1, 2, 4, 8, 16, 32……… 따라서 값이 33이면 1과 32만 있다는 의미입니다. 또한 값 18이 16과 2로만 구성될 수 있는 경우 이미 영향을 받은 3은 1과 2로만 구성될 수 있습니다.

따라서 비트 단위 연산 은 플래그의 합에서 확인된 값인지 여부를 확인합니다. 임의의 숫자가 18에 있는지 확인하면 값 2와 16을 확인하는 것 외에는 false가 됩니다.

예, 이진 시스템의 비트로 작업하는 방법을 이해합니다.

   uint filling=( uint ) SymbolInfoInteger (symbol, SYMBOL_FILLING_MODE );
   if ((filling& SYMBOL_FILLING_FOK )== SYMBOL_FILLING_FOK )
     {
      m_type_filling= ORDER_FILLING_FOK ;

이 코드는 예를 들어 3을 반환한 함수를 종료합니다.

(11&1)==1 ; 11==01 아니요, 그건 거짓입니다. 작동하지 않았습니다.

나는 이것을 쓰고 있었고 아마도 조작을 잘못 이해하고 있다고 생각했습니다.

&는 10진수 값을 2진수로 변환하고 비트 연결을 수행한다는 것을 의미합니다.

== 첫 번째 항이 두 번째 항과 같으면 참입니다. 그런거야?

 
드디어 도착했습니다. 비트에 값이 있으면 이 플래그는 참이고 트리플은 값을 두 비트로 설정합니다. 그런데 왜 이 코드가 작동할까요?