Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 549

 

Ist die folgende abgekürzte Konstruktion im Code korrekt: a < b && ( c > d1 || c >d2 || c > d3) ?

Damit soll das Schreiben vermieden werden: (a < b && c > d1) || (a < b && c > d2) usw. viele Male.

 
HeAic:

Ist die folgende abgekürzte Konstruktion im Code korrekt: a < b && ( c > d1 || c >d2 || c > d3) ?

Damit soll das Schreiben vermieden werden: (a < b && c > d1) || (a < b && c > d2) und so weiter viele Male.

Natürlich wird es das. Das Einzige, was ich tun würde, wenn ich solch große Konstruktionen schreibe, ist die ausdrückliche Angabe der Prioritätsklammern:

(a < b)  && ( c > d1 || c >d2 || c > d3)

Bei MT4/5-Compilern können wir auf die angegebenen Klammern verzichten, da die vorhandenen Prioritäten es nicht zulassen, das Ergebnis des Ausdrucks auf andere Weise zu berechnen. Diese Klammern haben jedoch zwei Vorteile:

  1. Der Ausdruck ist visuell leichter zu verstehen, ohne dass Fragen zu den Prioritäten auftauchen (ich erinnere mich nicht an die Prioritäten der einzelnen Compiler).
  2. Wenn der Code in einen anderen Compiler verschoben wird, der möglicherweise andere Prioritäten hat, wird der Code genauso funktionieren wie im aktuellen Compiler.
 
Alexey Viktorov:

Danke, wenn Sie

S_sk= SymbolInfoInteger("EURUSD",SYMBOL_SELECT);

den Fehler zurück, es gibt kein Symbol in Market Watch, wie kann ich es dort hinzufügen?

 
lil_lil:

Danke, wenn Sie

den Fehler zurück, es gibt kein Symbol in Market Watch, wie kann ich es dort hinzufügen?

SymbolAuswählen()

Alles steht in der Hilfe. Cursor auf Funktionsname und F1

 
Artyom Trishkin:

SymbolAuswählen()

Es ist alles in der Hilfe. Cursor auf Funktionsname und F1

Ich danke Ihnen.

 

Was ist der Grund dafür? Ich habe ein Skript geschrieben, das Limit-Orders im MT5 setzt. Wenn ich es an das Diagramm im Terminal sende, werden die Aufträge nicht gesetzt, obwohl der result.retcode 10009 zurückgibt(Auftrag ausgeführt)

 
iv1986:

Was ist der Grund dafür? Ich habe ein Skript geschrieben, das Limit-Orders im MT5 setzt. Wenn ich es an das Diagramm im Terminal sende, werden die Aufträge nicht gesetzt, obwohl der result.retcode 10009 zurückgibt (Auftrag ausgeführt)

  1. Code.
  2. Protokoll.
  3. Erklärungen.
Wo ist das alles?

 
Ihor Herasko:

  1. Code.
  2. Logbuch.
  3. Erklärung.
Wo ist das alles?

{MqlTradeRequest request={0};
MqlTradeResult result={0};
double Bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
double Ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
int digits=SymbolInfoInteger(_Symbol,SYMBOL_DIGITS);
double p=NormalizeDouble(ChartPriceOnDropped(),Ziffern);
if( SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)==10)
{p=MathRound(ChartPriceOnDropped()*0.1)/0.1;
}
int V=75;
wenn (p<Ask)
{
request.action =TRADE_ACTION_PENDING; // Art des Handelsvorgangs
request.symbol =Symbol(); // Symbol
request.volume =MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/V/((Ask-p)/
SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE));
if (request.volume>AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL))
{ request.volume=MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL));
}
request.type =ORDER_TYPE_BUY_LIMIT; // Art der Bestellung
request.price =NormalizeDouble(Ask-SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE),digits); // Preis zum Öffnen
request.deviation=50; // zulässige Abweichung vom Preis
request.sl =p; // Stop-Loss-Position
request.tp =NormalizeDouble(Ask+(Ask-p)*3,digits); // Take Profit Position
request.type_filling=ORDER_FILLING_IOC;
request.type_time=ORDER_TIME_DAY;
request.stoplimit=Ask;
OrderSend(Anfrage,Ergebnis);
}
wenn (p>Gebot)
{
request.action =TRADE_ACTION_PENDING; // Art des Handelsvorgangs
request.symbol =Symbol(); // Symbol
request.volume =MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/V/((p-Bid)/
SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE)*SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE));
if (request.volume>AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL))
{ request.volume=MathFloor(AccountInfoDouble(ACCOUNT_BALANCE)/SymbolInfoDouble(_Symbol,SYMBOL_MARGIN_INITIAL));
} // Volumen
request.type =ORDER_TYPE_SELL_LIMIT; // Auftragsart
request.price =NormalizeDouble(Bid+SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE),digits); // Preis zur Eröffnung
request.deviation=50; // zulässige Abweichung vom Preis
request.sl =p; // Stop-Loss-Position
request.tp =NormalizeDouble(Bid-(p-Bid)*3,digits); // Take Profit Position
request.type_time=ORDER_TIME_DAY;
request.type_filling=ORDER_FILLING_IOC;
request.stoplimit=Bid;
OrderSend(Anfrage,Ergebnis);

}

Das Log sagt: 2018.05.14 10:12:38.187 Trades '992940': sell limit 3.00 Si-6.18 at 62066 (62065) sl: 62331 tp: 61267 placed for execution

 
iv1986:

Das Log sagt: 2018.05.14 10:12:38.187 Trades '992940': sell limit 3.00 Si-6.18 at 62066 (62065) sl: 62331 tp: 61267 placed for execution

Dies wird in das allgemeine Protokoll geschrieben. Und was steht im Protokoll der "Experten"? Und zwar nicht nur eine Zeile, sondern das gesamte Protokoll. Durch das Schlüsselloch gibt es nicht viel zu sehen.

Außerdem gibt es in dem zitierten Code keine Prüfung auf Rückgabecodes. Es ist also nicht klar, auf welcher Grundlage die Schlussfolgerung über den Fehlercode gezogen wird.

Um einen Ratschlag zu geben, braucht man eindeutig reproduzierbare Schritte (um zu sehen, was man sieht), und die gibt es hier nicht. Schneiden Sie den problematischen Teil des Codes aus, führen Sie ihn selbst aus und zeigen Sie dann genau, was schief läuft.

P. S. Um den Code einzufügen, verwenden Sie bitte das Symbol "</>" oder Alt+S.

 

Am Ende des Codes auchAlert(result.retcode);

im allgemeinen Protokoll:

2018.05.14 12:08:16.984 Scripts script LIMIT (Si-6.18,M15) erfolgreich geladen

2018.05.14 12:08:17.187 Trades '992940': Kauflimit 3.00 Si-6.18 bei 62091 (62092) sl: 61821 tp: 62905

2018.05.14 12:08:17.484 Trades '992940': akzeptiert Kauflimit 3.00 Si-6.18 bei 62091 (62092) sl: 61821 tp: 62905

2018.05.14 12:08:17.500 Trades '992940': Kauflimit 3.00 Si-6.18 bei 62091 (62092) sl: 61821 tp: 62905 zur Ausführung gestellt

2018.05.14 12:08:17.546 Trades '992940': order #13235300 buy limit 3.00 / 3.00 Si-6.18 at 62091 done in 337.532 ms

2018.05.14 12:08:17.578 Skripte Skript LIMIT (Si-6.18,M15) entfernt


In der Spalte Experten: 2018.05.14 12:08:17.578 LIMIT (Si-6.18,M15) Alert: 10009, sonst nichts




Grund der Beschwerde: