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:
inputbool UseDateFrom = false; // Указывать дату начала inputdatetime DateFrom=0; // Дата начала inputbool UseDateTo=false; // Указывать дату окончания inputdatetime DateTo=0; // Дата окончания
//+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ voidOnStart(){
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...
inputbool UseDateFrom = false; // Указывать дату начала inputdatetime DateFrom=0; // Дата начала inputbool UseDateTo=false; // Указывать дату окончания inputdatetime DateTo=0; // Дата окончания
//+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ voidOnStart(){ //--- 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); } //+------------------------------------------------------------------+
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.
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:
den letzten abgeschlossenen Auftrag anhand seiner Art und des Zeitpunkts seines Abschlusses finden
Wir stellen fest, dass die Bar zum Zeitpunkt des Abschlusses dieser Bestellung geschlossen war
Wenn der ermittelte Wert des Balkens größer als Null ist, kann eine neue Position eröffnet werden, andernfalls nicht.
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. Es scheint in Ordnung zu sein, aber das Öffnen/Schließen hat ein falsches Datum, aber ich weiß, wie ich es beheben kann. Ich danke Ihnen vielmals.
kosmo13: 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.
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?