Cualquier pregunta de los recién llegados sobre MQL4 y MQL5, ayuda y discusión sobre algoritmos y códigos - página 11

 
greeng2016:
¿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.

 
kosmo13:

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 copyright "Copyright 2016, MetaQuotes Software Corp."
#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 copyright "Copyright 2016, MetaQuotes Software Corp."
#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.

 
Viachaslau Baiko:

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:

  1. encontrar la última orden cerrada por su tipo y la hora de su cierre
  2. Encontramos el bar en el que se cerró en el momento en que se cerró esta orden
  3. Si el valor obtenido de la barra es superior a cero, se puede abrir una nueva posición, en caso contrario, no.
 
Artyom Trishkin:

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. Parece estar bien, pero la apertura/cierre tiene una fecha incorrecta, pero sé cómo arreglarlo. Muchas gracias.
 
kosmo13:
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, pero ahora no!!!!
Archivos adjuntos:
 
zhas89:
¡¡¡¡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

 
Artyom Trishkin:

¿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 qué pasa.
 
zhas89:
No entiendo cuál es el error.
¿Dónde ha buscado, qué ha hecho y qué ha sacado en claro?
Razón de la queja: