错误、漏洞、问题 - 页 2930

 

将指标从mt4翻译成mt5

问题出在DRAW_HISTOGRAM 尺寸上

当我设置 "1 "或 "2 "时,尺寸会改变,但 "3 "或 "4"=尺寸仍为 "2"。


为什么在MT4中一切正常,而在MT5中却出现了这样的问题?

#property indicator_separate_window
#property indicator_plots   4
#property indicator_buffers 4
#property indicator_color1 clrDodgerBlue
#property indicator_color2 clrDodgerBlue
#property indicator_color3 clrLimeGreen
#property indicator_color4 clrFireBrick
#property indicator_width1 3
#property indicator_width2 3
#property indicator_width3 3
#property indicator_width4 3

结果在mt4


在mt5中的结果,只显示 "2 "的厚度,尽管我在设置中是 "3 "的。



OnInit()中设置属性也没有帮助

PlotIndexSetInteger(0,PLOT_LINE_WIDTH, 3)。

 

调试期间出现严重错误

struct sA
  {
   int               i;
   string            s;
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class cA
  {
public:
   sA                my_array[];
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnStart()
  {
   cA *ca;
   ca=new cA();
   ArrayResize(ca.my_array,1);
   ZeroMemory(ca.my_array);
   ArrayPrint(ca.my_array);
  }

结果。

2020.12.27 17:04:26.966 1 (EURUSD,M1)   Access violation at 0x000001FE5AF10199 read to 0xFFFFFFFFFFFFFFFF in 'D:\Alpari MT5\MQL5\Scripts\Test\1.ex5'
2020.12.27 17:04:26.967 1 (EURUSD,M1)      crash -->  000001FE5AF10199 8B4318            mov        eax, [rbx+0x18]
2020.12.27 17:04:26.967 1 (EURUSD,M1)                 000001FE5AF1019C 4089442420        mov        [rsp+0x20], eax
2020.12.27 17:04:26.967 1 (EURUSD,M1)                 000001FE5AF101A1 41B910000000      mov        r9d, 0x10
2020.12.27 17:04:26.967 1 (EURUSD,M1)                 000001FE5AF101A7 49B8B807F15AFE01  mov        r8, 0x1fe5af107b8
2020.12.27 17:04:26.967 1 (EURUSD,M1)                                  0000
2020.12.27 17:04:26.967 1 (EURUSD,M1)                 000001FE5AF101B1 488D17            lea        rdx, [rdi]
2020.12.27 17:04:26.967 1 (EURUSD,M1)                 000001FE5AF101B4 48B998D45F5FFE01  mov        rcx, 0x1fe5f5fd498
2020.12.27 17:04:26.967 1 (EURUSD,M1)                                  0000
2020.12.27 17:04:26.967 1 (EURUSD,M1)                 000001FE5AF101BE 49FF96A8120000    call       qword near [r14+0x12a8]  ; #11378 (terminal64.exe)
2020.12.27 17:04:26.967 1 (EURUSD,M1)   
2020.12.27 17:04:26.967 1 (EURUSD,M1)   00: 0x000001FE5AF10199
2020.12.27 17:04:26.967 1 (EURUSD,M1)   01: 0x000001FE633F0010
2020.12.27 17:04:26.967 1 (EURUSD,M1)   
目前最新的测试版本
Документация по MQL5: Программы MQL5 / Ошибки выполнения
Документация по MQL5: Программы MQL5 / Ошибки выполнения
  • www.mql5.com
Ошибки выполнения - Программы MQL5 - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
有没有人想出一个办法,让指标句柄在主窗口或子窗口中显示一个属性?我说的是任意的第三方指标,这些指标是用IndicatorCreate创建的,然后可以根据用户的要求用ChartIndicatorAdd添加 到图表中。
 
Stanislav Korotky:
有没有人想出一个办法,让指标手柄在主窗口或子窗口中显示属性?我说的是使用IndicatorCreate创建的自定义指标,然后可以使用ChartIndicatorAdd将它们添加到图表中。

你也许可以把指标塞进OBJ_CHART,看看它的位置。

 
Stanislav Korotky:
有没有人想出一个办法,从主窗口或子窗口的指标句柄中获取显示属性?我说的是使用IndicatorCreate创建的自定义指标,然后它们可以根据用户的要求通过ChartIndicatorAdd添加到图表中。

做了类似的事情。
这是我找到的一个。不记得它是否有效。请看一下。

bool FindIndicatorByHandle(long handle, string &symbol, ENUM_TIMEFRAMES &timeframe, long &ChartId, int &sub_win, string &Name) {
   long chart_id =ChartFirst();
   while (chart_id!=-1) {
      int total_sub = (int)ChartGetInteger(chart_id,CHART_WINDOWS_TOTAL);
      int total_ind; 
      for(int i=0; i<total_sub; i++) {
         total_ind = ChartIndicatorsTotal(chart_id,i);
         for (int j=0; j<total_ind; j++) {
            string name = ChartIndicatorName(chart_id,i,j);
            if (ChartIndicatorGet(chart_id,i,name)== handle) {
               ChartId=chart_id;
               symbol= ChartSymbol(chart_id);
               timeframe=ChartPeriod(chart_id);
               sub_win=i;
               Name=name;
               return true;
            }
         }
      }
      chart_id=ChartNext(chart_id);
   }
   return false;
}
该代码通过一个指标的手柄搜索所有打开的图表。返回符号、时间框架、图表ID、子窗口和指标名称。
 
fxsaber:

我想你可以把指标放在OBJ_CHART 中,看看它的位置。

我会试一试的,现在我不得不做一个选项,由用户指定。

 
Nikolai Semko:

做了类似的事情。
这是我找到的一个。不记得它是否有效。请看一下。

从代码上看,它通过手柄搜索所有打开的图表,寻找一个指标。返回符号、时间框架、图表ID、子窗口和指标名称。

这不符合你的问题:由IndicatorCreate创建的指标并不放在任何窗口中--它们 "坐在 "里面,而任务是将这样的指标通过其手柄放在窗口中。现在,MQL5允许你使用ChartIndicatorAdd函数 向主窗口或子窗口添加一个任意的句柄,而不考虑指标的 "属性"(没有错误!),当添加时没有按照预期进行,结果看起来非常奇怪。

 

指标方面有一个更大的问题。

他们中的一些人根据简化版本实现了OnCalculate处理程序,有一个输入数组,你可以为他们的计算选择价格类型。你如何从第三方MQL5程序中知道该指标期待这种价格类型,在创建指标时必须在所有参数之后传递?看来没有办法了。而如果你不这样做,指标是由#属性 indicator_applied_price 绘制的,不能从外部访问。这里有一个简单的专家顾问,以编程方式将指标/AMA添加到图表中。

int OnInit()
{
  const int h = iCustom(NULL, 0, "Examples/AMA");
  if(h == INVALID_HANDLE)
  {
    Print("iCustom failed: ", _LastError);
    return INIT_FAILED;
  }

  if(!ChartIndicatorAdd(0, 0, h))
  {
    Print("ChartIndicatorAdd failed: ", _LastError);
    return INIT_FAILED;
  }
  ChartRedraw();
  
  return INIT_SUCCEEDED;
}

如果之后我们切换图表时间框架,我们将得到2个指标AMA:一个是收盘价(程序化创建的),一个是开盘价(由于时间框架变化和#属性 indicator_applied_price PRICE_OPEN而产生的;不清楚为什么这个属性也没有被iCustom捕捉到)。

 

为了继续指标的主题,我附上了我用来发现和避免MqlParam参数问题的专家顾问。

专家顾问的任务是将指标 "Examples/Price_Channel "添加到图表中,如果它还没有,则使用相同的参数。

要做到这一点,我们使用iCustom/IndicatorCreate创建一个实例,通过IndicatorParameters获得其参数数组,然后在循环中对图表中已经存在的指标调用IndicatorParameters:如果没有匹配的数组参数,该指标将被添加到图表中,如果有匹配的,新句柄将被简单销毁。

问题是,参数相等并不总是像预期的那样工作。特别是,有这样一个故障安全测试案例。我们把专家顾问放在任何一个空图表上,然后点击 - 它创建了指标的第一个实例。然后我们切换到任何其他图表时间框架(旧的指标仍然存在)并再次点击。奇怪的是,该指标的第二个实例被创建。

从执行和日志的分析中可以看出,这是由于参数中指标名称的字符串错误地均衡化造成的。那里的字符串有260个字符,但终端0的位置更早。在它之后,要么是一些服务信息,要么是垃圾。因此,字符串比较"=="或StringCompare考虑到了这些 "垃圾",我们得到了字符串的不平等。

如果我们把字符串转换成char数组,数组就会得到完全的匹配。如果你转换为短数组,你会得到垃圾。总而言之,一些不一致的行为在文档中没有描述。

Window N: 1
   0, Price Channel(22), 12
    [type] [integer_value] [double_value]                                                                                                                                                                                                                                                         [string_value]
[0]     14               0          0.000 "Indicators\Examples/Price_Channel"                                                                                                                                                                                                                                   
[1]      7              22          0.000 null                                                                                                                                                                                                                                                                  
ind1: 'Indicators\Examples/Price_Channel
ind2: 'Indicators\Examples/Price_Channel
260 0 / 260 0
Char arrays 34 34
 73 110 100 105  99  97 116 111 114 115  92  69 120  97 109 112 108 101 115  47  80 114 105  99 101  95  67 104  97 110 110 101 108   0
 73 110 100 105  99  97 116 111 114 115  92  69 120  97 109 112 108 101 115  47  80 114 105  99 101  95  67 104  97 110 110 101 108   0
Short arrays 260 260
[  0]    73   110   100   105    99    97   116   111   114   115    92    69   120    97   109   112   108   101   115    47    80   114   105    99
[ 24]   101    95    67   104    97   110   110   101   108     0   103   110    97   108     0     0     0     0     0     0     0     0     0     0
[ 48]     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
[ 72]     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
[ 96]     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
[120]     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
[144]     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
[168]     0     0     0     0     0     0     0     0     0     0     0     0    13  3328 58074    86 13696    54     0     0 35120  3210     0     0
[192]     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
[216]     0     0     0     0 61841 38184 17648 16370     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
[240]     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
[  0]    73   110   100   105    99    97   116   111   114   115    92    69   120    97   109   112   108   101   115    47    80   114   105    99
[ 24]   101    95    67   104    97   110   110   101   108     0   103   110    97   108     0    32    32    77    32    65    32    82    32    75
[ 48]    32    83     0    32    99   111   109   109    97    32   115   101   112    97   114    97   116   101   100    32   108   105   115   116
[ 72]    41     0    32   112   114   111   116   111   116   121   112   101   115    41     0     0   115     0     0     0     0     0     0     0
[ 96]   528     0     0     0     0    45     0     0     3     0     0     0   512     0     0     0  1160    45     0     0  7256 30655     0     0
[120]     0     0     0     0   512     0     0     0     0 65535  2272     0 29648    45     0     0     0     0     0     0     0     0     0     0
[144]     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
[168]     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
[192]     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0     0
[216]     3     0     0     0 26341 16284     1     0  1308    16     0     0 49814 30635     0     0     0     0     0     0 32016    37     0     0
[240]     2     0     0     0 50336 16481     1     0     2     0     0     0     3     0     0     0 45520    37     0     0
1 0

我不确定这个错误到底是什么,是在MQL中的字符串处理原理还是其他方面。

如果有人知道其中的细微差别,请给我一个提示。

附加的文件:
 
Stanislav Korotky:

如果有人知道其中的细微差别,请给我一个提示。

这种功能,即使你知道,你也要在脑子里把整层的内容重新提出来。

这里 做了自我可用性的定义。在切换TF的时候,它似乎是有效的。

Init_Sync
Init_Sync
  • www.mql5.com
Библиотека делает синхронизированными Init/Deinit индикаторов