Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 11

 
greeng2016:
Wie kann ich im EA erkennen, dass ein Indikatoralarm eingetroffen ist?

Brauchen Sie eine Ausschreibung?

Normalerweise wird bei einem Alert ein Signal in den Puffer geschrieben. Wenn dies der Fall ist, müssen Sie den Wert aus dem Puffer lesen.

Aber um das genau zu wissen, müssen Sie den Code sehen. Oder Datenfenster ctrl+D mit Indikatorwerten auf Balken mit Alarm.

 
kosmo13:

Im Anhang zu diesem Artikel heißt es sHistoryExport.mq5. Mein Compiler akzeptiert keine Funktionen, deren Namen mit "HistoryDeal..." und Bezeichnern, die mit "DEAL_..." beginnen. Hier ist der Code:

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

Um ehrlich zu sein, habe ich es gar nicht überprüft - ich habe keine MT4-Historie mit Trades zur Hand - ich habe es einfach "auf meinen Knien" geschrieben, als ich mir Dmitrys Skript angesehen habe...

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

Danke für die Klarstellung, Artem!

Aber es gibt noch eine weitere Frage.

Manchmal eröffnet ein EA einen Auftrag unmittelbar nach dem Auslösen des SL. So kann das gesamte Depot auf eine Kerze entleert werden.

Wie kann die Verzögerung für das Öffnen des nächsten Auftrags nach dem Schließen des aktuellen Auftrags korrekt angegeben werden? Die Verzögerungszeit sollte gleich der Candlestick-Zeit sein und automatisch berechnet werden.

Ich danke Ihnen!

 
Viachaslau Baiko:

Danke für die Klarstellung, Artem!

Aber es gibt noch eine weitere Frage.

Es kann vorkommen, dass ein EA unmittelbar nach dem Auslösen des SL eine Order eröffnet. So können wir das gesamte Depot auf eine Kerze auslaufen lassen.

Wie kann die Verzögerung für die Eröffnung des nächsten Auftrags nach Abschluss des aktuellen Auftrags korrekt angegeben werden? Die Verzögerungszeit sollte gleich der Candlestick-Zeit sein und automatisch berechnet werden.

Ich danke Ihnen!

Die Logik ist wie folgt:

  1. den letzten abgeschlossenen Auftrag anhand seiner Art und des Zeitpunkts seines Abschlusses finden
  2. Wir stellen fest, dass die Bar zum Zeitpunkt des Abschlusses dieser Bestellung geschlossen war
  3. Wenn der ermittelte Wert des Balkens größer als Null ist, kann eine neue Position eröffnet werden, andernfalls nicht.
 
Artyom Trishkin:

Nun, um ehrlich zu sein, habe ich es überhaupt nicht überprüft - ich habe die MT4-Geschäftshistorie nicht zur Hand - ich habe es einfach "auf meinen Knien" geschrieben, als ich mir Dimitris Skript angesehen habe...

Es funktioniert. Es scheint in Ordnung zu sein, aber das Öffnen/Schließen hat ein falsches Datum, aber ich weiß, wie ich es beheben kann. Ich danke Ihnen vielmals.
 
kosmo13:
Es funktioniert. Auf den ersten Blick scheint alles in Ordnung zu sein, nur das Öffnen/Schließen schreibt nicht das Datum, aber ich weiß, wie man das beheben kann. Ich danke Ihnen vielmals.
 
Hilfe mit diesem Berater auf dem vorherigen Build funktionierte, aber nicht jetzt!!!!
Dateien:
 
zhas89:
Hilfe mit diesem Berater auf dem vorherigen Build funktionierte und jetzt nicht!!!!

Womit brauchen Sie Hilfe? Gibt es etwas, das Sie nicht selbst tun können?

Hier gibt es Hilfe und Diskussionen, aber keine unentgeltliche Wunscherfüllung

 
Artyom Trishkin:

Womit brauchen Sie Hilfe? Gibt es etwas, das Sie nicht selbst tun können?

Hilfe und Diskussion hier, aber keine unentgeltliche Wunscherfüllung

Ich verstehe nicht, was los ist?
 
zhas89:
Ich verstehe nicht, wo der Fehler liegt?
Wo haben Sie gesucht, was haben Sie getan, und was haben Sie dabei herausgefunden?
Grund der Beschwerde: