错误、漏洞、问题 - 页 1030

 
Al_key:

而且我也一直在使用堆积器库获得条形转变。Metatrader中没有任何内置工具吗?

事实上,MT4中的iBarShift() 可能与编译器库中的工作方式相同,但最好是内置的--它的工作速度会更快(因为它是C++语言)。
 
MetaDriver:

你的案件在处理时有一个小的滑动。

我的更糟糕。(顺便说一下,你的没有Slip的箱子曾经工作过,几周前停止了。)

同样的方案在其他(非当前)图表上停止工作,没有令人毛骨悚然的滑动

代码来自这里:https://www.mql5.com/ru/code/224

安装的猫头鹰,见。

在当前的一个项目上,我扔了标准。AMA在图表上,捅破了重新计算(在睡眠从0到2350)--我下降到M1,再也没有回来。几秒钟后。AMA出现了,就这样了。

我尝试使用标志(我是否应该存储两个标志,当前和m1? 如果我已经使用了当前的一个(标志),现在我使用m1(标志2),那么......)。

但我怀疑它...周一的蜱虫会在我回到当前的蜱虫之前出现 :)

更新是的,我在图表上有一百个对象,再加上AMA,也就是说,它是如此沉重。

 
MetaDriver:

"我们必须这样做,费迪亚。我们必须这样做。"

(c) 舒立克。

--

例如,如果动态缓冲区的内存没有被分配,就会发生这样的错误(在这种情况下,在ActualBuffer 下)。 这个代码片段并没有说清楚。

在这里。

以及如何为动态缓冲区分配内存?

我想,当我发现的时候,这个问题就会消失。

以下是所有的代码

#include <TimeSeries.mqh>

#property indicator_separate_window
#property indicator_buffers 3
#property indicator_plots   3
//--- plot Actual
#property  indicator_label1  "Actual"
#property  indicator_type1   DRAW_LINE
#property  indicator_color1  clrLime
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  1
//--- plot Consensus
#property  indicator_label2  "Consensus"
#property  indicator_type2   DRAW_LINE
#property  indicator_color2  clrPeachPuff
#property  indicator_style2  STYLE_SOLID
#property  indicator_width2  1
//--- plot Previous
#property  indicator_label3  "Previous"
#property  indicator_type3   DRAW_LINE
#property  indicator_color3  clrLightCyan
#property  indicator_style3  STYLE_SOLID
#property  indicator_width3  1
//--- indicator buffers
double         ActualBuffer[];
double         ConsensusBuffer[];
double         PreviousBuffer[];
//--- indicator vars
string sDatetime;
string sActual;
string sConsensus;
string sPrevious;
int file_handle;
int barshift;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,ActualBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,ConsensusBuffer,INDICATOR_DATA);
   SetIndexBuffer(2,PreviousBuffer,INDICATOR_DATA);
   file_handle = FileOpen("CSV - макроэкономика и госкорпстат/Existing Home Sales Change.csv",FILE_READ|FILE_CSV|FILE_ANSI,',');
   while(!FileIsEnding(file_handle))
        {
         sDatetime  = FileReadString(file_handle);
         sActual    = FileReadString(file_handle);
         sConsensus = FileReadString(file_handle);
         sPrevious  = FileReadString(file_handle);
         
         barshift = iBarShift(Symbol(), Period(), datetime(formatdatetime(sDatetime)), false);
         if(StringToDouble(formatstring(sActual)) > 0 && StringToDouble(formatstring(sActual)) < 10000) ActualBuffer[barshift] = StringToDouble(formatstring(sActual));
         Print(formatdatetime(sDatetime));
         Print("iBarShift = ", barshift, " Datetime = ", formatstring(sDatetime), " sActual = ", sActual, " sConsensus = ", sConsensus, " sPrevious = ", sPrevious);
        }
    
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//---
   
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction& trans,
                        const MqlTradeRequest& request,
                        const MqlTradeResult& result)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---
   
  }
//+------------------------------------------------------------------+
//--- Функции форматирования
string formatstring(string strparam)
   {
      string result = StringSubstr(strparam,1, StringLen(strparam) - 2);
      return(result);
   }
string formatdatetime(string strparam)
   {
      string result = StringSubstr(strparam, 1, 4) + "." + StringSubstr(strparam, 5, 2) + "." + StringSubstr(strparam, 7, 11);
      
      return(result);
   }
 
Al_key:

在这里。

你如何为动态缓冲区分配内存?

我想一旦我发现了,这个问题就会消失。

这里是所有的代码

诗。

我在那里读到了关于阵列调整的内容......这里有一个副本

"在链接后,动态数组 缓冲区[]将像普通数组那样被索引,即使要链接的数组被预先设定为像时间序列 那样被索引。如果你想改变对指标数组元素的访问顺序,你应该在使用SetIndexBuffer()函数绑定数组后应用ArraySetAsSeries() 函数。人们应该记住,被SetIndexBuffer()函数指定为指标缓冲区的动态数组不应该被调整大小。 对于指示器缓冲区,所有调整大小的操作都由终端的执行子系统执行"。

我很迷惑。

 
Silent:
将配置的配置文件保存为默认值 文件 - 配置文件 - 默认值
算是默认吧,还是没有数据可以加载。在几个小时内第一次全部倒下了。
 
Al_key:

在这里。

你如何为动态缓冲区分配内存?

我想一旦我发现了,这个问题就会消失。

以下是整个代码

INDICATOR_DATA是要绘制的数据。这个缓冲区(大小)是由终端监控的(按我的理解,是由rate_total监控的)。

增加中间计算的缓冲区(INDICATOR_CALCULATIONS)。为他们设定尺寸。

PS 我有#include <TimeSeries.mqh>由于某种原因不能打开,不能编译。

上星期一必须等待,这里有问题。

 
Silent:

INDICATOR_DATA是要绘制的数据。这个缓冲区(大小)是由终端监控的(据我所知,是由rate_total监控的)。

增加中间计算的缓冲区(INDICATOR_CALCULATIONS)。为他们设定尺寸。

PS 我有#include <TimeSeries.mqh>由于某种原因不能打开,不能编译。

上星期一必须等待,这里有问题。

已经试着改变了,还是同样的错误。我将尝试至少把数值放在一个普通的数组中,也许有些东西会成功。
 
Al_key:
我试着改了一下,还是得到同样的错误。我至少会试着把数值放到一个普通的数组中,也许会有办法。

这里有一个简单的方法,很有效。在INDICATOR_DATA中,我们从INDICATOR_CALCULATIONS写起。

#property indicator_separate_window
#property indicator_buffers 2
#property indicator_plots   1
//--- plot Label1
#property  indicator_label1  "Label1"
#property  indicator_type1   DRAW_LINE
#property  indicator_color1  clrOrangeRed
#property  indicator_style1  STYLE_SOLID
#property  indicator_width1  1
//--- input parameters
input string   s="EURUSD";
input ENUM_TIMEFRAMES      tf;          // D1
input int      countBars=100;          // count
//--- put parameters
int   copied,i;
//--- indicator buffers
double         Label1Buffer[];
//--- buffers
double         p_Symbol[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   SetIndexBuffer(0,Label1Buffer,INDICATOR_DATA);
   SetIndexBuffer(1,p_Symbol,INDICATOR_CALCULATIONS);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
//---
   if(prev_calculated==0)
     {
      ArrayInitialize(Label1Buffer,EMPTY_VALUE);
      ArrayInitialize(p_Symbol,EMPTY_VALUE);
      ArraySetAsSeries(Label1Buffer,true);
      ArraySetAsSeries(p_Symbol,true);
      ArraySetAsSeries(price,true);
     };
   ArrayCopy(p_Symbol,price,0,0,countBars);
   if(_LastError!=0) {Print(_LastError); return(prev_calculated);};
   if(_LastError==0)
     {
      for(i=countBars;i>0;i--)
        {
         Label1Buffer[i]=p_Symbol[i];
         Print("limitBars i = "+IntegerToString(i));
        };
     };
//--- return value of prev_calculated for next call
   return(rates_total);
  }
 
Silent:

INDICATOR_DATA是要绘制的数据。这个缓冲区(大小)是由终端监控的(据我所知,是由rate_total监控的)。

增加中间计算的缓冲区(INDICATOR_CALCULATIONS)。为他们设定尺寸。

PS 我有#include <TimeSeries.mqh>由于某种原因不能打开,不能编译。

上星期一必须等待,这里有些不对劲。

在此采取 :https://www.mql5.com/ru/code/1008

我刚刚发现,这就是为什么我还没有摸到代码。 而且还不能用--这里的公众正驱使我去购物。

我认为,如果把问题代码从OnInit()移到OnCalculate(),一切都会正常。 很久以来,我就知道Five的特点--OnInit中的任何代码都不能正常工作。 很可能通过SetIndexBuffer() 注册的缓冲区的真正自动分配只有在退出OnInit()后才能保证结束,因为它必须在后台发生(它是自动的,对吗?)

TimeSeries - Библиотека функций для работы с таймсериями
TimeSeries - Библиотека функций для работы с таймсериями
  • 投票: 12
  • 2012.08.24
  • Andrey Khatimlianskii
  • www.mql5.com
Библиотека функций для работы с таймсериями: iBars, iTime, iOpen, iHigh, iLow, iClose, iVolume, iHighest, iLowest, iBarshift. Для всех функций доступен краткий вариант вызова (с символом и периодом текущего графика).
 

我注意到,从云端接收任务时,8个代理中只有3个可以同时运行。
尽管如果你并行地运行你的测试,其他代理也会被启用。

这是它应该有的样子吗?