错误、漏洞、问题 - 页 2016

 
fxsaber:

整个CopyBuffer是INF的。

通过滑动计数算法,在开始时只要有两个DBL_MAX 价格就足以使整个缓冲区变成INF

dbl_max + dbl_max = inf

然后INF将不会离开计算

你应该改变所有指标的代码,忽略EMPTY_VALUE
 
A100:

通过滑动计数算法,在开始时只需要两个DBL_MAX 价格就可以使整个缓冲区变成INF

dbl_max + dbl_max = inf

然后INF就不会再从计算中逃脱了

这种变体是很有可能的,因为是DBL_MAX充满了低于MAA期的数值。那么,在循环算法平均值中存在一个错误 - MODE_SMA。

它是这样的!我做了一些改变,它就成功了!

// Вычисляем Машку от Машки через хэндл самого себя
#property indicator_separate_window 
#property indicator_buffers 1 
#property indicator_plots   1 

#property  indicator_type1   DRAW_LINE 
#property  indicator_color1  clrRed 
#property  indicator_style1  STYLE_SOLID 
#property  indicator_width1  1 

input bool CustomData = false; // true - кастомный режим для iCustom
input int MAPeriod = 1 e1;      // Период МАшки

string GetMyName( void )
{
  const int Length = StringLen(TerminalInfoString(TERMINAL_DATA_PATH) + "\\MQL5\\Indicators\\");
  const string Path = MQLInfoString(MQL_PROGRAM_PATH);
  
  return(StringSubstr(Path, Length, StringLen(Path) - Length - 4));
}

double Buffer[];
const bool Init = SetIndexBuffer(0, Buffer, INDICATOR_DATA);

const int handleMA = CustomData ? iMA(NULL, PERIOD_CURRENT, 100, 0, MODE_SMA, PRICE_OPEN) // от этой МАшки будет брать другую Машку, но не напрямую, а кастомно
                                : iMA(NULL, PERIOD_CURRENT, MAPeriod, 0, MODE_SMA, iCustom(_Symbol, PERIOD_CURRENT, GetMyName(), true));

int Replace( double &Array[], const double NewValue = 1 e3, const double PrevValue = EMPTY_VALUE )
{
  for (int i = ArraySize(Array) - 1; i >= 0; i--)
    if (Array[i] == PrevValue)
      Array[i] = NewValue;
      
  return(0);
}

int OnCalculate( const int rates_total,      // размер входных таймсерий 
                 const int prev_calculated,  // обработано баров на предыдущем вызове
                 const datetime& time[],     // Time 
                 const double& open[],       // Open 
                 const double& high[],       // High 
                 const double& low[],        // Low 
                 const double& close[],      // Close 
                 const long& tick_volume[],  // Tick Volume 
                 const long& volume[],       // Real Volume 
                 const int& spread[] )       // Spread 
{
  return(prev_calculated + CopyBuffer(handleMA, 0, prev_calculated, rates_total - prev_calculated, Buffer) + Replace(Buffer));
}

可以肯定的是,iMA的循环算法并没有考虑到DBL_MAX被输入的情况。错误。


@A100, 谢谢!

 

MetaEditor在试图编译一个附件文件时挂掉了

如果它没有马上挂起,请等待一会儿,或者到摘要行看看编译时间

附加的文件:
Test0.mq5  1 kb
 

为什么不在用鼠标悬停时在弹出的窗口中显示订单/交易号?一千年前就要求它,它是如此的缺乏!

 
fxsaber:


return(prev_calculated + CopyBuffer(handleMA, 0, prev_calculated, rates_total - prev_calculated, Buffer) + Replace(Buffer));

应该避免这样的结构。操作数的执行顺序在C++中没有规定,所以要由各个编译器来决定。例外的情况是&&和||运算符,其中的操作数总是从左到右执行。

 
Alexey Navoykov:

应该避免这样的结构。操作数的执行顺序在C++中没有规定,所以要由各个编译器来决定。例外情况是&&和||,其中操作数总是从左到右执行。

嗯,我们在MQL!

 
fxsaber:

嗯,我们在MQL!

文档中没有任何地方说到任何特定的顺序。所以他们可以在任何时候按照他们认为合适的方式进行修改。

我已经与服务台联系过一次,以澄清这个问题。

 

你好。请告诉我可以用哪些函数来获得图表上显示的指标列表 及其参数?我只找到了一个返回图表上指标数量的函数

Списки наложенных объектов - Дополнительные возможности - Графики котировок, технический и фундаментальный анализ - Справка по MetaTrader 5
Списки наложенных объектов - Дополнительные возможности - Графики котировок, технический и фундаментальный анализ - Справка по MetaTrader 5
  • www.metatrader5.com
У каждого графика можно посмотреть списки наложенных объектов: индикаторов, аналитических объектов и советников. Там же можно можно редактировать их свойства и удалять их с графика. Список индикаторов Индикаторы сгруппированы на наложенные на основное окно графика и на те, что открыты в отдельных окнах. Выберите индикатор и нажмите "Свойства...
 
Aleksandr Teleguz:

你好。请告诉我可以用哪些函数来获得图表上显示的指标列表 及其参数?我只找到了返回图表中指标数量的函数

指标参数 (+指标释放)

Документация по MQL5: Доступ к таймсериям и индикаторам / IndicatorParameters
Документация по MQL5: Доступ к таймсериям и индикаторам / IndicatorParameters
  • www.mql5.com
//| Script program start function                                    |                          +                                    p,                                                                        parameters[p].integer_value,                                    parameters[p].double_value...
 
Alexey Navoykov:

文档中没有任何地方 说到任何特定的顺序。所以他们可以在任何时候按照他们认为合适的方式进行修改。

我懒得管这些。有很多东西都没有在那里描述。

从我的头顶上看

  • 在MT4/5中按时间排序交易历史记录。
  • 通过函数初始化全局/静态变量 的可能性--最近才出现。
  • 在一行中设置预处理程序指令--不过很快就会被关闭。
  • 从左到右执行操作数。
  • OrderSend与交易环境有99%的同步性。
  • ChartApplyTemplate是异步的。
  • 还有很多其他没有记录的微妙之处。还有一些情况是,文件与现实不相符。而且这不是一个错误,而是一个根本没有被提及的罕见的错误。

这个先例是铸造的拒绝,但那里有一个原因。

因此,仅仅因为没有描述而不使用某些东西是一个有问题的决定。


我认为这样的代码不会引起程序员的疑虑。

int Replace( double &Array[], int );

return(prev_calculated + Replace(Buffer, CopyBuffer(handleMA, 0, prev_calculated, rates_total - prev_calculated, Buffer)));

然而,这不是很好。写MyCopyBuffer是有意义的,但在简短的代码中显示你需要它来避免一个bug是很难看的。所以使用无文件记录的操作数执行优先级正好说明这是一个临时的解决方案。