Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 11

 
greeng2016:
Como posso dizer da EA que chegou um alerta indicador?

Você precisa de um alerta?

Normalmente, com um alerta, algum sinal é escrito no buffer, se assim for, você precisa ler o valor do buffer.

Mas você precisa ver o código para dizer exatamente. Ou janela de dados ctrl+D com valores indicadores na barra com alerta.

 
kosmo13:

No apêndice desse artigo, ele se chama sHistoryExport.mq5. Meu compilador não aceita funções cujos nomes começam com "HistoryDeal..." e identificadores que começam com "DEAL_...". Aqui está o 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, eu não verifiquei nada - não tenho o histórico do MT4 com o comércio à mão - apenas o escrevi "de joelhos" olhando o roteiro 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);  
}
//+------------------------------------------------------------------+
 

Obrigado pelo esclarecimento, Artem!

Mas há mais uma pergunta.

Às vezes, um EA abre um pedido imediatamente após o SL ter acionado. Assim, ele pode drenar todo o depósito em uma única vela.

Como especificar corretamente o atraso para abrir o próximo pedido após o fechamento do pedido atual? O tempo de atraso deve ser igual ao tempo do castiçal e ser calculado automaticamente.

Obrigado!

 
Viachaslau Baiko:

Obrigado pelo esclarecimento, Artem!

Mas há mais uma pergunta.

Às vezes, um EA abre um pedido imediatamente após o acionamento do SL. Assim, podemos deixar que todo o depósito seja drenado em uma única vela.

Como especificar corretamente o atraso para a abertura do próximo pedido após o fechamento do pedido atual? O tempo de atraso deve ser igual ao tempo do castiçal e ser calculado automaticamente.

Obrigado!

A lógica é a seguinte:

  1. encontrar a última ordem fechada por seu tipo e hora de fechamento
  2. Encontramos o bar em que estava fechado quando esta ordem foi fechada
  3. Se o valor obtido da barra for superior a zero, uma nova posição pode ser aberta, caso contrário, não.
 
Artyom Trishkin:

Bem, para ser honesto, eu não verifiquei nada - não tenho o histórico do negócio MT4 à mão - apenas o escrevi "de joelhos" olhando para o roteiro de Dimitri...

Funciona. Parece estar tudo bem, mas a abertura/fecho tem data errada, mas eu sei como consertá-lo. Muito obrigado.
 
kosmo13:
Funciona. À primeira vista tudo parece bem, abrir/fechar apenas escreve não a data, mas eu sei como consertar isso. Muito obrigado.
 
Ajuda com este assessor sobre a construção anterior funcionou, mas não agora!!!!
Arquivos anexados:
 
zhas89:
Ajuda com este assessor na construção anterior funcionou e agora não!!!!

Com o que você precisa de ajuda? Há alguma coisa que você não possa fazer você mesmo?

Há ajuda e discussão aqui, mas não a satisfação de desejos gratuitos

 
Artyom Trishkin:

Com o que você precisa de ajuda? Há alguma coisa que você não possa fazer você mesmo?

Ajuda e discussão aqui, mas não a satisfação de desejos gratuitos

Eu não entendo o que está errado?
 
zhas89:
Eu não entendo qual é o erro?
Onde você olhou, o que fez e o que ganhou com isso?