[ARCHIV]Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Ohne dich kann ich nirgendwo hingehen - 5. - Seite 214

 
artmedia70:

Zum Beispiel eine Funktion, die einem EA automatisch eine eindeutige magische Nummer zuweist, die auf dem Namen des EA, dem Währungspaar und dem TF, auf dem er installiert ist, basiert:

Anrufen:



Sie können einen Magier auch mit CRC32 zuweisen, um sicherzustellen, dass er eindeutig ist. Oder Sie können schnell die Integrität von Daten überprüfen, die Sie zuvor gespeichert oder von einem anderen Endgerät empfangen haben, z. B. über das Internet. In diesem Fall, darb alle Funktion))). Verwenden Sie es weise).

int crc_table[256];
 
/* Run this function previously */
void make_crc_table() 
{
    for (int i = 0; i < 256; i++) {
        int c = i;
        for (int j = 0; j < 8; j++) {
            if(c & 1 != 0)
               c = 0xEDB88320 ^ (c >> 1);
            else 
               c = c >> 1;
        }
        crc_table[i] = c;
    }
}
 
bool table_filled = false;

int crc32(string buf) 
{
    if(!table_filled)
    {
      make_crc_table();
      table_filled = true;
    }
    
    int len = StringLen(buf);
    
    int c = 0xFFFFFFFF;
    for (int i = 0; i < len; i++) {
        c = crc_table[(c ^ StringGetChar(buf,i)) & 0xFF] ^ (c >> 8);
    }
    return (c ^ 0xFFFFFFFF);
}
 
alsu:

Außerdem können wir einen Magier mit CRC32 zuweisen, um sicherzustellen, dass er eindeutig ist. Oder wir können schnell die Integrität von Daten überprüfen, die wir zuvor gespeichert oder von einem anderen Endgerät empfangen haben, beispielsweise über das Internet. In diesem Fall, darb alle Funktion))). Verwenden Sie es weise).


Alexey, ich danke Ihnen für Ihren interessanten und gut geschriebenen Beitrag. Ich werde es mir ansehen. Ich habe selbst schon über eine ähnliche Idee nachgedacht, und jetzt kommt sie.

Nun, hier ist sie:


Victor, ich habe auch im Dock nach dir gesucht. Diese Codes wurden also in den Indikatoren von CodeBase gesehen, die ich für den manuellen Handel verwendet habe. Es stellte sich heraus, dass es bei weitem kein Allheilmittel ist. Also habe ich fast alle Indikatoren weggeworfen, und jetzt ist mein Expert Advisor ein eigener Indikator, und ich brauche fast nichts mehr!

Übrigens, ich habe viel gelernt, als ich in der Basis herumgegraben habe! Man muss schon selbst ein Experte sein, um alles im Dock zu begreifen! Im Lehrbuch gibt es mehr Details, aber es fehlt eine Menge!


Boris, ich selbst verwende eigentlich keine Indikatoren. Es sei denn, es ist ein Bindestrich... Und String-Funktionen werden für andere Zwecke benötigt. Ich habe oben darüber geschrieben. Hier:

hoz:

Um nicht alle Arten von krummen Codes zu lesen, wie hierhttps://www.mql5.com/ru/articles/1524.

(Ich habe dort eine Reihe von Fehlern festgestellt. Und im Allgemeinen weiß ich nicht, was sich der Autor gedacht hat, als er diesen Code schrieb).

Bitte geben Sie mir einen Hinweis auf den Algorithmus dieser Variante. Ich möchte, dass der schwebende Auftrag dem Objekt folgt, z. B. einer Trendlinie. Oder der schwebende Auftrag sollte hinter der Linie stehen...

Wie wird sie umgesetzt? Ich kann das nicht wirklich verstehen.

Ich verstehe, dass wir ein Objekt erstellen sollten. Aber wir sollten irgendwie festlegen, dass wir etwas tun sollten, wenn der Preis "hinter" dem Objekt liegt, oder wenn der Preis auf der Linie liegt, der schwebende Auftrag darauf liegt.

 

Freunde, könnt ihr mir einen Tipp geben?

Gibt es ein Programm, das alles mitschreibt, was das Terminal macht?

Oder wie kann man einen EA dazu bringen, unabhängig vom Server Protokolle zu schreiben?

 
polycomp:
Danke für die Klarstellung! Sieht so aus, als ob es am besten ist, Statik nicht in Bibliotheken zu verwenden.


Und Sie sollten sie auch nicht außerhalb von ihnen verwenden. In MT4 werden Variablen vom Typ Static NIEMALS neu initialisiert.
 
herhuman:

Wie kann ich den EA dazu bringen, unabhängig vom Server Protokolle zu schreiben?

Das tut sie.
 
hoz:


Formulieren Sie zunächst einmal klar und deutlich, was Sie möchten. Geometrische Ansätze sind willkommen.
 
hoz:


Alexey, ich danke Ihnen für einen interessanten und intelligent geschriebenen Beitrag. Ich werde es mir ansehen. Ich habe selbst schon über eine ähnliche Idee nachgedacht, und hier ist sie.


Boris, ich selbst verwende eigentlich keine Indikatoren. Es sei denn, es handelt sich um eine Winkemaschine... Und String-Funktionen werden für andere Zwecke benötigt. Ich habe oben darüber geschrieben. Hier:


Victor, ich habe mich auch nicht damit befasst, aber ich habe viel davon in der Base gesehen. Soweit ich weiß, sind die Preisübergänge bei Linien ähnlich wie bei Streichen. Fangen Sie auch Linienüberkreuzungen mit Ihren Auftrags- und Positionsparametern usw. ab. Graben Sie es aus!
 

Sehr geehrte Damen und Herren, könnten Sie bitte die folgende Frage für einen Neuling beantworten?

if (((((Bid>1.2153)&&(Bid<1.2160) || (Bid>1.2173)&&(Bid<1.2180)) || ( (Bid>1.2100)&&(Bid<1.2107) || (Geld>1.2094)&&(Geld<1.2101)) || (((Geld>1.2092)&&(Geld<1.2099) || (Geld>1.2091)&&(Geld<1.2098))||((Gebot>1.2073)&&(Gebot<1.2080)||(Gebot>1.2005)&&(Gebot<1.2012))))) // wenn der Kurs eine der in der if-Überschrift aufgeführten Bedingungen erfüllt

int Ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,SL,TP, "jfh",123 ) // eine Order eröffnen.

Ich habe etwa 3000 sich nicht wiederholende Bedingungsdaten, also habe ich sie alle in einem eindimensionalen Array untergebracht

double masiv [3000];

if ((Bid==masiv[5]) // wenn der Preis demWert des Array-Elements mit dem Index 5entspricht

int Ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,SL,TP, "jfh",123 ) // Öffnen Sie die Order.

FRAGE: Welcher Code kann verwendet werden, um den folgenden Befehl zu schreiben

Wenn der Preis mit dem Wert eines der 3000 nicht wiederkehrenden Werte des Arrays double masiv [3000]übereinstimmt

Eröffnen Sie eine Bestellung.

Die einfachste Möglichkeit besteht darin, 3000 Bedingungen in die if(.....)-Kopfzeile aufzunehmen.

Aber wahrscheinlich gibt es noch kompaktere Varianten des Codes.

Danke für die Hilfe.


 
solnce600:

Sehr geehrte Damen und Herren, könnten Sie bitte einem Neuling die Antwort auf diese Frage geben?

if (((((Bid>1.2153)&&(Bid<1.2160 )|| (Bid>1.2173)&&(Bid<1.2180)) || ( (Bid>1.2100)&&(Bid<1.2107) || (Geld>1.2094)&&(Geld<1.2101)) || (((Geld>1.2092)&&(Geld<1.2099) || (Geld>1.2091)&&(Geld<1.2098))||((Gebot>1.2073)&&(Gebot<1.2080)||(Gebot>1.2005)&&(Gebot<1.2012))))) // wenn der Preis eine der in der if-Überschrift aufgeführten Bedingungen erfüllt

int Ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,SL,TP, "jfh",123 ) // eine Order eröffnen.

Ich habe etwa 3000 sich nicht wiederholende Bedingungsdaten, also habe ich sie alle in einem eindimensionalen Array untergebracht

double masiv [3000];

if ((Bid==masiv[5]) // wenn der Preis demWert des Array-Elements mit dem Index 5entspricht

int Ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,SL,TP, "jfh",123 ) // Öffnen Sie die Order.

FRAGE: Welcher Code kann verwendet werden, um den folgenden Befehl zu schreiben

Wenn der Preis mit dem Wert eines der 3000 nicht wiederkehrenden Werte des Arrays double masiv [3000]übereinstimmt

Eröffnen Sie eine Bestellung.

Die einfachste Möglichkeit besteht darin, 3000 Bedingungen in die if(.....)-Kopfzeile aufzunehmen.

Aber wahrscheinlich gibt es noch kompaktere Varianten des Codes.

Danke für die Hilfe.




Falls erforderlich, kann eine Lösung gefunden werden. Wechseln Sie zum Beispiel zu einem ganzzahligen geordneten Array. Suchen Sie darin nach dem gewünschten Wert.
 
solnce600:

Sehr geehrte Damen und Herren, könnten Sie bitte einem Neuling die Antwort auf diese Frage geben?

if (((((Bid>1.2153)&&(Bid<1.2160) || (Bid>1.2173)&&(Bid<1.2180)) || ( (Bid>1.2100)&&(Bid<1.2107) || (Geld>1.2094)&&(Geld<1.2101)) || (((Geld>1.2092)&&(Geld<1.2099) || (Geld>1.2091)&&(Geld<1.2098))||((Gebot>1.2073)&&(Gebot<1.2080)||(Gebot>1.2005)&&(Gebot<1.2012))))) // wenn der Preis eine der in der if-Überschrift aufgeführten Bedingungen erfüllt

int Ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,SL,TP, "jfh",123 ) // eine Order eröffnen.

Ich habe etwa 3000 sich nicht wiederholende Bedingungsdaten, also habe ich sie alle in einem eindimensionalen Array untergebracht

double masiv [3000];

if ((Bid==masiv[5]) // wenn der Preis demWert des Array-Elements mit dem Index 5entspricht

int Ticket=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,SL,TP, "jfh",123 ) // Öffnen Sie die Order.

FRAGE: Welcher Code kann verwendet werden, um den folgenden Befehl zu schreiben

Wenn der Preis mit dem Wert eines der 3000 sich nicht wiederholenden Werte des Arrays double masiv [3000]übereinstimmt

Eröffnen Sie eine Bestellung.

Die einfachste Möglichkeit besteht darin, 3000 Bedingungen in die if(.....)-Kopfzeile aufzunehmen.

Aber es muss noch kompaktere Varianten des Codes geben.

Danke für die Hilfe.



Schleife:

   double massiv[];  
//----------------------------------------------------------------------
   for (int i=0; i<ArrayRange(massiv,0); i++) {
      if (MathAbs(NormalizeDouble(Bid-massiv[i],Digits))<=0.5*Point) {
         // цена примерно совпадает со значением в massiv[i]
         // ... обрабатываем совпадение
         }
      }
//----------------------------------------------------------------------