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

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
Wie kann ich im EA erkennen, dass ein Indikatoralarm eingetroffen ist?
Brauchen Sie eine Ausschreibung?
Normalerweise wird bei einem Alert ein Signal in den Puffer geschrieben. Wenn dies der Fall ist, müssen Sie den Wert aus dem Puffer lesen.
Aber um das genau zu wissen, müssen Sie den Code sehen. Oder Datenfenster ctrl+D mit Indikatorwerten auf Balken mit Alarm.
Im Anhang zu diesem Artikel heißt es sHistoryExport.mq5. Mein Compiler akzeptiert keine Funktionen, deren Namen mit "HistoryDeal..." und Bezeichnern, die mit "DEAL_..." beginnen. Hier ist der Code:
#property link "https://www.mql5.com"
#property version "1.00"
#property script_show_inputs
input bool UseDateFrom = false; // Указывать дату начала
input datetime DateFrom=0; // Дата начала
input bool UseDateTo=false; // Указывать дату окончания
input datetime DateTo=0; // Дата окончания
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart(){
datetime from,to;
if(UseDateFrom){
from=DateFrom;
}
else{
from=0;
}
if(UseDateTo){
to=DateTo;
}
else{
to=TimeCurrent();
}
if(!HistorySelect(from,to)){
Alert("Ошибка выделение истории");
return;
}
string FileName="history.csv";
int h=FileOpen(FileName,FILE_WRITE|FILE_ANSI|FILE_CSV,";");
if(h==INVALID_HANDLE){
Alert("Ошибка открытия файла");
return;
}
// первая строка, что бы знать, где что находится
FileWrite(h,"Time","Deal","Order","Symbol","Type","Direction","Volume","Price","Comission","Swap","Profit","Comment");
// по всем сделкам
for(int i=0;i<HistoryDealsTotal();i++){
ulong ticket=HistoryDealGetTicket(i);
if(ticket!=0){
long type=HistoryDealGetInteger(ticket,DEAL_TYPE);
if(type==DEAL_TYPE_BUY || type==DEAL_TYPE_SELL){
long entry=HistoryDealGetInteger(ticket,DEAL_ENTRY);
FileWrite(h,(datetime)HistoryDealGetInteger(ticket,DEAL_TIME),
ticket,
HistoryDealGetInteger(ticket,DEAL_ORDER),
HistoryDealGetString(ticket,DEAL_SYMBOL),
(type==DEAL_TYPE_BUY?"buy":"sell"),
(entry==DEAL_ENTRY_IN?"in":(entry==DEAL_ENTRY_OUT?"out":"in/out")),
DoubleToString(HistoryDealGetDouble(ticket,DEAL_VOLUME),2),
HistoryDealGetDouble(ticket,DEAL_PRICE),
DoubleToString(HistoryDealGetDouble(ticket,DEAL_COMMISSION),2),
DoubleToString(HistoryDealGetDouble(ticket,DEAL_SWAP),2),
DoubleToString(HistoryDealGetDouble(ticket,DEAL_PROFIT),2),
HistoryDealGetString(ticket,DEAL_COMMENT)
);
}
}
else{
Alert("Ошибка выделения сделки, повторите попытку");
FileClose(h);
return;
}
}
FileClose(h);
Alert("Сохранение выполнено, см. файл "+FileName);
}
//+------------------------------------------------------------------+
Um ehrlich zu sein, habe ich es gar nicht überprüft - ich habe keine MT4-Historie mit Trades zur Hand - ich habe es einfach "auf meinen Knien" geschrieben, als ich mir Dmitrys Skript angesehen habe...
#property link "https://www.mql5.com"
#property version "1.00"
#property script_show_inputs
input bool UseDateFrom = false; // Указывать дату начала
input datetime DateFrom=0; // Дата начала
input bool UseDateTo=false; // Указывать дату окончания
input datetime DateTo=0; // Дата окончания
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart(){
//---
datetime from,to;
if(UseDateFrom) from=DateFrom;
else from=0;
if(UseDateTo) to=DateTo;
else to=TimeCurrent();
//---
string FileName="history.csv";
int h=FileOpen(FileName,FILE_WRITE|FILE_ANSI|FILE_CSV,";");
if(h==INVALID_HANDLE){
Alert("Ошибка открытия файла");
return;
}
//--- первая строка, что бы знать, где что находится
FileWrite(h,"OpenTime","CloseTime","Ticket","Symbol","Type","Volume","OpenPrice","ClosePrice","Comission","Swap","Profit","Comment");
//--- по всем сделкам
for(int i=OrdersHistoryTotal()-1; i>=0; i--) {
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)) {
if(OrderOpenTime()<from) continue;
if(OrderOpenTime()>to) break;
int type=OrderType();
if(type>OP_SELL) continue;
int dg=(int)SymbolInfoInteger(OrderSymbol(),SYMBOL_DIGITS);
int ticket=OrderTicket();
FileWrite(h,(datetime)OrderOpenTime(),
(datetime)OrderCloseTime(),
ticket,
OrderSymbol(),
(type==OP_BUY?"buy":"sell"),
DoubleToString(OrderLots(),2),
DoubleToString(OrderOpenPrice(),dg),
DoubleToString(OrderClosePrice(),dg),
DoubleToString(OrderCommission(),2),
DoubleToString(OrderSwap(),2),
DoubleToString(OrderProfit(),2),
OrderComment()
);
}
else{
Alert("Ошибка выделения сделки, повторите попытку");
FileClose(h);
return;
}
}
//---
FileClose(h);
Alert("Сохранение выполнено, см. файл "+FileName);
}
//+------------------------------------------------------------------+
Danke für die Klarstellung, Artem!
Aber es gibt noch eine weitere Frage.
Manchmal eröffnet ein EA einen Auftrag unmittelbar nach dem Auslösen des SL. So kann das gesamte Depot auf eine Kerze entleert werden.
Wie kann die Verzögerung für das Öffnen des nächsten Auftrags nach dem Schließen des aktuellen Auftrags korrekt angegeben werden? Die Verzögerungszeit sollte gleich der Candlestick-Zeit sein und automatisch berechnet werden.
Ich danke Ihnen!
Danke für die Klarstellung, Artem!
Aber es gibt noch eine weitere Frage.
Es kann vorkommen, dass ein EA unmittelbar nach dem Auslösen des SL eine Order eröffnet. So können wir das gesamte Depot auf eine Kerze auslaufen lassen.
Wie kann die Verzögerung für die Eröffnung des nächsten Auftrags nach Abschluss des aktuellen Auftrags korrekt angegeben werden? Die Verzögerungszeit sollte gleich der Candlestick-Zeit sein und automatisch berechnet werden.
Ich danke Ihnen!
Die Logik ist wie folgt:
Nun, um ehrlich zu sein, habe ich es überhaupt nicht überprüft - ich habe die MT4-Geschäftshistorie nicht zur Hand - ich habe es einfach "auf meinen Knien" geschrieben, als ich mir Dimitris Skript angesehen habe...
Es funktioniert. Auf den ersten Blick scheint alles in Ordnung zu sein, nur das Öffnen/Schließen schreibt nicht das Datum, aber ich weiß, wie man das beheben kann. Ich danke Ihnen vielmals.
Hilfe mit diesem Berater auf dem vorherigen Build funktionierte und jetzt nicht!!!!
Womit brauchen Sie Hilfe? Gibt es etwas, das Sie nicht selbst tun können?
Hier gibt es Hilfe und Diskussionen, aber keine unentgeltliche Wunscherfüllung
Womit brauchen Sie Hilfe? Gibt es etwas, das Sie nicht selbst tun können?
Hilfe und Diskussion hier, aber keine unentgeltliche Wunscherfüllung
Ich verstehe nicht, wo der Fehler liegt?