Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 353
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
dies (unten) funktioniert nicht, ich habe F_Path in den Explorer eingegeben, auf Enter geklickt, die Datei öffnet sich... Sieht die WinApi-Information so aus?
Wer verhindert, dass das FILE_COMMON-Flag beim Schreiben und Lesen verwendet wird? Die Datei ist für alle auf dem System installierten Terminals verfügbar. Sie befindet sich dann im gemeinsamen Ordner aller Terminals.
In ME Datei --> Gemeinsamen Datenordner öffnen
Wer verhindert, dass das FILE_COMMON-Flag beim Schreiben und Lesen verwendet wird? Die Datei ist für alle auf dem System installierten Terminals verfügbar. Sie befindet sich im gemeinsamen Ordner aller Terminals.
In ME Datei --> Gemeinsamen Datenordner öffnen
Hallo, ist jemand auf dieses Problem gestoßen, wenn er eine Handelsanfrage mit Parametern erstellt:
wenn ich die folgenden Parameter eingebe:
mrequest.action=TRADE_ACTION_DEAL;mrequest.type_filling=ORDER_FILLING_FOK;
mrequest.type=ORDER_TYPE_BUY;
das Terminal meldet, dass ich eine ungültige Methode mrequest.type_filling angegeben habe(Auftragsausführungspolitik); wenn ich mrequest.type_filling=ORDER_FILLING_RETURN angebe, wird der Auftrag geöffnet, aber ich kann ihn nicht programmatisch schließen, weil das Terminal meldet, dass eine ungültige Methode verwendet wird. Ich führe den Expert Advisor auf einem Forex-Server aus, und auf anderen Servern funktioniert alles einwandfrei. Kann jemand eine Auftragsausführungsrichtlinie schreiben, die bei der Entwicklung von Handelsrobotern für diesen Broker verwendet werden kann? Ich danke Ihnen.Es gibt einen mq4-Indikator mit Alert-Funktion.
Zum Beispiel:
Wie kann man es so einrichten, dass entweder in der oberen linken Ecke des Unterfensters (wo normalerweise der Name des Indikators und die Parameter angezeigt werden) oder auf andere Weise angezeigt wird, ob das Signal eingeschaltet ist(extern bool AlertMode=true;) oder nicht?Es gibt einen mq4-Indikator mit Alert-Funktion.
Zum Beispiel:
Wie kann man entweder in der oberen linken Ecke des Unterfensters (wo normalerweise der Name des Indikators und die Parameter angezeigt werden) oder auf andere Weise angeben, ob das Signal aktiviert(extern bool AlertMode=true;) oder deaktiviert ist?In der Dokumentation steht das:
При тестировании в эксперте можно обрабатывать пользовательские события с помощью функции OnChartEvent(), но в индикаторах эта функция в тестере не вызывается. Даже если индикатор имеет обработчик OnChartEvent() и этот индикатор используется в тестируемом эксперте, то сам индикатор не будет получать никаких пользовательских событий.
Im Moment ist diese Aussage nicht relevant - in Indikatoren wird diese Funktion im Tester aufgerufen, mindestens ein Indikator kann Ereignisse empfangen, die von einem anderen Indikator im Tester erzeugt werden.
Das Problem ist, dass der Indikator, sobald er den Aufruf dieser Funktion erhält, keinen Zugriff auf die Daten hat, die in den auf globaler Ebene deklarierten Variablen gespeichert sind, und umgekehrt - alle in dieser Funktion vorgenommenen Änderungen werden nicht in den Variablen der globalen Zugriffsebene gespeichert.
Beispiele:
1. Das Objekt wird global deklariert und in der Funktion OnInit initialisiert. Es kann von der Funktion OnCalculate aus zugegriffen werden, aber wir erhalten eine Fehlermeldung in der Funktion OnChartEvent - ungültiger Zeiger
2. es gibt eine Funktion, die den Inhalt einer Variablen in das Journal ausgibt (die Variable ist global deklariert). Wenn wir diese Funktion von OnCalculate aus aufrufen, erhalten wir den erwarteten Wert, wenn wir die gleiche Funktion von OnChartEvent aus aufrufen, erhalten wir Unsinn.
Guten Tag!
Ich habe ein Problem bei der Verwendung von Ereignissen, insbesondere der Funktion OnChartEvent() in einem Indikator. Bei der Verwendung in einem Expert Advisor gibt es kein Problem, aber im Indikator funktioniert es nicht richtig. D.h. das Ereignis tritt ein, aber es gibt keine Möglichkeit, die vorhandenen Felder zu ändern. Beispiel:
//----------------------------------------------------------------------------------------------
int k;
int OnInit()
{
k = 0;
ihandleDE = iCustom(_Symbol, _Period, "DrawExtremums");
//< ... >
return(INIT_SUCCEEDED);
}
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
Print("OnCalculate(): k =", k);
//< ... >
return(rates_total)
}
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
string nameEv = "EXTR_UP";
if (sparam == nameEv)
{
Print("OnChartEvent(): k = ", k);
k++;
}
}
//----------------------------------------------------------------------------------------------
Als Ergebnis erhalten wir:
"OnCalculate(): k = 0" - immer.
"OnChartEvent(): k = 0,...,123332" - zählt von 0 bis ...
Wie kann das sein und warum!? Gibt es eine Möglichkeit, das Problem zu beheben? Wenn jemand das versteht, wäre ich für eine Antwort sehr dankbar.
P.S.: Diese Ungerechtigkeit tritt nur im Strategietester auf, in Echtzeit funktioniert alles einwandfrei.
Guten Tag!
Ich habe ein Problem bei der Verwendung von Ereignissen, insbesondere der Funktion OnChartEvent() in einem Indikator. Bei der Verwendung in einem Expert Advisor gibt es kein Problem, aber im Indikator funktioniert es nicht richtig. D.h. das Ereignis tritt ein, aber es gibt keine Möglichkeit, die vorhandenen Felder zu ändern. Beispiel:
//----------------------------------------------------------------------------------------------
int k;
int OnInit()
{
k = 0;
ihandleDE = iCustom(_Symbol, _Period, "DrawExtremums");
//< ... >
return(INIT_SUCCEEDED);
}
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
Print("OnCalculate(): k =", k);
//< ... >
return(rates_total)
}
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
string nameEv = "EXTR_UP";
if (sparam == nameEv)
{
Print("OnChartEvent(): k = ", k);
k++;
}
}
//----------------------------------------------------------------------------------------------
Als Ergebnis erhalten wir:
"OnCalculate(): k = 0" - immer.
"OnChartEvent(): k = 0,...,123332" - zählt von 0 bis ...
Wie kann das sein und warum!? Gibt es eine Möglichkeit, das Problem zu beheben? Wenn jemand das versteht, wäre ich für eine Antwort sehr dankbar.
P.S.: Diese Ungerechtigkeit tritt nur im Strategietester auf, in Echtzeit funktioniert alles einwandfrei.
Guten Abend. Service Desk gab seinerzeit eine recht eindeutige Antwort zu diesem Thema: Das Terminal und der Strategietester sind zwei verschiedene Programme, und die Arbeit der EAs/Indikatoren im Tester und im Terminal kann sich erheblich unterscheiden. Was auf dem Client-Terminal funktioniert, funktioniert im Strategy Tester oft nicht. Wenden Sie sich bitte an den Service Desk und legen Sie ihm Beweise vor, damit er das Problem beheben kann.