Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 11

 
greeng2016:
Come faccio a sapere dall'EA che è arrivato un avviso di indicatore?

Avete bisogno di un allarme?

Di solito con un allarme qualche segnale viene scritto nel buffer, se è così, è necessario leggere il valore dal buffer.

Ma bisogna vedere il codice per dirlo esattamente. O finestra dati ctrl+D con i valori dell'indicatore sulla barra con avviso.

 
kosmo13:

Nell'appendice di quell'articolo, si chiama sHistoryExport.mq5. Il mio compilatore non accetta funzioni i cui nomi iniziano con "HistoryDeal..." e identificatori che iniziano con "DEAL_...". Ecco il codice:

#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);  
  
}
//+------------------------------------------------------------------+

Ad essere onesti, non l'ho controllato affatto - non ho la cronologia di MT4 con i trade a portata di mano - l'ho solo scritto "in ginocchio" guardando lo script di 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);  
}
//+------------------------------------------------------------------+
 

Grazie per il chiarimento, Artem!

Ma c'è un'altra domanda.

A volte un EA apre un ordine immediatamente dopo che lo SL è scattato. Così, può prosciugare l'intero deposito su una sola candela.

Come specificare correttamente il ritardo di apertura dell'ordine successivo alla chiusura dell'ordine corrente? Il tempo di ritardo dovrebbe essere uguale al tempo della candela ed essere calcolato automaticamente.

Grazie!

 
Viachaslau Baiko:

Grazie per il chiarimento, Artem!

Ma c'è un'altra domanda.

A volte un EA apre un ordine immediatamente dopo l'attivazione dello SL. Così, possiamo lasciare che l'intero deposito sia prosciugato su una sola candela.

Come specificare correttamente il ritardo per l'apertura dell'ordine successivo dopo la chiusura dell'ordine corrente? Il tempo di ritardo dovrebbe essere uguale al tempo della candela ed essere calcolato automaticamente.

Grazie!

La logica è la seguente:

  1. trova l'ultimo ordine chiuso in base al suo tipo e al tempo della sua chiusura
  2. Troviamo il bar in cui è stato chiuso al momento della chiusura di questo ordine
  3. Se il valore ottenuto della barra è superiore a zero, si può aprire una nuova posizione, altrimenti no.
 
Artyom Trishkin:

Beh, ad essere onesti, non l'ho controllato affatto - non ho la cronologia di MT4 a portata di mano - l'ho solo scritto "in ginocchio" guardando lo script di Dimitri...

Funziona. Sembra essere Ok, ma l'apertura/chiusura ha una data sbagliata, ma so come sistemarla. Grazie mille.
 
kosmo13:
Funziona. A prima vista tutto sembra a posto, aprendo/chiudendo scrive solo non la data, ma so come risolvere questo problema. Grazie mille.
 
L'aiuto di questo consigliere sulla build precedente ha funzionato, ma non ora!!!!
File:
 
zhas89:
Aiuto con questo consulente sulla build precedente funzionava e ora non lo fa!!!!

Per cosa hai bisogno di aiuto? C'è qualcosa che non puoi fare da solo?

Qui c'è aiuto e discussione, ma non l'appagamento gratuito dei desideri

 
Artyom Trishkin:

Per cosa hai bisogno di aiuto? C'è qualcosa che non puoi fare da solo?

Qui c'è aiuto e discussione, ma non l'appagamento gratuito dei desideri

Non capisco cosa c'è che non va?
 
zhas89:
Non capisco qual è l'errore?
Dove hai cercato, cosa hai fatto e cosa ne hai ricavato?