错误、漏洞、问题 - 页 53

 
Kos:
我没有在文档中找到任何关于交易请求 结果的MqlTradeCheckResult结构的响应代码(Retcode)的描述。会不会有呢?


所有的描述都在文件中。

看看OrderSend函数MqlTradeResult 结构和交易响应代码列表

 
Renat:

被告知 - 没有大小的空数组

Tnew[1] - 出了数组,数组被描述为Tnew[1],所以它的元素只能作为Tnew[0]被访问,因为索引从零开始。

输出是什么?在这种情况下,Tnew[1]是一个不正确的表达,但它是否有效?Tnew[0] , Tnew[] 是一个有效的表达式,还是别的什么?当使用Tnew[1]、Tnew[0]、Tnew[]时,专家顾问的结果似乎没有变化。
 
Renat:

所有的描述都在文件中。

看看OrderSend函数MqlTradeResult 结构和交易响应代码列表

Renat,如果我理解正确的话,MqlTradeResult 结构的ENUM_TRADE_RETURN_CODES返回代码 ,也适用于MqlTradeCheckResult结构
 
ias:
输出是什么?在这种情况下,Tnew[1]是一个不正确的表达,但它是否可以接受?Tnew[0] , Tnew[] 是一个有效的表达式还是别的什么?当使用Tnew[1],Tnew[0],Tnew[]时,专家的结果似乎没有变化。

结果不可能是相同的,至少在通过一个不存在的索引从数组中读取数据时是如此。你认为Tnew[1]里有什么?

我不太确定所写的是什么,当EA离开范围时,它可以报告错误 并继续前进。 但在这种情况下,Tnew[0]中会有什么?

Общайтесь с разработчиками через Сервисдеск!
Общайтесь с разработчиками через Сервисдеск!
  • www.mql5.com
Ваше сообщение сразу станет доступно нашим отделам тестирования, технической поддержки и разработчикам торговой платформы.
 
Kos:
Renat,如果我理解正确的话,MqlTradeResult 结构的ENUM_TRADE_RETURN_CODES返回代码 ,也适用于MqlTradeCheckResult结构

是的,贸易错误代码的基数对整个贸易功能空间是相同的。

新功能的描述将被纠正--我们只是没有时间马上去做。

 
Interesting:

结果不可能是相同的,至少在通过一个不存在的索引从数组中读取数据时是如此。你认为Tnew[1]里有什么?

我对写作不太确定,专家顾问可以报告错误 并在离开范围时继续前进,但在这种情况下,Tnew[0]中会有什么?

当使用数据时间 Tnew[1];Tnew[0];Tnew[];时,专家工作的结果没有变化。这是否意味着在Exp_TEMA.mq5 "创建一个在不同符号上进行交易的专家顾问 "一文中的,函数

//+X================================================================X+
//| IsNewBar() function                                              |
//+X================================================================X+
bool IsNewBar(int Number, string symbol, ENUM_TIMEFRAMES timeframe)
  {
//----+
   static datetime Told[];
   datetime Tnew[1];
   
   //----+ Объвление переменной для хранения размеров массивов переменных
   static int Size_ = 0;
   
   //----+ Изменение размеров массивов переменных
   if (Number + 1 > Size_)
    {
     uint size = Number + 1;
     //----
     if (ArrayResize(Told, size) == -1)
      {
       string word = "";
       StringConcatenate(word, "IsNewBar( ", Number,
                    " ): Ошибка!!! Не удалось изменить размеры массивов переменных!!!"); 
       Print(word); 
       //----          
       int error = GetLastError();
       ResetLastError();
       if (error > 4000)
        {
         StringConcatenate(word, "IsNewBar( ", Number, " ): Код ошибки ", error);
         Print(word); 
        }  
       //----                                                                                                                                                                                                  
       Size_ = -2;
       return(false);
      }
    }
   
   CopyTime(symbol, timeframe, 0, 1, Tnew); 
   if (Tnew[0] != Told[Number])
    {
     Told[Number] = Tnew[0];
     return(true);
    }
//----+
   return(false);
  }
//+X================================================================X+

不起作用?

你认为Tnew[1]是什么?

在CopyTime(symbol, timeframe, 0, 1, Tnew)之后;地址Tnew[1]应该包含前一个条形图的开始时间。

 
ias:

当使用数据时间 Tnew[1];Tnew[0];Tnew[];时,专家工作的结果并没有改变。是否应该从《创建专家顾问在不同的符号上进行交易》一文中得出有专家顾问Exp_TEMA.mq5?,函数

不起作用?

你认为Tnew[1]是什么?

在CopyTime(symbol, timeframe, 0, 1, Tnew)之后;地址Tnew[1]应该包含前一个条形图的开始时间。

让我们按顺序分析一下

这两个字符串声明了两个数组,其中一个是动态的,而第二个数组 Tnew) 只包含一条记录。

static datetime Told[];
datetime Tnew[1];

这是在试图改变动态数组的 大小。假设数组中的记录数量将等于大小

if (ArrayResize(Told, size) == -1)

这一行从第0 条开始复制一条记录(酒吧日期)到Tnew 数组。然后这个日期就变成了Tnew[0](因为数组的编号为ZERO)。

CopyTime(symbol, timeframe, 0, 1, Tnew);

这里,数组Tnew 的唯一记录与数组Told 的一个单元格中编号为Number-1 的记录进行比较(记住,数组是从0开始编号的)

如果这些日期不匹配,我们就把Tnew 数组的值写到Told 数组的单元格。

if (Tnew[0] != Told[Number])
{
Told[Number] = Tnew[0];
return(true);
}
 
Kos:
我没有在文档中找到任何关于MqlTradeCheckResult贸易请求 检查结果结构的响应代码(Retcode)的描述。他们会不会有机会?


在MetaTrader 5/MQL5/Include/ErrorDescription.mqh中。
附加的文件:
 
Valmars:
在文件MetaTrader 5/MQL5/Include/ErrorDescription.mqh中。
瓦莱里,谢谢你。但这并不是我所寻找的:)
 

我有一个问题。没有孔的图形的问题没有被考虑吗?https://www.mql5.com/ru/forum/100491

非常难以同步一切,我似乎已经试图在指标中说明一切,但这些孔是非常难以处理的。

2010.07.19 02:20:12 检查孔洞 (EURUSD,M1) 从2010.07.09 21:35:00开始,历史上的孔洞数量为260。
2010.07.19 02:20:12 检查孔(EURUSD,M1) GBPUSD孔 2010.07.19 00:20:00
2010.07.19 02:20:12 检查孔(EURUSD,M1) 孔 USDJPY 2010.07.19 00:15:00
2010.07.19 02:20:12 检查孔(EURUSD,M1) 孔EURGBP 2010.07.16 22:43:00
2010.07.19 02:20:12 检查孔(EURUSD,M1) GBPUSD孔 2010.07.16 22:43:00
2010.07.19 02:20:12 检查孔(EURUSD,M1) GBPUSD孔 2010.07.16 22:38:00
2010.07.19 02:20:12 检查孔(EURUSD,M1) AUDUSD孔 2010.07.16 22:21:00

etc.....

//+------------------------------------------------------------------+
//|                                                 Проверка дыр.mq5 |
//|                                                    Привалов С.В. |
//|                           https://www.mql5.com/ru/users/Prival |
//+------------------------------------------------------------------+
#property copyright "Привалов С.В."
#property link      "https://www.mql5.com/ru/users/Prival"
#property version   "1.00"
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
#property indicator_color1  Blue


int   MaxBars=7200;  // точка старта
string mas_0[]={"USDCHF","GBPUSD","EURUSD","USDJPY","USDCAD","AUDUSD","EURGBP","EURAUD","EURCHF","EURJPY","GBPJPY","GBPCHF"};
int count_symbol=12;
double Buffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   SetIndexBuffer(0,Buffer,INDICATOR_DATA);
   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_HISTOGRAM);

//--- на старте сразу же пошлем асинхронные запросы на поднятие таймфреймов в память
   for(int i=0; i<count_symbol; i++) CheckOtherSymbol(mas_0[i],MaxBars);
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   if(rates_total<MaxBars) return(0);    // ничего не считаем и ничего не рисуем на графике         

   int start_pos=rates_total-MaxBars-1;  // точка старта

   if(close[start_pos]==0)   return(0);  // ничего не считаем и ничего не рисуем на графике 

//--- снова пошлем асинхронные запросы на поднятие таймфреймов в память
   for(int i=0; i<count_symbol; i++)
      {
      if(!CheckOtherSymbol(mas_0[i],MaxBars)) return(0);
      }

   if(prev_calculated==0)
     {
      Print("Дата начала тестирования ",time[start_pos]);
      Print("Символ ",_Symbol," приод ",_Period);
     }
   else start_pos=prev_calculated-1;
   int  sum=0;
//--- расчет индикатора
   for(int i=start_pos;i<rates_total;i++)
     {
      Buffer[i]=0;
      for(int j=0; j<count_symbol; j++)
         {
         if(!CheckTimeOtherSymbol(mas_0[j],time[i]))
            {
            Print("Дыра ",mas_0[j]," ",time[i]);
            sum++;
            }
         }
     }
     Print("Количество дыр в истории ",sum, " от даты ",time[start_pos]);
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Проверка символов с асинхронным возбуждением                     |
//+------------------------------------------------------------------+
//| вход                                                             |
//| symbol - символ                                                  |
//| count_Bars - необходимое количество баров                        |
//+------------------------------------------------------------------+
bool CheckOtherSymbol(string symbol,int bars)
  {
   datetime ctm[1];
   datetime checktime=TimeCurrent()-bars*PeriodSeconds(_Period);  // требуемое время
   bool     res=true;
// скопируем время требуемого бара
   if(CopyTime(symbol,_Period,checktime,1,ctm)!=1) res=false;
   if(!res) Print("Нет данных по символу ",symbol);
//--- вернем результат
   return(res);
  }
//+------------------------------------------------------------------+
//| Проверка синхронности символов                                   |
//+------------------------------------------------------------------+
bool CheckTimeOtherSymbol(string symbol,datetime time)
  {
   datetime ctm[1];
   bool     res=false;
//--- скопируем время бара
   if(CopyTime(symbol,_Period,time,1,ctm)==1)
     {
      // сравним его с требуемым
      if(ctm[0]==time) res=true;
     }
//   if(!res) Print("Нет синхронизации по символу ",symbol," time[0]=",ctm[0]," нужно ",time);
//--- вернем результат
   return(res);
  }
//+------------------------------------------------------------------+

和第二个问题:在这个多货币指标中是否有我没有检查过的其他隐患?

Всем, кто хотел видеть графики без пропущенных баров - сюда =) - MQL4 форум
  • www.mql5.com
Всем, кто хотел видеть графики без пропущенных баров - сюда =) - MQL4 форум
附加的文件: