新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 11

 
greeng2016:
我怎样才能从EA中知道一个指标警报已经到来?

你需要一个警报吗?

通常情况下,随着警报的发生,一些信号被写入缓冲区,如果是这样,你需要从缓冲区中读取数值。

但你需要看到代码才能准确判断。或者数据窗口 ctrl+D,在条形图上显示指标值并发出警报。

 
kosmo13:

在那篇文章的附录中,它被称为sHistoryExport.mq5。我的编译器不接受名称以 "HistoryDeal... "开头的函数和以 "DEAL_... "开头的标识符。以下是代码。

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

说实话,我根本没有检查 - 我手头没有MT4的交易记录 - 我只是看着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);  
}
//+------------------------------------------------------------------+
 

谢谢你的澄清,Artem!

但还有一个问题。

有时EA会在SL触发后立即开出一个订单。因此,它可以在一支蜡烛上耗尽全部存款。

如何正确指定当前订单关闭后打开下一个订单的延迟?延迟时间应等于蜡烛图时间,并自动计算。

谢谢你!

 
Viachaslau Baiko:

谢谢你的澄清,Artem!

但还有一个问题。

有时EA会在SL触发后立即开出一个订单。因此,我们可以让整个存款在一支蜡烛上耗尽。

如何正确指定当前订单关闭后开启下一个订单的延迟?延迟时间应等于蜡烛图时间,并自动计算。

谢谢你!

其逻辑如下。

  1. 通过其类型和关闭时间找到最后关闭的订单
  2. 我们发现,在这一命令结束时,它所处的酒吧已经关闭了
  3. 如果获得的栏位值高于零,就可以开立新的仓位,否则就不行。
 
Artyom Trishkin:

好吧,说实话,我根本没有检查过--我手头没有MT4交易记录--我只是 "跪着 "看着迪米特里的脚本写的......

它是有效的。它似乎是好的,但打开/关闭有错误的日期,但我知道如何修复它。非常感谢你。
 
kosmo13:
它是有效的。乍一看,一切似乎都很好,打开/关闭只写不写日期,但我知道如何解决这个问题。非常感谢你。
 
对这个顾问的帮助在以前的构建中起作用,但现在不行了!!!!
附加的文件:
 
zhas89:
帮助这个顾问在以前的构建中工作,现在不工作了!!!!

你需要什么帮助?有什么是你自己不能做的吗?

这里有帮助和讨论,但不是无偿的愿望实现。

 
Artyom Trishkin:

你需要什么帮助?有什么是你自己不能做的吗?

在这里提供帮助和讨论,但不是无偿地满足愿望

我不明白有什么问题?
 
zhas89:
我不明白有什么错误?
你在哪里寻找,你做了什么,你从中得到了什么?
原因: