MT5更新新版本后EA中文显示乱码的解决方法
2025-12-18
热度:15 ℃
MT5最近更新版本之后,所有的中文都会显示成乱码或方框,或者干脆不显示。

像上面这个按钮,就不显示,我把代码放在下面,按钮上应该显示出“中文”两个字。
//+------------------------------------------------------------------+
//| button.mq5 |
//| Copyright 2022, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property version "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
ObjectsDeleteAll(0,0,OBJ_BUTTON);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
button(0,"abc",0,15,15,100,22,CORNER_LEFT_UPPER,"中文","微软雅黑",9,clrWhite,clrDeepPink,clrSilver,false,false,false,true,0);
}
//+------------------------------------------------------------------+
bool button(const long chart_ID=0,// 图表 ID
const string name="Button", // 按钮名称
const int sub_window=0, // 子窗口指数
const long x=0, // X 坐标
const long y=0, // Y 坐标
const int width=50, // 按钮宽度
const int height=18, // 按钮高度
const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // 图表定位角
const string text="Button", // 文本
const string font="Arial",// 字体
const int font_size=10, // 字体大小
const color clr=clrBlack, // 文本颜色
const color back_clr=C'236,233,216', // 背景色
const color border_clr=clrNONE, // 边界颜色
const bool state=false, // 出版/发布
const bool back=false, // 在背景中
const bool selection=false, // 突出移动
const bool hidden=true, // 隐藏在对象列表
const long z_order=0) // 鼠标单击优先
{
//--- 重置错误的值
ResetLastError();
//--- 创建按钮
if(ObjectFind(chart_ID,name)<0)
{
if(!ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0))
{
Print(__FUNCTION__,
": failed to create the button! Error code = ",GetLastError());
return(false);
}
ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr);
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,1);
}
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
return(true);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+上面这一段是最简单的按钮的代码,按钮上没有显示出“中文”两个字。
下面是可以显示出“中文”的代码。
//+------------------------------------------------------------------+
//| button.mq5 |
//| Copyright 2022, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link "https://www.mql5.com"
#property version "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---
//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---
ObjectsDeleteAll(0,0,OBJ_BUTTON);
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
button(0,"abc",0,15,15,100,22,CORNER_LEFT_UPPER,"中文","Microsoft YaHei",9,clrWhite,clrDeepPink,clrSilver,false,false,false,true,0);
}
//+------------------------------------------------------------------+
bool button(const long chart_ID=0,// 图表 ID
const string name="Button", // 按钮名称
const int sub_window=0, // 子窗口指数
const long x=0, // X 坐标
const long y=0, // Y 坐标
const int width=50, // 按钮宽度
const int height=18, // 按钮高度
const ENUM_BASE_CORNER corner=CORNER_LEFT_UPPER, // 图表定位角
const string text="Button", // 文本
const string font="Arial",// 字体
const int font_size=10, // 字体大小
const color clr=clrBlack, // 文本颜色
const color back_clr=C'236,233,216', // 背景色
const color border_clr=clrNONE, // 边界颜色
const bool state=false, // 出版/发布
const bool back=false, // 在背景中
const bool selection=false, // 突出移动
const bool hidden=true, // 隐藏在对象列表
const long z_order=0) // 鼠标单击优先
{
//--- 重置错误的值
ResetLastError();
//--- 创建按钮
if(ObjectFind(chart_ID,name)<0)
{
if(!ObjectCreate(chart_ID,name,OBJ_BUTTON,sub_window,0,0))
{
Print(__FUNCTION__,
": failed to create the button! Error code = ",GetLastError());
return(false);
}
ObjectSetInteger(chart_ID,name,OBJPROP_XSIZE,width);
ObjectSetInteger(chart_ID,name,OBJPROP_YSIZE,height);
ObjectSetInteger(chart_ID,name,OBJPROP_CORNER,corner);
ObjectSetString(chart_ID,name,OBJPROP_FONT,font);
ObjectSetInteger(chart_ID,name,OBJPROP_FONTSIZE,font_size);
ObjectSetInteger(chart_ID,name,OBJPROP_COLOR,clr);
ObjectSetInteger(chart_ID,name,OBJPROP_BORDER_COLOR,border_clr);
ObjectSetInteger(chart_ID,name,OBJPROP_BACK,back);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTABLE,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_SELECTED,selection);
ObjectSetInteger(chart_ID,name,OBJPROP_HIDDEN,hidden);
ObjectSetInteger(chart_ID,name,OBJPROP_ZORDER,1);
}
ObjectSetInteger(chart_ID,name,OBJPROP_XDISTANCE,x);
ObjectSetInteger(chart_ID,name,OBJPROP_YDISTANCE,y);
ObjectSetString(chart_ID,name,OBJPROP_TEXT,text);
ObjectSetInteger(chart_ID,name,OBJPROP_BGCOLOR,back_clr);
return(true);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+非常简单,唯一要修改的地方就是字体,字体不要用中文的字体,同样的“微软雅黑”字体,替换成英文字体“Microsoft YaHei”。
也就是下面这行代码:
button(0,"abc",0,15,15,100,22,CORNER_LEFT_UPPER,"中文","Microsoft YaHei",9,clrWhite,clrDeepPink,clrSilver,false,false,false,true,0);
同样的,像输入框,lable文本等等有中文的地方,在字体这部分都要改成英文的字体名称。

这时就能显示出中文了,是不是超简单。
发表评论
相关文章
MT5CTP程序化交易开发视频教学
近期正在录制基于MT5的EA程序化交易开发编程教学,这个教学会持续更新,有任何建议或需要帮助,都可以到论坛的这个版块交流:https://www.eab...







eabang_com
蜀ICP备17026493号
川公网安备 51019002005489号