Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 191
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Versuchen Sie, die Zeile auszukommentieren, damit eine Funktion funktioniert
interessant, wenn Sie wissen, wie)
interessant, wenn Sie wissen, wie)
Hallo noch mal. Können Sie mir sagen, wie ich den Code eines bekannten Programmierers ändern kann? Zurzeit schließt diese Eule etwa einen Handel pro Sekunde ab. Ich möchte es so ändern, dass die Geschäfte sofort geschlossen werden, wenn ein bestimmter Gewinn überschritten wird, unabhängig von positiven oder negativen Geschäften.
Werden irgendwelche Fehlermeldungen in das Protokoll geschrieben?
Können Sie die Verzögerung innerhalb von ClosePosBySelect auf vernünftigere Werte reduzieren. Für jede Bestellung gibt es mehrere Versuche, sie abzuschließen, und jedes Mal bekommen wir Schlaf, wenn es nicht klappt.
Übrigens kann die Wiederherstellung von Fehlern auf eine bessere Weise erfolgen (seit der Erstellung dieser Funktionen hat MT gelernt, einen anderen Code als ERR_CONTEXT_BUSY zu erzeugen).
Es ist interessant, wenn man weiß wie)
Werden irgendwelche Fehlermeldungen protokolliert?
Sie können die Verzögerungen innerhalb von ClosePosBySelect auf vernünftige Werte reduzieren. Es gibt mehrere Versuche, jede Bestellung abzuschließen, und jedes Mal, wenn dies nicht gelingt, wird Schlaf angezeigt.
Übrigens kann die Wiederherstellung von Fehlern auf eine bessere Weise erfolgen (seit der Erstellung dieser Funktionen hat MT gelernt, einen anderen Code als ERR_CONTEXT_BUSY zu erzeugen).
Sie können diese beiden durch diese ersetzen. Bei mir funktioniert das gut, aber es hängt viel davon ab, wie schnell Ihr Maklerunternehmen Aufträge ausführt.
Ist es eine vollständige Eule oder ein Teil des Codes von etwas?
Meine Herren Experten, Hilfe!!! Ich arbeite schon seit drei Tagen an diesem Problem. Ich habe die Standardfunktion in meinem Expert Advisor (ich habe sie überall gesehen) verwendet, um eine Datei aus dem Internet mit wininet.dll für die weitere Analyse zu lesen:
string ReadHTML()
{
if(!IsDllsAllowed())
{
Alert("Sie müssen DLLs in den Einstellungen zulassen;)
zurück(");
}
int rv = InternetAttemptConnect(0);
if(rv != 0)
{
Alert("Fehler beim Aufruf von InternetAttemptConnect()");
zurück(");
}
int hInternetSession = InternetOpenW("Microsoft Internet Explorer", 0, "", "", 0);
if(hInternetSession <= 0)
{
Alert("Fehler beim Aufruf von InternetOpenW()");
zurück(");
}
int hURL = InternetOpenUrlW(hInternetSession,URL, "", 0, 0, 0);
if(hURL <= 0)
{
Alert("Fehler beim Aufruf von InternetOpenUrlW();
InternetCloseHandle(hInternetSession);
return("");
}
int cPuffer[256];
int dwBytesRead[1];
string TXT = "";
while(!IsStopped())
{
bool bResult = InternetReadFile(hURL, cBuffer, 1024, dwBytesRead);
if(dwBytesRead[0] == 0)
Pause;
string text = "";
string text0= "";
for(int i = 0; i < 256; i++)
{
text0= CharToStr((char)(cBuffer[i] & 0x000000FF));
if (text0!="\r") text = text + text0;
sonst dwBytesRead[0]--;
if(StringLen(text) == dwBytesRead[0]) break;
text0= CharToStr((char)(cBuffer[i] >> (8 & 0x000000FF));
if (text0!="\r") text = text + text0;
sonst dwBytesRead[0]--;
if(StringLen(text) == dwBytesRead[0]) break;
text0= CharToStr((char)(cBuffer[i] >> (16 & 0x000000FF));
if (text0!="\r") text = text + text0;
sonst dwBytesRead[0]--;
if(StringLen(text) == dwBytesRead[0]) break;
text0= CharToStr((char)(cBuffer[i] >> (24 & 0x000000FF));
if (text0!="\r") text = text + text0;
sonst dwBytesRead[0]--;
if(StringLen(text) == dwBytesRead[0]) break;
}
TXT = TXT + Text;
Schlafen(1);
}
InternetCloseHandle(hURL);
InternetCloseHandle(hInternetSession);
zurück(TXT);
}
Alles in Ordnung, nur einmal gelesene Seite, die anschließend aktualisiert wird, ergibt bei nachfolgenden Aufrufen dieser Funktion (mit einem Zeitraum von 1 Minute oder weniger, obwohl die Seite öfter aktualisiert wird) dieselbe Seite unverändert (wie sie beim ersten Mal gelesen wurde). Ein Neustart des Expert Advisors hilft nicht, da die Datei beim ersten Mal nach dem Starten des Terminals gelesen wurde, so scheint es. Die einzige Möglichkeit zur Aktualisierung ist das manuelle Öffnen des Internet Explorers mit der gewünschten Seite (bzw. mit den aktualisierten Informationen) und die Funktion beginnt mit dem Lesen der aktualisierten Informationen und friert dann diese Konfiguration der Seite ein, oder beim Neustart des Terminals MT4 (und auch beim ersten Lesen nach dem Neustart des Terminals, so dass die Ausgabe fortgesetzt wird). Ich vermute, es hat etwas mit den Parametern InternetOpenW oder InternetOpenUrlW zu tun, ich habe Nullen überall standardmäßig, aber ich kann keine klare Beschreibung davon finden und es funktioniert irgendwie mit anderen EAs (ich nahm es von Expert Advisors, die Nachrichten von Websites an das Terminal weiterleiten). Ja, in den Terminaleinstellungen "Allow WebRequest for..." für die gewünschte Seite.
Guten Tag.
Mein RAM raucht schon: Es ist ein Problem im EA aufgetreten, nachdem ich einen TP oder SL genommen habe, öffnet er wieder eine Order!
Ich kann nicht an eine Bedingung denken, wenn der EA nur an den 2. Balken nach dem Signal vom Indikator gebunden wäre
oder wenn ein TP oder SL ausgelöst wird, würde er auf ein neues Signal warten, aber nur, wenn sich das Signal des Indikators ändert.
void OnTick()
{
uptr = NormalizeDouble(iCustom(NULL, 0, "Slope Direction Line", period, method, price, 0, n), 4);
dntr = NormalizeDouble(iCustom(NULL, 0, "Slope Direction Line", period, method, price, 1, n), 4);
if(DN_Trend()==true)
{
if(CountSell() == 0 && Bid < dntr && Open[3] < dntr && Close[3] < dntr)
{
ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0, "Sloper", Magic, 0, Red);
wenn (Ticket > 0)
{
SL = NormalizeDouble(Bid + StopLoss*Point, Digits);
TP = NormalizeDouble(Bid - TakeProfit*Point, Digits);
if (OrderSelect(ticket, SELECT_BY_TICKET))
if(!OrderModify(ticket, OrderOpenPrice(), SL, TP, 0))
Print("Verkaufsfehler");
}
}
Guten Tag.
Mein RAM raucht schon: Es ist ein Problem im EA aufgetreten, nachdem ich einen TP oder SL genommen habe, öffnet er wieder eine Order!
Ich kann nicht an eine Bedingung denken, wenn der EA nur an den 2. Balken nach dem Signal vom Indikator gebunden wäre
Oder, wenn ein TP oder SL ausgelöst wird, würde der Expert Advisor auf ein neues Signal warten, aber nur, wenn sich das Indikatorsignal ändert.
Wenn die zuletzt geschlossene Position vom gleichen Typ ist, wie das Signal kam, und wenn diese Position aufgrund einer der Stop-Orders geschlossen wurde, dann öffnen Sie die Position nicht.
Danke für die Antwort, aber ich habe gerade erst begonnen, für ein paar Wochen zu lernen, wie man dies in Code zu implementieren, oder sagen Sie mir, wo zu lesen, bitte. Oder nach Igor Kim?
Und doch wird er eine Position öffnen, die nicht dem System entspricht, wenn er gerade seine Arbeit aufnimmt, Ihr Zustand vermeidet dieses Problem nicht.