Morseschrift - Seite 5

 
Morsecode Version "1.004": Fehler behoben - Muster wurde rückwärts gelesen.
Dateien:
Morse_code.mq5  15 kb
 
Vasiliy Sokolov:

Frage: Wie groß ist die Wahrscheinlichkeit, dass auf dem Markt eine Kombination auftaucht, die den geforderten 64 Ziffern entspricht? Antwort: (1/2^64)*BarsCount. Das heißt, dass eine solche Kombination mit einer Wahrscheinlichkeit von nahezu 100 % nicht gefunden werden kann. Es liegt auf der Hand, dass nur die Zahlen int oder long das Muster nicht vollständig beschreiben können, so dass wir einen zusätzlichen Parameter benötigen, der die Länge des Musters angibt.

Dies ist der Fall, wenn wir alle 64 Bits betrachten. Aber es ist offensichtlich unnötig.

Als ich solche Untersuchungen durchführte, fand ich heraus, dass es nicht sinnvoll ist, die Länge eines Candlestick-Musters länger als 5 zu nehmen. Wenn man die Balken nicht nur nach den "Bullenbären", sondern auch nach ihrer Größe unterscheidet, ist sogar diese Länge zu lang.

Wenn wir ein Muster mit großer Länge haben, ist es viel sinnvoller, "charakteristische Merkmale" anzugeben und die Länge einfach durch Minimal- und Maximalwerte zu begrenzen.

 

Noch nicht genau geformt, aber die allgemeine Idee ist: zwei Parameter - Länge und int Parameter von 0 bis 3. Im Expert Advisor wird diese Zahl bereits interpretiert (Pseudobit-Darstellung):

intLänge (auch bekannt als Maske)Pseudobit-Darstellung
0х0
1х1
2xx00
3xx01
4xx10
5xx11
6xxx000
7xxx001
8xxx010
9xxx011
10xxx100
11xxx101
12xxx110
13xxx111

Es bleibt zu entscheiden, wie diese Parameter kodiert werden sollen. Eine einfache Lösung: eine Struktur, in der jeder int-Parameter (die erste Spalte der Tabelle) einer Pseudobit-Darstellung (die dritte Spalte) entspricht. Wenn Sie die Maske auf fünf Zeichen beschränken (xxxxxx), ist die Struktur nicht sehr groß.

Und das Wichtigste - der Optimierer erlaubt es Ihnen, die Struktur neu anzuordnen!

 

Sie können auch drei separate Parameter für die drei Kerzen im Eigenschaftsfenster festlegen. Zwei Vögel werden auf einmal getötet - das ist klar und optimal.

Das Gleiche gilt für 10 Kerzenständer.

 
Dmitry Fedoseev:

Sie können auch drei separate Parameter für die drei Kerzen im Eigenschaftsfenster festlegen. Zwei Fliegen mit einer Klappe schlagen - das ist klar und optimal.

Das Gleiche kann für 10 Kerzenhalter gemacht werden.

Ich unterstütze

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

Noch nicht genau geformt, aber die allgemeine Idee ist: zwei Parameter - Länge und int Parameter von 0 bis 3. Innerhalb des Expert Advisors gibt es bereits eine Interpretation dieser Zahl (Pseudobit-Darstellung):

intLänge (auch bekannt als Maske)Pseudobit-Darstellung
0х0
1х1
2xx00
3xx01
4xx10
5xx11
6xxx000
7xxx001
8xxx010
9xxx011
10xxx100
11xxx101
12xxx110
13xxx111

Es bleibt zu entscheiden, wie diese Parameter kodiert werden sollen. Eine einfache Lösung: eine Struktur, in der jeder int-Parameter (die erste Spalte der Tabelle) einer Pseudobit-Darstellung (die dritte Spalte) entspricht. Wenn die Maske auf nur fünf Zeichen (xxxxxx) begrenzt ist, ist die Struktur nicht sehr groß.

Und das Wichtigste - der Optimierer erlaubt es Ihnen, die Struktur neu anzuordnen!


Dies ist die Aufzählung für Masken von x bis 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',    // 
  };
 

Morsecode Version "1.005"

Hier ist die Lösung: Die Maske wird als Aufzählung definiert

//+------------------------------------------------------------------+
//| 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
...

in OnInit() wird die Maske in der Funktion ConvertNumberToString in eine String-Variable"sExtMorseCode" übersetzt (die Variable"sExtMorseCode" wird global deklariert):

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

Zwei Probleme sind gelöst worden:

1). Der Benutzer sieht das Muster als "0101" in den Eingabeparametern:

Bequeme Ansicht der Eingabe-Parameter

2). Die Eingabeparameter sind im Tester perfekt optimiert.

Dateien:
Morse_code.mq5  20 kb
 
Vladimir Karputov:

Morsecode Version "1.005"

Zwei Probleme sind gelöst worden:

1). Der Benutzer sieht das Muster als "0101" in den Eingabeparametern:

2). Die Eingabeparameter sind im Tester perfekt optimiert.

Der Benutzer kann eine Candlestick-Kombination ohne mathematische Berechnungen entsprechend der ursprünglichen Idee festlegen?

 
Pyxis:

Der Benutzer kann eine Candlestick-Kombination ohne mathematische Berechnungen festlegen, wie es ursprünglich vorgesehen war?


Ja, er kann es ohne mathematische Berechnungen tun. Und jetzt brauchen Sie die Kombination nicht mehr manuell einzugeben - wählen Sie einfach die entsprechende Candlestick-Kombination aus der Dropdown-Liste"Mustermaske" aus.
 
Lief im Tester (volle Optimierung)Morsecode Version "1.005"- reine Muster (wie jetzt) sind überhaupt nicht fischig :(.