モールス符号 - ページ 4

 

数値パターンの長さを指定する「パターンの長 パラメータは省きました(このパラメータは最適化モードでのみ 使用されます)。

#property version   "1.003"
#property description "Bull candle - \"1\", bear candle - \"0\""
//---
#include <Trade\Trade.mqh>
CTrade         m_trade;                      // trading object
//+------------------------------------------------------------------+
//| Enum pattern type: numerical or string                           |
//+------------------------------------------------------------------+
enum ENUM_PATTERN_TYPE
  {
   PATTERN_TYPE_NUMERICAL=0,  // numerical
   PATTERN_TYPE_STRING=1,     // string 
  };
//---
input ENUM_PATTERN_TYPE    InpPatternType          = PATTERN_TYPE_STRING;  // pattern type
input uchar                InpLenNumerical         = 3;                    // length of the pattern (use only if pattern "numerical")
input string               InpsMorseCode           = "101";                // string Morse code (max 5 characters)
input ENUM_POSITION_TYPE   InpPosType              = POSITION_TYPE_BUY;    // posinion type
input double               InpLot                  = 0.1;                  // lot
sinput ulong               m_magic                 = 88430400;             // magic number
input ulong                m_slippage              = 30;                   // slippage
//---
string sExtMorseCode="";
int max_string_len=5;         // limitation of the length of the pattern "string"
int i_morse_code=0;           // int Morse code (use only if pattern type=numerical)
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(InpPatternType==PATTERN_TYPE_STRING)
     {
      //--- check start mode
      if(MQLInfoInteger(MQL_OPTIMIZATION))
         return(INIT_PARAMETERS_INCORRECT);
      //--- info print
      Print("The type of the pattern \"string\" is set - the parameters \"pattern length\" and \"int Morse code\" are ignored");

      sExtMorseCode=InpsMorseCode;

また、簡単な防御策として、最適化モードで文字列パターンタイプを選択すると、Expert Advisor は "INIT_PARAMETERS_INCORRECT" を返します

 
Vitalii Ananev:


後でやり直しがきかないように、すべてその場で考えなければならないのです。

....

再び「宵の明星」のパターンに戻ると、強気-小ローソク足-弱気、強気-弱気の取り合いと見ることができる。強気のローソク足と弱気の吸収からなる複合パターンを持っていることを意味します。そして、このパターンの3本のローソク足をすべて合計すると、再びピンバーとなる。



私の5コペックを入れましょう。

この課題は設定されておらず、すべてを一度に予見することは不可能である。 この場合、基本として予定していた最初のコンセプトが失われる。ユーザーが強気と弱気のローソク足の並びを作り、プログラムがその並びを探して取引するのだが、なぜローソク足を一つのパターンでまとめるのか?

 
Pyxis:


私の意見を述べさせてください。

これは課題ではなく、すべてを一度に提供することは不可能で、その場合、メインとして考えられていた本来のコンセプトが失われます。ユーザーは強気と弱気のローソク足のシーケンスを作り、プログラムはそのシーケンスを探してトレードするのですが、なぜローソク足をひとつのパターンにまとめるのでしょうか?


なぜ、まとめるのでしょうか?まあ、例えば、モデルを単純化するために。実際、例としてあげられた。

なぜできないのでしょうか?日本のローソク足で 頻繁に発生する組み合わせは、すべて何らかの方法で符号化することができます。もうひとつは、1ビット(上に書いた)だけでは不十分で、最低でも2ビットを使わなければならないこと、また、パターンモデルを要約(単純化)しなければ不十分であることです。

 

これまでのモールス信号バージョン「1.003」:パターンの文字列記述を手動で指定し、テスターでシングルパスを実行することも可能です。

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


このプログラムは、プログラマーではなく、ユーザーによって使用されます(上記で述べたとおりで、一度もありません)。そして、彼にとって「101」と「5」は2つの異なる数字であり、彼にとって「5」にはローソクの相対位置に関する情報は含まれていませんが、「101」は明らかに「強気、弱気、強気」と述べています。

了解です。さて、それでは - シンボルの文字列とパーサーです。最も自由度の高い選択肢だと思います。
 
George Merts:

プログラマーなのか、カモなのか、よくわからない。

なぜ、何かを何かに翻訳するのか?

コード101が必要な場合 - それは通常の値である5です。それだ、何が問題なんだ?10進数から2進数への精神的な変換を行う?

同じような実験をしたのですが、私のキャンドルは、小さいものから大きいものまで4つのサイズがありました。そのため、キャンドルの大きさは8種類になります。そして、結果的に3ビットになる。パターンでは数字(ulong)を書きます。グリッドは20バーパターンよりも大きくなっています。

この問題は、私に言わせれば、遠回しに言って いるのです。

まず整理してから、批判する。ここで、皆さんに考えていただきたいことがあります。

次のローソク足の組み合わせについて、数値intをエンコードせよ。

  • 1011;
  • 01011;
  • 001011

ヒント:これらは異なる組み合わせです。

ジョージ・マーツ
了解です。では、-文字列とパーサー。私には最も柔軟な選択肢のように思えます。
もう一度:optimizer_not_optimize_string_parameters。オプティマイザーを使わずに、どうやって儲かるパターンの組み合わせを探すのですか?
 
Vasiliy Sokolov:
もう一度:optimizer_will_not_optimize_string_parametersの こと。オプティマイザーを使わずに、どうやって儲かるパターンの組み合わせを探すのですか?

もしオプティマイザーが必要なら、ユーザーは(少なくとも通常のWindows電卓で)数値をバイナリコードに変換できるほど「精通」している必要があると思います。

君、友よ、矛盾した要求をしているね。もし、ユーザーが電卓を使って2進コードを10進コードに変換できないようなバカであれば、いずれにせよ最適化を扱うことはできないでしょう。せいぜい一度だけ実行し、最適な値を見つけることができる程度です。

ユーザーがオプティマイザーを使うほど上級者であれば、入力パラメータを通常のunsigned longでエンコードするのが合理的です。

 
Vasiliy Sokolov:

まず図星をついて、それから批判する。ここで、考えさせられる課題があります。

数字intを以下のキャンドルの組み合わせでエンコードする。

  • 1011;
  • 01011;
  • 001011

ヒント:これらは異なる組み合わせです。

しかも--長さが違うのです。最初の組み合わせ-6桁の組み合わせが4つ含まれています。

2つ目の組み合わせは、6ビットのものを2つ含んでいます。

従って、最適化の際には64個の6ビットの組み合わせを取ればよいことになります。

さらに、最後の1つは最初の2つの選択肢の部分集合であり、最後から2番目の選択肢は最初の選択肢の部分集合である。

ですから、最後の組み合わせの登録の時点で、2つ目の組み合わせと1つ目の組み合わせを同時に特定しなければならないのです。これは明らかに間違った要求だと私は思います。

 
このイベントの目的は、最も収益性の高いシーケンスを見つけることなのでしょうか?ロボットやテスターは必要ありません。シーケンスの長さとポジションを閉じるための ルール(TPまたは反対側のシグナルまたは他のどこか)が指定されているインジケータで十分です。このインディケータは、指定された長さのシーケンスと指定された深さのヒストリー内のすべてのバリエーションをコード化し、それは(ドローダウンを含む)結果を並べ替え、あなたが望むどこにでもそれを印刷します。しかし、この問題は実に突拍子もないように見える。まあ、0101のようなユーザーを占拠する当て馬的なおもちゃでなければ
 
George Merts:

したがって、最適化を行う場合は、6桁の組み合わせを64個取ればよいことになる。

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

そうやって少しずつ考えていくと、2ページ目に書いたようなことにすぐに行き着くはずです。