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

 

你能告诉我为什么我得到的是错误的吗?

2019.02.17 06:13:28.974 Test_4G_CB (Si Splice,H1)       1 Тут ошибка 4202 Графический объект не найден
2019.02.17 06:13:28.983 Test_4G_CB (Si Splice,H1)       2 Тут ошибка 4202 Графический объект не найден

在这个代码中

      if(ObjectFind(chart,name)<0)
        {
         Print("1 Тут ошибка ",GetLastError()," ",cLng::CodeDescription(GetLastError()));
         ResetLastError();
         graphic.Create(chart,name,0,0,0,pix_X,pix_Y);//Создает графический ресурс, привязанный к объекту чарта 
         Print("2 Тут ошибка ",GetLastError()," ",cLng::CodeDescription(GetLastError()));
         ResetLastError();
        }

如果第一个错误还是可以理解的--没有找到一个对象,但在没有错误的情况下寻找一个缺失的对象的实现并不清楚,第二个错误也不清楚,而对象显然是创建的--图表是形成的,错误的原因也不清楚。

如何摆脱错误?

 
Aleksey Vyazmikin:

你能告诉我为什么我得到的是错误的吗?

在这个代码中

如果第一个错误还是可以理解的--没有找到一个对象,但在没有错误的情况下寻找一个缺失的对象的实现并不清楚,第二个错误也不清楚,而对象显然是创建的--图表是形成的,错误的原因也不清楚。

如何摆脱这个错误?

ResetLastError()需要在调用函数之前完成。这里是什么地方。

graphic.Create()

是不清楚的。如果这是CCanvas,那么Create()方法会 创建一个图形资源,而不需要 引用图表对象。 而它返回的是真或假

创建

创建一个图形资源,不与图表对象绑定。

virtual bool  Create(
   const string       name,                                 // имя
   const int          width,                                // ширина
   const int          height,                               // высота
   ENUM_COLOR_FORMAT  clrfmt=COLOR_FORMAT_XRGB_NOALPHA      // формат
   );

参数

名称

[in] 图形资源名称的基础。资源名称是在创建过程中通过添加一个伪随机字符串形成的。

宽度

宽度 [in] 宽度(X尺寸),像素。

高度

[in] 高度(Y轴大小),像素。

clrfmt=COLOR_FORMAT_XRGB_NOALPHA

[in] 颜色处理方法。关于颜色处理方法的更多细节,请参见ResourceCreate()函数描述。

返回值为

true - 如果成功,否则为false


一般来说,从你所展示的内容中很难理解。

但你可以这样试一试。

//+------------------------------------------------------------------+
ResetLastError();
if(ObjectFind(chart,name)<0)
  {
   Print("1 Тут ошибка потому, что объекта нет ещё",GetLastError()," ",cLng::CodeDescription(GetLastError()));
   ResetLastError();
   if(!graphic.Create(chart,name,0,0,0,pix_X,pix_Y))
      Print("2 Тут ошибка ",GetLastError()," ",cLng::CodeDescription(GetLastError()));
  }
//+------------------------------------------------------------------+

如果你在那里有CGraphic,你需要进入Create()代码来了解它的返回结果,因为在帮助中没有关于它的文字。

Документация по MQL5: Стандартная библиотека / Научные графики / CGraphic / Create
Документация по MQL5: Стандартная библиотека / Научные графики / CGraphic / Create
  • www.mql5.com
Стандартная библиотека / Научные графики / CGraphic / Create - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Artyom Trishkin:

ResetLastError()必须在调用该函数之前执行。这里有什么。

是不清楚的。如果是CCanvas,Create()方法会 创建一个图形资源,而不 参考图表对象。 而它返回的是真或假

创建

创建一个图形资源,不与图表对象绑定。

参数

名称

[in] 图形资源名称的基础。资源名称是在创建过程中通过添加一个伪随机字符串形成的。

宽度

宽度 [in] 宽度(X尺寸),像素。

高度

[in] 高度(Y轴大小),像素。

clrfmt=COLOR_FORMAT_XRGB_NOALPHA

[in] 颜色处理方法。关于颜色处理方法的更多细节,请参见ResourceCreate()函数描述。

返回值为

true - 如果成功,否则为false


一般来说,从你所展示的内容中很难理解。

但你可以这样试一试。

如果你有CGraphic在那里,你需要进入Create()代码来理解它的返回,因为在帮助中没有一个字提到它。

我已经在上面用错误重置进行了检查,并确定了发生错误的地方。

而且,它从那里的不同函数中发生了两次--在第一个函数之后,错误被清除了,但随后又发生了。

而我的创作变体

创建

创建一个 链接到图表对象图形 资源

bool Create(
const longchart,// chart ID
const stringname,//name
const intsubwin,// 子窗口的数量
const intx1,//coordinate x1
const inty1,//coordinate y1
const intx2,//coordinate x2
const inty2//坐标y1
)

参数

图表

图表的[in]标识符。

名称

[in] 名称。

潜水艇

[子窗口编号。

x1

[坐标 X1.

y1

[in] 坐标Y1。

x2

[in] 坐标X2。

y2

[in] 坐标Y2。

 
Aleksey Vyazmikin:

我已经用错误重置检查了 上述内容,并确定了错误发生的位置

在访问对象搜索功能之前,你没有重置 错误。

 
Artyom Trishkin:

在访问对象搜索功能之前,你没有重置 错误。

是的,在代码引用中我不重置,因为我已经检查了上面的代码--那里没有错误,所以我擦掉了类似的检查线,如下图所示。

 
你好,我的警报函数 从文件中读取一个字符串,并以中文或日文的形式输出,请问我该如何解决这个问题?
 
Artyom Trishkin:

在调用对象搜索函数之前,你没有重置 错误。

我再次决定重复实验,以下是代码

      //--- отключим показ ценового графика
      ChartSetInteger(0,CHART_SHOW,false);
      long chart=ChartID();

      CGraphic graphic;
         Print("0 Тут ошибка ",GetLastError()," ",cLng::CodeDescription(GetLastError()));
         ResetLastError();
      if(ObjectFind(chart,name)<0)
        {
         Print("1 Тут ошибка ",GetLastError()," ",cLng::CodeDescription(GetLastError()));
         ResetLastError();
         graphic.Create(chart,name,0,0,0,pix_X,pix_Y);//Создает графический ресурс, привязанный к объекту чарта 
         Print("2 Тут ошибка ",GetLastError()," ",cLng::CodeDescription(GetLastError()));
         ResetLastError();
        }

下面是结果。

2019.02.17 08:55:19.845 Test_4G_CB (Si Splice,H1)       0 Тут ошибка 0 Операция выполнена успешно
2019.02.17 08:55:19.860 Test_4G_CB (Si Splice,H1)       1 Тут ошибка 4202 Графический объект не найден
2019.02.17 08:55:19.860 Test_4G_CB (Si Splice,H1)       2 Тут ошибка 4202 Графический объект не найден
知道是什么原因导致了这个错误吗?
 
Denis Nikolaev:
你好,我的警报函数 从文件中读取一个字符串,并以中文或日文的形式输出,请问我该如何解决这个问题?

在Windows中配置字体。为 "不支持Unicode的程序的语言 "设置俄语。

"区域标准" - "高级"。

 
Vladimir Karputov:

在Windows中配置字体。为 "不支持Unicode的程序的语言 "设置俄语。

"区域标准--高级。

这并不奏效。

我得到一个从文件中读出的行的自动翻译成日文或中文,为什么会发生这种情况?

 
Aleksey Vyazmikin:

我再次决定重复实验,以下是代码

下面是结果

知道是什么原因导致了这个错误吗?

好吧,既然你重置了最后一个错误,那就在CGraphic的荒野中寻找这个错误代码的出现。