Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 11
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
¿Cómo puedo saber desde el EA que ha llegado una alerta de indicador?
¿Necesita una alerta?
Normalmente con una alerta se escribe alguna señal en el buffer, si es así, hay que leer el valor del buffer.
Pero hay que ver el código para saberlo con exactitud. O la ventana de datos ctrl+D con los valores del indicador en la barra con alerta.
En el apéndice de ese artículo, se llama sHistoryExport.mq5. Mi compilador no acepta funciones cuyos nombres empiezan por "HistoryDeal..." e identificadores que empiezan por "DEAL_...". Aquí está el código:
#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);
}
//+------------------------------------------------------------------+
Para ser honesto, no lo comprobé en absoluto - no tengo a mano el historial de MT4 con las operaciones - sólo lo escribí "de rodillas" mirando el 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);
}
//+------------------------------------------------------------------+
Gracias por la aclaración, Artem.
Pero hay una pregunta más.
A veces un EA abre una orden inmediatamente después de que el SL se haya disparado. Así, puede drenar todo el depósito en una sola vela.
¿Cómo especificar correctamente el retraso en la apertura de la siguiente orden tras el cierre de la orden actual? El tiempo de retardo debe ser igual al tiempo de la vela y ser calculado automáticamente.
Gracias.
Gracias por la aclaración, Artem.
Pero hay una pregunta más.
A veces un EA abre una orden inmediatamente después de la activación del SL. Así, podemos dejar que todo el depósito se vacíe en una sola vela.
¿Cómo especificar correctamente el retraso para la apertura de la siguiente orden después del cierre de la orden actual? El tiempo de retardo debe ser igual al tiempo de la vela y ser calculado automáticamente.
Gracias.
La lógica es la siguiente:
Bueno, para ser honesto, no lo he comprobado en absoluto - no tengo el historial de operaciones de MT4 a mano - sólo lo escribí "de rodillas" mirando el script de Dimitri...
Funciona. A primera vista todo parece estar bien, al abrir/cerrar sólo escribe no la fecha, pero ya sé cómo arreglar eso. Muchas gracias.
¡¡¡¡La ayuda de este asesor en la versión anterior funcionaba y ahora no!!!!
¿En qué necesita ayuda? ¿Hay algo que no pueda hacer usted mismo?
Aquí se ayuda y se discute, pero no se cumplen deseos gratuitos
¿En qué necesita ayuda? ¿Hay algo que no pueda hacer usted mismo?
Ayuda y debate aquí, pero no el cumplimiento gratuito de los deseos
No entiendo cuál es el error.