モールス符号 - ページ 5

 
モールス信号バージョン「1.004」:パターンを逆から読んでしまう不具合を修正しました。
ファイル:
Morse_code.mq5  15 kb
 
Vasiliy Sokolov:

設問:必要な64桁の数字と一致する組み合わせが市場に出現する確率は?答え:(1/2^64)*BarsCount。つまり、100%に近い確率で、そのような組み合わせは見つからないのです。intまたはlongの1つの数値だけではパターンを完全に表現できないことは明らかなので、パターンの長さを指定する追加のパラメータが必要である。

これは64ビットすべてで見た場合です。しかし、それは明らかに不要なものです。

そのような調査をしたところ、ローソク足のパターンの長さを5より長く取るのは合理的でないことがわかりました。さらに、「ブルベア」だけでなく、バーの大きさでも区別すると、この長さでも長すぎるのです。

長さの大きなパターンがある場合、「特徴量」を指定して、単純に最小値と最大値で長さを制限する方が、はるかに合理的である。

 

まだ正確な形ではありませんが、一般的なアイデアとしては、2つのパラメータ - lengthと0から3までのintパラメータ - があります。Expert Advisor の内部では、すでにこの数値(Pseudobit 表現)を解釈しています。

イント長さ(別名:マスク)疑似ビット表現
0х0
1х1
2xx00
3xx01
4xx10
5xx11
6xxx000
7xxx001
8xxx010
9xxx011
10xxx100
11xxx101
12xxx110
13xxx111

あとは、これらのパラメータをどのようにコーディングするかです。簡単な解決策としては、各intパラメータ(表の1列目)が擬似ビット表現(3列目)に対応する構造であることです。マスクが5文字(xxxxxx)しかない場合、あまり大きな構造にはなりません。

そして、最も重要なことは、オプティマイザーによって構造を並べ替えることができることです。

 

また、プロパティウィンドウで3つのキャンドルに別々のパラメータを作ることができます。一度に二羽の鳥を殺す--明快かつ最適化されたものです。

ローソク足10本でも同じことができます。

 
Dmitry Fedoseev:

また、プロパティウィンドウで3つのキャンドルに別々のパラメータを作ることができます。二兎を追うものは一兎をも得ず、明快かつ最適化されています。

10本のローソク足についても同様とすることができる。

支持する

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

まだ正確な形ではありませんが、一般的なアイデアとしては、2つのパラメータ - lengthと0から3までのintパラメータ - があります。Expert Advisor の内部には、この数値の解釈(Pseudobit 表現)がすでに存在します。

イント長さ(別名:マスク)疑似ビット表現
0х0
1х1
2xx00
3xx01
4xx10
5xx11
6xxx000
7xxx001
8xxx010
9xxx011
10xxx100
11xxx101
12xxx110
13xxx111

あとは、これらのパラメータをどのようにコーディングするかです。簡単な解決策としては、各intパラメータ(表の1列目)が擬似ビット表現(3列目)に対応する構造であることです。マスクが5文字(xxxxxx)しかない場合、あまり大きな構造にはなりません。

そして、最も重要なことは、オプティマイザーによって構造を並べ替えることができることです。


x から xxxx までのマスクの列挙である。

//+------------------------------------------------------------------+
//| 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);
  }

2つの問題を解決しました。

1). ユーザーは,入力パラメータに "0101 "と表示されたパターンを見る。

入力パラメーターの便利な見方

2).入力パラメータはテスターで完璧に最適化されています。

ファイル:
Morse_code.mq5  20 kb
 
Vladimir Karputov:

モールス信号バージョン "1.005"

2つの問題を解決しました。

1). ユーザーは,入力パラメータに "0101 "と表示されたパターンを見る。

2).入力パラメータはテスターで完璧に最適化されています。

ユーザーは、最初のアイデアに従って、数学的な計算を せずにローソク足の組み合わせを指定することができます?

 
Pyxis:

ユーザーが数学的な計算を せずにローソク足の組み合わせを指定できるのは、当初の構想通り?


そう、彼は数学的な計算をしなくてもできるのだ。そして今、あなたは組み合わせを手動で入力する必要はありません - 適切なローソク足の組み合わせを「パターンマスク」のドロップダウンリストから選択するだけです。
 
テスター(完全最適化)モールス信号バージョン「1.005」で実行 - 純粋なパターン(今のような)は全く怪しくありません :(