Dans l'annexe de cet article, il s'appelle sHistoryExport.mq5. Mon compilateur n'accepte pas les fonctions dont le nom commence par "HistoryDeal..." et les identifiants par "DEAL_...". Voici le code :
inputbool UseDateFrom = false; // Указывать дату начала inputdatetime DateFrom=0; // Дата начала inputbool UseDateTo=false; // Указывать дату окончания inputdatetime DateTo=0; // Дата окончания
//+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ voidOnStart(){
Pour être honnête, je ne l'ai pas du tout vérifié - je n'ai pas l'historique MT4 avec les transactions sous la main - je l'ai juste écrit "à genoux" en regardant le script de Dmitry...
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); } //+------------------------------------------------------------------+
Parfois, un EA ouvre un ordre immédiatement après le déclenchement du SL. Ainsi, il peut drainer la totalité du dépôt en une seule bougie.
Comment spécifier correctement le délai d'ouverture de l'ordre suivant après la fermeture de l'ordre en cours ? Le temps de retard doit être égal au temps du chandelier et être calculé automatiquement.
Parfois, un EA ouvre un ordre immédiatement après le déclenchement du SL. Ainsi, nous pouvons laisser la totalité du dépôt être drainée sur une seule bougie.
Comment spécifier correctement le délai pour l'ouverture de l'ordre suivant après la fermeture de l'ordre en cours ? Le temps de retard doit être égal au temps du chandelier et être calculé automatiquement.
Merci !
La logique est la suivante :
trouver le dernier ordre clôturé par son type et l'heure de sa clôture
Nous trouvons la barre à laquelle il était fermé au moment où cette commande a été fermée.
Si la valeur obtenue de la barre est supérieure à zéro, une nouvelle position peut être ouverte, sinon, non.
Pour être honnête, je ne l'ai pas vérifié du tout - je n'ai pas l'historique des transactions de MT4 à portée de main - je l'ai juste écrit "à genoux" en regardant le script de Dimitri...
Ça marche. Il semble être Ok, mais l'ouverture/fermeture a une mauvaise date, mais je sais comment le réparer. Merci beaucoup.
kosmo13: Ça marche. A première vue, tout semble correct, l'ouverture/fermeture n'écrit que la date, mais je sais comment résoudre ce problème. Merci beaucoup.
Comment puis-je savoir à partir de l'EA qu'un indicateur d'alerte est arrivé ?
Avez-vous besoin d'une alerte ?
Habituellement, avec une alerte, un signal est écrit dans le tampon. Si c'est le cas, vous devez lire la valeur du tampon.
Mais vous devez voir le code pour le savoir exactement. Ou fenêtre de données ctrl+D avec les valeurs des indicateurs sur la barre avec alerte.
Dans l'annexe de cet article, il s'appelle sHistoryExport.mq5. Mon compilateur n'accepte pas les fonctions dont le nom commence par "HistoryDeal..." et les identifiants par "DEAL_...". Voici le 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);
}
//+------------------------------------------------------------------+
Pour être honnête, je ne l'ai pas du tout vérifié - je n'ai pas l'historique MT4 avec les transactions sous la main - je l'ai juste écrit "à genoux" en regardant le script de Dmitry...
#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);
}
//+------------------------------------------------------------------+
Merci pour cette précision, Artem !
Mais il y a une autre question.
Parfois, un EA ouvre un ordre immédiatement après le déclenchement du SL. Ainsi, il peut drainer la totalité du dépôt en une seule bougie.
Comment spécifier correctement le délai d'ouverture de l'ordre suivant après la fermeture de l'ordre en cours ? Le temps de retard doit être égal au temps du chandelier et être calculé automatiquement.
Merci !
Merci pour cette précision, Artem !
Mais il y a une autre question.
Parfois, un EA ouvre un ordre immédiatement après le déclenchement du SL. Ainsi, nous pouvons laisser la totalité du dépôt être drainée sur une seule bougie.
Comment spécifier correctement le délai pour l'ouverture de l'ordre suivant après la fermeture de l'ordre en cours ? Le temps de retard doit être égal au temps du chandelier et être calculé automatiquement.
Merci !
La logique est la suivante :
Pour être honnête, je ne l'ai pas vérifié du tout - je n'ai pas l'historique des transactions de MT4 à portée de main - je l'ai juste écrit "à genoux" en regardant le script de Dimitri...
Ça marche. A première vue, tout semble correct, l'ouverture/fermeture n'écrit que la date, mais je sais comment résoudre ce problème. Merci beaucoup.
Aide avec ce conseiller sur la construction précédente a travaillé et maintenant il ne fait pas !!!!
En quoi avez-vous besoin d'aide ? Y a-t-il quelque chose que vous ne pouvez pas faire vous-même ?
Il est possible d'aider et de discuter ici, mais pas de réaliser des souhaits gratuits.
En quoi avez-vous besoin d'aide ? Y a-t-il quelque chose que vous ne pouvez pas faire vous-même ?
Aide et discussion ici, mais pas de réalisation gratuite de souhaits.
Je ne comprends pas quelle est l'erreur ?