[ARCHIV] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 3. - Seite 180

 

Bei der Arbeit mit Zahlen vom Typ double, wenn Sie einer Variablen einen Wert zuweisen müssen (z. B. Null), haben verschiedene Autoren unterschiedliche Schreibweisen. Zum Beispiel a=0; oder a=0.0; oder a=0.0000; Gibt es einen Unterschied in Bezug auf den korrekten Programmablauf?

 

wenn ((OrderSymbol()==Symbol()) && ((OrderMagicNumber()==44) || (OrderMagicNumber()==55)) && (ticket==0)){

OrderDelete(OrderTicket());

int err1=GetLastError();

Print(err1);}

Dieses Codestück hat eine Zeit lang gut funktioniert...jetzt wird ein Fehler ERR_OFF_QUOTES zurückgegeben. Bitte beachten Sie, dass der Fehler von OrderDelete zurückgegeben wird, auch wenn die Ticketnummer manuell eingegeben wird. Kann jemand die Situation klären? Ich danke Ihnen.

 
Elenn:

Wenn Sie mit Zahlen vom Typ double arbeiten und einer Variablen einen Wert zuweisen müssen (z. B. Null), haben verschiedene Autoren unterschiedliche Schreibweisen. Zum Beispiel a=0; oder a=0.0; oder a=0.0000; Gibt es einen Unterschied in Bezug auf den korrekten Programmablauf?


Nein, es gibt keine Regel. Ich persönlich ziehe es jedoch vor, konstante Doppelwerte mit einem Punkt zu schreiben.

Zum Beispiel:

if ( a == 1.0 )
{}

// ...

b = 3.0;

Ein kurzer Blick auf den Text zeigt, dass der Werttyp double ist.

Zweitens werden dadurch einige Fehler vermieden. Vergleichen Sie:

double a=2/3;
double b=2.0/3.0;

Print("a=",a," b=",b);
 

Bitte um Hilfe. Er will den Code nicht ausführen:

int start()
{
int vor12;
{
if(PRICE_CLOSE>PRICE_OPEN)
pre12=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,"",Bid-100*Point,Ask+100*Point,CLR_NONE);
}
Rückkehr;

}

D.h., wie beabsichtigt, wenn die Kerze aufsteigend ist - offen.

Alles wird kompiliert. Aber während des Tests passiert nichts. D.h. es werden keine Aufträge erteilt. Machen Sie bitte ein Loch in den Fehler...

 
NaVolne:

Bitte um Hilfe. Der Code will nicht ausgeführt werden:

int start()
{
int pre12;
{
if(PRICE_CLOSE>PRICE_OPEN)
pre12=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,"",Bid-100*Point,Ask+100*Point,CLR_NONE);
}
Rückkehr;

}

Das heißt, wenn die Kerze nach oben geht, öffnet sie sich.

Alles wird kompiliert. Aber während des Tests passiert nichts. D.h. es werden keine Aufträge erteilt. Bitte weisen Sie einfach mit dem Finger auf den Fehler hin.

Welche Kerze ist die aktuelle Kerze auf dem Diagramm? Die Kerze des Vortags? Die Kerze der Vorwoche? Wenn es die Kerze des Vortags ist, würde es zum Beispiel so aussehen

if(iOpen(NULL,1440,1)<iClose(NULL,1440,1)) das iOpen/iClose-Helplet beschreibt alles genau

 
NaVolne:

Bitte um Hilfe. Er will den Code nicht ausführen:

int start()
{
int vor12;
{
if(PRICE_CLOSE>PRICE_OPEN)
pre12=OrderSend(Symbol(),OP_BUY,0.1,Ask,3,"",Bid-100*Point,Ask+100*Point,CLR_NONE);
}
Rückkehr;

}

D.h. wie beabsichtigt, wenn die Kerze aufsteigt, öffnet sie sich.

Alles wird kompiliert. Aber während des Tests passiert nichts. D.h. es werden keine Aufträge erteilt. Machen Sie bitte ein Loch in den Fehler...

Der Punkt ist, dass PRICE_CLOSE und PRICE_OPEN Konstanten sind, keine Funktionen und keine Arrays von Zeitserien. Um die Werte der Eröffnungs- und Schlusskurse von Kerzen zu erhalten, müssen wir auf Funktionen(iOpen und iClose) oder Arrays von Zeitserien(Open und Close) zurückgreifen.

Um mehr darüber zu erfahren, lesen Sie das Tutorial. In diesem Abschnitt werden beispielsweise die vordefinierten Variablen erklärt (zu denen die gewünschten Zeitreihen-Arrays Open und Close gehören).

 
Elenn:

Wenn Sie mit Zahlen vom Typ double arbeiten und einer Variablen einen Wert zuweisen müssen (z. B. Null), haben verschiedene Autoren unterschiedliche Schreibweisen. Zum Beispiel a=0; oder a=0.0; oder a=0.0000; Gibt es einen Unterschied in Bezug auf den korrekten Programmablauf?

Ich verstehe, dass im Falle von

double a = 1;

Der Compiler nimmt "1" als Wert vom Typ int an, und es wird eine Typumwandlung durchgeführt (int in den Zieltyp double).

Und im Falle von:

double a = 1.0

oder (es gibt keinen Unterschied)

double a = 1.0000

sieht der Compiler "1.(xxxx)" als einen Wert vom Typ double an, und die Typkonvertierung wird nicht durchgeführt.


P.S.: Danke an PapaYozh für das Beispiel. Die obigen Gedanken kamen danach.

Ich denke, es ist einfacher für den Compiler, wenn er die Typen nicht zu oft zitiert. Oder gibt es vielleicht auch Zeilen mit "nicht bekehrten" Typen in ex4? Bedeutet dies, dass die Leistung nachlässt? Obwohl der Compiler den Code optimieren soll.

Die erfahreneren MQL4-Programmierer mögen mich korrigieren.

 
Vielen Dank für die tollen Antworten. Lesen, sich vertiefen.
 
NaVolne:
Vielen Dank für die tollen Antworten. Lesen, sich vertiefen.
Sie sollten das Lehrbuch lesen, nicht unsere Antworten! :)) Von Kruste zu Kruste, natürlich.
 
LexAlex:

Dieses Codestück hat bis vor kurzem gut funktioniert... jetzt wird der Fehler ERR_OFF_QUOTES zurückgegeben. Bitte beachten Sie, dass der Fehler von OrderDelete zurückgegeben wird, auch wenn die Ticketnummer manuell eingegeben wird. Kann jemand die Situation klären? Ich danke Ihnen.

Vielleicht liegt es an der Gefrierstufe. Vielleicht ist etwas mit dem Konto nicht in Ordnung und der Broker hat den Geldfluss aufgrund der häufigen Transaktionen auf dem Konto gestoppt.
Grund der Beschwerde: