모스 식 부호 - 페이지 5

 
모스 부호 버전 "1.004": 버그 수정 - 패턴이 거꾸로 읽혔습니다.
파일:
Morse_code.mq5  15 kb
 
Vasiliy Sokolov :

질문: 64비트에서 요구되는 조합과 일치하는 조합이 시장에 나타날 확률은 얼마입니까? 답: (1/2^64)*BarsCount. 저것들. 100%에 가까운 확률로 이러한 조합을 찾을 수 없습니다. 저것들. 분명히 int 또는 long 숫자만으로는 패턴을 완전히 설명할 수 없으므로 패턴의 길이를 나타내는 추가 매개변수가 필요합니다.

이것은 64비트를 모두 본 경우입니다. 그러나 이것은 분명히 불필요한 것입니다.

비슷한 연구를 해보니 촛대 패턴의 길이를 5 이상으로 하는 것은 바람직하지 않다는 것을 알게 되었습니다. 또한 "강세-약세" 막대를 구분할 뿐만 아니라 크기로 구분한다면 이 길이도 너무 크면 길이가 3이면 충분합니다.

패턴의 길이가 길면 "특징"을 설정하고 길이를 최소값과 최대값으로 제한하는 것이 훨씬 더 편리합니다.

 

나는 아직 그것을 형성하지 않았지만 일반적으로 아이디어는 다음과 같습니다: 두 개의 매개변수 - 길이와 0에서 3 사이의 int 매개변수. 이 숫자는 이미 EA(의사 비트 표현) 내부에서 해석되고 있습니다.

정수 길이(일명 마스크) 의사 비트 표현
0 엑스 0
하나 엑스 하나
2 더블 엑스 00
삼 더블 엑스 01
4 더블 엑스 십
5 더블 엑스 열하나
6 트리플 엑스 000
7 트리플 엑스 001
여덟 트리플 엑스 010
아홉 트리플 엑스 011
십 트리플 엑스 100
열하나 트리플 엑스 101
12 트리플 엑스 110
열셋 트리플 엑스 111

이러한 매개변수를 인코딩하는 방법을 결정해야 합니다. 정면 솔루션: 각 int 매개변수(테이블의 첫 번째 열)가 의사 비트 표현(세 번째 열)에 해당하는 구조입니다. 마스크가 5자(ххххх)로 제한되어 있으면 구조가 그리 크지 않은 것으로 판명됩니다.

그리고 가장 중요한 것은 최적화 프로그램을 사용하여 구조를 분류할 수 있다는 것입니다!

 

3개의 양초의 경우 속성 창에서 3개의 개별 매개변수를 만들 수 있습니다. 하나의 돌을 가진 두 마리의 새가 시각적으로나 최적화되어 한 번에 죽습니다.

양초 10개도 마찬가지입니다.

 
Dmitry Fedoseev :

3개의 양초의 경우 속성 창에서 3개의 개별 매개변수를 만들 수 있습니다. 하나의 돌을 가진 두 마리의 새가 시각적으로나 최적화되어 한 번에 죽습니다.

양초 10개도 마찬가지입니다.

지원하다

 input bool svecha1 = true ;
input bool svecha2 = false ;
input bool svecha3 = true ;
input bool svecha4 = false ;
input bool svecha5 = true ;
 
Vladimir Karputov :

나는 아직 그것을 형성하지 않았지만 일반적으로 아이디어는 다음과 같습니다: 두 개의 매개변수 - 길이와 0에서 3 사이의 int 매개변수. 이 숫자는 이미 EA(의사 비트 표현) 내부에서 해석되고 있습니다.

정수 길이(일명 마스크) 의사 비트 표현
0 엑스 0
하나 엑스 하나
2 더블 엑스 00
삼 더블 엑스 01
4 더블 엑스 십
5 더블 엑스 열하나
6 트리플 엑스 000
7 트리플 엑스 001
여덟 트리플 엑스 010
아홉 트리플 엑스 011
십 트리플 엑스 100
열하나 트리플 엑스 101
12 트리플 엑스 110
열셋 트리플 엑스 111

이러한 매개변수를 인코딩하는 방법을 결정해야 합니다. 정면 솔루션: 각 int 매개변수(테이블의 첫 번째 열)가 의사 비트 표현(세 번째 열)에 해당하는 구조입니다. 마스크가 5자(ххххх)로 제한되어 있으면 구조가 그리 크지 않은 것으로 판명됩니다.

그리고 가장 중요한 것은 최적화 프로그램을 사용하여 구조를 분류할 수 있다는 것입니다!


다음은 x에서 xxx까지의 마스크에 대한 열거입니다.

 //+------------------------------------------------------------------+
//| Enum pattern type: numerical or string                           |
//+------------------------------------------------------------------+
enum ENUM_PATTERN_MASK
  {
   _0=B '0' ,       // 
   _1=B '1' ,       //  
   _2=B '00' ,       // 
   _3=B '01' ,       // 
   _4=B '10' ,       // 
   _5=B '11' ,       // 
   _6=B '000' ,     // 
   _7=B '001' ,     // 
   _8=B '010' ,     // 
   _9=B '011' ,     // 
   _10=B '100' ,     // 
   _11=B '101' ,     // 
   _12=B '110' ,     // 
   _13=B '111' ,     // 
  };
 

모스 부호 버전 "1.005"

해결책은 다음과 같습니다. 마스크는 열거형으로 제공됩니다.

 //+------------------------------------------------------------------+
//| Enum pattern mask                                                |
//+------------------------------------------------------------------+
enum ENUM_PATTERN_MASK
  {
   _0    =   0     ,   // 0
   _1    =   1     ,   // 1

   _2    =   2     ,   // 00
   _3    =   3     ,   // 01
   _4    =   4     ,   // 10
   _5    =   5     ,   // 11

   _6    =   6     ,   // 000
   _7    =   7     ,   // 001
   _8    =   8     ,   // 010
   _9    =   9     ,   // 011
   _10   =   10    ,   // 100
   _11   =   11    ,   // 101
   _12   =   12    ,   // 110
   _13   =   13    ,   // 111

   _14   =   14    ,   // 0000
   _15   =   15    ,   // 0001
   _16   =   16    ,   // 0010
   _17   =   17    ,   // 0011
   _18   =   18    ,   // 0100
   _19   =   19    ,   // 0101
   _20   =   20    ,   // 0110
   _21   =   21    ,   // 0111
   _22   =   22    ,   // 1000
   _23   =   23    ,   // 1001
   _24   =   24    ,   // 1010
...

OnInit()에서 마스크는 ConvertNumberToString 함수의 문자열 변수 " sExtMorseCode "(변수 " sExtMorseCode "는 전역 프로그램 수준에서 선언됨)로 변환됩니다.

 //+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
bool ConvertNumberToString( const ENUM_PATTERN_MASK num_mask, string &text)
  {
   bool result= true ;
//---
   switch (num_mask)
     {
       case 0 :  text= "0" ; break ;
       case 1 :  text= "1" ; break ;
       case 2 :  text= "00" ; break ;
       case 3 :  text= "01" ; break ;
       case 4 :  text= "10" ; break ;
       case 5 :  text= "11" ; break ;
       case 6 :  text= "000" ; break ;
       case 7 :  text= "001" ; break ;
       case 8 :  text= "010" ; break ;
       case 9 :  text= "011" ; break ;
       case 10 : text= "100" ; break ;
...
       case 53 : text= "10111" ; break ;
       case 54 : text= "11000" ; break ;
       case 55 : text= "11001" ; break ;
       case 56 : text= "11010" ; break ;
       case 57 : text= "11011" ; break ;
       case 58 : text= "11100" ; break ;
       case 59 : text= "11101" ; break ;
       case 60 : text= "11110" ; break ;
       case 61 : text= "11111" ; break ;
       default : text= "" ; return ( false );
     }
//---
   return (result);
  }

두 가지 문제 해결:

하나). 사용자는 입력 매개변수에서 "0101" 형식의 패턴을 봅니다.

입력 매개변수의 편리한 보기

2). 입력 매개변수는 테스터의 최적화에 완벽하게 적합합니다.

파일:
Morse_code.mq5  20 kb
 
Vladimir Karputov :

모스 부호 버전 "1.005"

두 가지 문제 해결:

하나). 사용자는 입력 매개변수에서 "0101" 형식의 패턴을 봅니다.

2). 입력 매개변수는 테스터의 최적화에 완벽하게 적합합니다.

사용자가 원래 아이디어에 따라 수학적 계산 없이 양초 조합을 설정할 수 있습니까?

 
Pyxis :

사용자가 원래 아이디어에 따라 수학적 계산 없이 양초 조합을 설정할 수 있습니까?


예, 수학적 계산 없이. 이제 조합을 수동으로 입력할 필요가 없습니다. " 패턴 마스크 " 드롭다운 목록에서 적절한 양초 조합을 선택하기만 하면 됩니다.
 
테스터(전체 최적화) 모스 코드 버전 "1.005" 에서 실행했습니다. 가장 순수한 형태로 패턴(지금과 같이)은 전혀 비정상적이지 않습니다.