初学者的问题 MQL5 MT5 MetaTrader 5 - 页 1019

 
Сергей Таболин:

第一条途径有助于))))谢谢。

还有一个问题:我在指标中撕掉了3个指标实例,从不同的TFs中获取数据。但当我把它附加到一个图表上时,我得到的是这样的电子表格。

这将意味着什么?

我不能确定,但也许第2个缓冲区的初始化较晚。

要想知道到底是什么原因,你应该像这样调整以下几行

if(CopyBuffer(handle_MA,0,0,ma_values_to_copy,buffer_MA) < 0 ) // копируем данные из индикаторного массива в массив buffer_MA
   {                                                                                // если не скопировалось
      Print("Не удалось скопировать данные из индикаторного буфера в buffer_MA, код ошибки "+ IntegerToString(GetLastError()));   // то выводим сообщение об ошибке
      return(0);                                                                    // и выходим из функции
   }

之后,我们可以更有把握地说,什么是错的

 
Oleg Peiko:

我不能确定,但也许第2个缓冲区的初始化较晚。

为了找出到底是什么原因,你应该这样调整以下几行

之后,我们可以更有信心地说出问题所在。

2019.03.23 22:58:11.410 my_HMA5_123 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA
2019.03.23 22:58:11.410 my_HMA5_123 (GBPUSD,M30)        Не удалось скопировать данные из индикаторного буфера в buffer_MA2
2019.03.23 22:58:11.410 my_HMA5_123 (GBPUSD,M30)        4806
2019.03.23 22:58:11.637 my_HMA5_123.ex5::my_HMA5 (GBPUSD,M15)   BarsCalculated() вернул -1, код ошибки 4806
2019.03.23 22:58:11.648 my_HMA5_123 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA
2019.03.23 22:58:11.648 my_HMA5_123 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA2
2019.03.23 22:58:11.648 my_HMA5_123 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA3
ERR_INDICATOR_DATA_NOT_FOUND    4806    Запрошенные данные не найдены

能否用它做一些事情?

顺便说一下,这个副本在M15上打开。

然而,同样的事情也发生在其他TFs...

 
Сергей Таболин:

你有什么可以做的吗?

顺便说一下,这个副本在M15上打开。

在其他时间段也是如此......

在计时器中,每两分钟一次,要求提供所需时间范围的任何数据。这样一来,你将始终拥有最新的时间框架的数据。

此外:在OnCalculate()中,在它的最开始,你要求它,例如:。

   if(iTime(NULL,PERIOD_M15,1)==0)
      return 0;

因此,在15分钟时间框架的数据可用之前,该指标将等待下一个刻度。
你可以通过使用CopyXXX功能,要求获得合适的数据量进行计算。

   datetime array[];
   if(CopyTime(NULL,PERIOD_M15,0,number_of_datas,array)!=number_of_datas)
      return 0;

在这种情况下,直到所需的数据数量可用时,指标将等待下一个tick。

如果你决定使用函数

Bars(NULL,PERIOD_M15);

...,你应该考虑到计算的数据量不应该超过rate_total,否则会超过数组的限制。换句话说,如果当前时间框架上的条数少于M15上的条数,那么我们应该取等于其在当前时间框架上的条数= rates_total

 
Artyom Trishkin:

在定时器中,每两分钟一次,要求提供所需时间范围内的任何数据。这样一来,你将始终拥有最新的时间框架的数据。

此外:在OnCalculate()中,在它的最开始,你要求,例如。

因此,在15分钟的时间框架数据可用之前,指标将等待下一个刻度。
你可以通过CopyXXX功能要求获得合适的数据量来进行计算。

在这种情况下,直到number_of_datas中的所需数据量可用时,指标将等待下一个tick。

如果你决定使用函数

...,你应该考虑到计算的数据量不应该超过rate_total,否则会超过数组的限制。换句话说,如果当前时间框架上的条数少于M15上的条数,那么我们应该取等于其在当前时间框架上的条数= rates_total

谢谢。

是这样做的。

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(iTime(NULL,PERIOD_CURRENT,1)==0)  return(0); 
   if(iTime(NULL,periodTF1,1)==0)       return(0); 
   if(iTime(NULL,periodTF2,1)==0)       return(0); 
   
   int ma_values_to_copy; 
   int ma_calculated = 0;
   if(PeriodSeconds(PERIOD_CURRENT) < PeriodSeconds(periodTF1) && PeriodSeconds(PERIOD_CURRENT) < PeriodSeconds(periodTF2))   ma_calculated = BarsCalculated(handle_MA);
   else
   if(PeriodSeconds(periodTF1) < PeriodSeconds(PERIOD_CURRENT) && PeriodSeconds(periodTF1) < PeriodSeconds(periodTF2))        ma_calculated = BarsCalculated(handle_MA2);
   else
   if(PeriodSeconds(periodTF2) < PeriodSeconds(PERIOD_CURRENT) && PeriodSeconds(periodTF2) < PeriodSeconds(periodTF1))        ma_calculated = BarsCalculated(handle_MA3);
   
   if(ma_calculated <= 0){ 
      PrintFormat("BarsCalculated() вернул %d, код ошибки %d",ma_calculated,GetLastError()); 
      return(0); 
     }  
   if(prev_calculated == 0 || ma_calculated != ma_bars_calculated || rates_total > prev_calculated + 1){ 
      if(ma_calculated > rates_total) ma_values_to_copy = rates_total; 
      else ma_values_to_copy = ma_calculated; 
     } else { 
      ma_values_to_copy = (rates_total - prev_calculated) + 1; 
     } 

结果。

2019.03.24 00:56:38.056 my_HMA5_125 (GBPUSD,M30)        BarsCalculated() вернул -1, код ошибки 4806
2019.03.24 00:56:38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA
2019.03.24 00:56:38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA_c
2019.03.24 00:56:38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA2
2019.03.24 00:56:38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA_c2
2019.03.24 00:56:38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA3
2019.03.24 00:56:38.226 my_HMA5_125 (GBPUSD,M30)        Скопирован индикаторный буфер в buffer_MA_c3

我对指标很不满意 ))))

 

大家好!
请告知关于CopyHigh的功能。
我在这个函数的定义中读到,"将历史数据 转为一个数组,其中包含 指定符号和时期的最大条形价格"。

我们谈论的是买入或卖出价格阵列吗?或者是否有某种方法来设定所需的价格类型?

 
renatmt5:

嗨,你们好!
请告知关于CopyHigh的功能。
我在这个函数的定义中看到,"将历史数据 获取为一个指定符号和时期的最大条形价格的数组"。

我们谈论的是买入或卖出价格阵列吗?或者是否有可能以某种方式设定所需的价格类型?

参考:绘图的特点

制作图表的特点

构建图表所依据的历史数据被存储在硬盘上。当你打开一个图表时,数据会从磁盘上下载,并从交易服务器上下载最后缺失的数据。如果一个金融工具的历史数据在硬盘上没有,则会下载最后512条的历史数据。

要下载早期的数据,请将图表移动到所需区域。一旦图表被打开,平台将开始接收有关当前报价的信息。因此,进一步的价格运动是实时形成的。这些信息会自动保存在历史文件中,在将来再次打开这个图表时使用。

  • 图表上的最大条数 "参数是平台设置 设置的。这个参数可以控制图表上显示的历史数据量。
  • 这些图表是根据买入价格绘制。如果该符号的市场深度 可用,图表将以最后价格(最后执行的交易价格)绘制。
Просмотр и настройка графиков - Графики котировок, технический и фундаментальный анализ - MetaTrader 5
Просмотр и настройка графиков - Графики котировок, технический и фундаментальный анализ - MetaTrader 5
  • www.metatrader5.com
Графики в торговой платформе отображают изменение котировок финансовых инструментов во времени. Они необходимы для проведения технического анализа и работы советников. Они позволяют трейдерам наглядно следить за котировками валют и акций в режиме реального времени и моментально реагировать на любое изменение ситуации на финансовых рынках...
 
Vladimir Karputov:

参考资料:图形化的特点

制作图表的特点

构建图表所依据的历史数据被存储在硬盘上。当你打开一个图表时,数据会从磁盘上下载,并从交易服务器上下载最后缺失的数据。如果一个金融工具的历史数据在硬盘上没有,则会下载最后512条历史数据。

要下载早期的数据,请将图表移动到所需区域。一旦图表被打开,平台将开始接收有关当前报价的信息。因此,进一步的价格运动是实时形成的。这些信息会自动保存在历史文件中,在将来再次打开这个图表时使用。

  • 图表上的最大条数 "参数是平台设置 设置的。这个参数可以控制图表上显示的历史数据量。
  • 这些图表是根据买入价格绘制。如果该符号的市场深度 可用,图表将以最后价格(最后交易价格)绘制。

日安,弗拉基米尔,你一如既往地帮助我 :)谢谢你!

 
大家好。请告知如何根据分配给交易的资金来计算头寸的数量
 

如何在mql5中找到最小 的N的蜡烛?

在mql4中

   min=99999;
   N=5;
   for(int i=1;i<=N;i++)
     {
      if(High[i]-Low[i]<min) min=High[i]-Low[i];
     }
 
yiduwi:

如何在mql5中找到 N的最小 烛光?

在mql4中

在专家顾问中还是在一个指标中?是为当前的时间框架还是为另一个时间框架?