Toute question des nouveaux arrivants sur MQL4 et MQL5, aide et discussion sur les algorithmes et les codes. - page 11
Vous manquez des opportunités de trading :
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Inscription
Se connecter
Vous acceptez la politique du site Web et les conditions d'utilisation
Si vous n'avez pas de compte, veuillez vous inscrire
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 ?