bool CalendarValueHistoryByEvent(
ulong event_id, // event ID
MqlCalendarValue& values[], // array of valuesdatetime datetime_from, // period beginning datedatetime datetime_to= 0 // period end date
);
bool CalendarValueHistory(
ulong event_id, // event IDulong & change_id, // last calendar change ID
MqlCalendarValue& values[], // array of valuesstring country_code=NULL, // country codestring currency=NULL // currency
);
新结构
MqlCalendarCountry — 国家描述。
struct MqlCalendarCountry
{
ulong id; // country ID in ISO 3166-1string name; // text name of the countrystring code; // code name of the country in ISO 3166-1 alpha-2string currency; // country currency codestring currency_symbol; // country currency symbol/signstring url_name; // country name used in URL on mql5.com
};
MqlCalendarEvent — 事件描述。
struct MqlCalendarEvent
{
ulong id; // event ID
ENUM_CALENDAR_EVENT_TYPE type; // event type
ENUM_CALENDAR_EVENT_SECTOR sector; // sector to which the event belongs
ENUM_CALENDAR_EVENT_FREQUENCY frequency; // event release frequency
ENUM_CALENDAR_EVENT_TIMEMODE time_mode; // event release time modeulong country_id; // country ID
ENUM_CALENDAR_EVENT_UNIT unit; // unit for the event values
ENUM_CALENDAR_EVENT_IMPORTANCE importance; // event importance
ENUM_CALENDAR_EVENT_MULTIPLIER multiplier; // event importance multiplieruint digits; // number of decimal places in the event valuestring source_url; // source URLstring event_code; // event codestring name; // text name of the event in the terminal language
};
MqlCalendarValue — 事件值描述。
struct MqlCalendarValue
{
ulong id; // value IDulong event_id; // event IDdatetime time; // event date and timedatetime period; // period, for which the event is publishedint revision; // published indicator revision in relation to the reported periodlong actual_value; // current event valuelong prev_value; // previous event valuelong revised_prev_value; // revised previous event valuelong forecast_value; // forecast event value
ENUM_CALENDAR_EVENT_IMPACRT impact_type; // potential impact on the currency rate
};
新枚举
enum ENUM_CALENDAR_EVENT_FREQUENCY
{
CALENDAR_FREQUENCY_NONE = 0 , // not used
CALENDAR_FREQUENCY_WEEK = 1 , // weekly
CALENDAR_FREQUENCY_MONTH = 2 , // monthly
CALENDAR_FREQUENCY_QUARTER = 3 , // quarterly
CALENDAR_FREQUENCY_YEAR = 4 , // yearly
CALENDAR_FREQUENCY_DAY = 5 , // daily
};
enum ENUM_CALENDAR_EVENT_TYPE
{
CALENDAR_TYPE_EVENT = 0 , // event (meeting, speech, etc.)
CALENDAR_TYPE_INDICATOR = 1 , // indicator
CALENDAR_TYPE_HOLIDAY = 2 , // holiday
};
enum ENUM_CALENDAR_EVENT_SECTOR
{
CALENDAR_SECTOR_NONE = 0 , // no
CALENDAR_SECTOR_MARKET = 1 , // market
CALENDAR_SECTOR_GDP = 2 , // GDP
CALENDAR_SECTOR_JOBS = 3 , // jobs
CALENDAR_SECTOR_PRICES = 4 , // prices
CALENDAR_SECTOR_MONEY = 5 , // money
CALENDAR_SECTOR_TRADE = 6 , // trade
CALENDAR_SECTOR_GOVERNMENT = 7 , // government
CALENDAR_SECTOR_BUSINESS = 8 , // business
CALENDAR_SECTOR_CONSUMER = 9 , // consumer
CALENDAR_SECTOR_HOUSING = 10 , // housing
CALENDAR_SECTOR_TAXES = 11 , // taxes
CALENDAR_SECTOR_HOLIDAYS = 12 , // holidays
};
enum ENUM_CALENDAR_EVENT_IMPORTANCE
{
CALENDAR_IMPORTANCE_LOW = 0 , // no
CALENDAR_IMPORTANCE_NONE = 1 , // low
CALENDAR_IMPORTANCE_MODERATE = 2 , // moderate
CALENDAR_IMPORTANCE_HIGH = 3 , // high
};
enum ENUM_CALENDAR_EVENT_UNIT
{
CALENDAR_UNIT_NONE = 0 , // no
CALENDAR_UNIT_PERCENT = 1 , // percent
CALENDAR_UNIT_CURRENCY = 2 , // national currency
CALENDAR_UNIT_HOUR = 3 , // number of hours
CALENDAR_UNIT_JOB = 4 , // number of jobs
CALENDAR_UNIT_RIG = 5 , // number of rigs
CALENDAR_UNIT_USD = 6 , // US dollar
CALENDAR_UNIT_PEOPLE = 7 , // number of people
CALENDAR_UNIT_MORTGAGE = 8 , // number of mortgages
CALENDAR_UNIT_VOTE = 9 , // number of votes
CALENDAR_UNIT_BARREL = 10 , // number of barrels
CALENDAR_UNIT_CUBICFEET = 11 , // volume in cubic feet
CALENDAR_UNIT_POSITION = 12 , // number of job positions
CALENDAR_UNIT_BUILDING = 13// number of buildings
};
enum ENUM_CALENDAR_EVENT_MULTIPLIER
{
CALENDAR_MULTIPLIER_NONE = 0 , // no
CALENDAR_MULTIPLIER_THOUSANDS = 1 , // thousands
CALENDAR_MULTIPLIER_MILLIONS = 2 , // millions
CALENDAR_MULTIPLIER_BILLIONS = 3 , // billions
CALENDAR_MULTIPLIER_TRILLIONS = 4 , // trillions
};
enum ENUM_CALENDAR_EVENT_IMPACRT
{
CALENDAR_IMPACT_NA = 0 , // not available
CALENDAR_IMPACT_POSITIVE = 1 , // positive
CALENDAR_IMPACT_NEGATIVE = 2 , // negative
};
enum ENUM_CALENDAR_EVENT_TIMEMODE
{
CALENDAR_TIMEMODE_DATETIME = 0 , // the source publishes the exact time
CALENDAR_TIMEMODE_DATE = 1 , // the event takes the whole day
CALENDAR_TIMEMODE_NOTIME = 2 , // the source does not publish the event time
CALENDAR_TIMEMODE_TENTATIVE = 3 , // the source provides only date, but does not publish the exact time in advance, exact time is added when event occurs
};
新的错误代码
ERR_CALENDAR_MORE_DATA = 5400 , // the array is small for the whole result (values which fit in the array were passed)
ERR_CALENDAR_TIMEOUT = 5401 , // timed out waiting for a response to the calendar data request
ERR_CALENDAR_NO_DATA = 5402 , // data not found
bool ArrayRemove(
void & array[], // array of any typeuint start, // the index to start removaluint count=WHOLE_ARRAY // number of elements
);
ArrayInsert 将源数组中指定数量的元素插入到接收器数组中,从指定的索引开始。
bool ArrayInsert(
void & dst_array[], // receiver arrayconstvoid & src_array[], // source arrayuint dst_start, // index in the receiver array where to insertuint src_start= 0 , // index in the source array to start copyinguint count=WHOLE_ARRAY // number of inserted elements
);
ArrayReverse 反转数组中从指定索引开始的指定数量的元素。
bool ArrayReverse(
void & array[], // array of any typeuint start= 0 , // index to start reversinguint count=WHOLE_ARRAY // number of elements
);
int CustomBookAdd(
conststring symbol, // symbol nameconst MqlBookInfo& books[] // an array with the DOM elements descriptionsuint count=WHOLE_ARRAY // number of elements to be used
);
boolCustomSymbolCreate (
conststring symbol_name, // custom symbol nameconststring symbol_path= "" , // name of the group in which the symbol will be createdconststring symbol_origin=NULL // name of the symbol based on which the custom symbol will be created
);
尊敬的女士们、先生们
我是一个初学者,想遵循剪切和粘贴策略。我如何开始呢。我需要一步一步的方法
请
尊敬的女士们、先生们
我是一个初学者,想遵循剪切和粘贴策略。我如何开始呢。我需要一步一步的方法
请
我从哪里开始?
https://www.mql5.com/en/forum/212020
----------------
关于交易、自动交易系统和测试交易策略的论坛
如何开始使用Metatrader 5
Sergey Golubev, 2013.09.20 08:21
总结:
====
关于交易、自动交易系统和测试交易策略的论坛
关于信号的一些问题
Sergey Golubev, 2016.12.30 20:14
只是关于信号服务的一些信息。
这是关于从哪里开始到的信息。
------------
在mql5.com网站的一些文章中接触到了Kohonen神经网络的主题,如在MetaTrader 5中使用自组织特征图(Kohonen图) 和自组织特征图(Kohonen图)--重新审视这个主题。他们向读者介绍了建立这种类型的神经网络的一般原则,并使用这种地图直观地分析市场的经济数字。
然而,在实际操作中,仅仅将Kohonen网络用于算法交易,却只局限于一种方法,即为EA优化结果构建的拓扑图的视觉分析。在这种情况下,一个人的价值判断,或者说一个人的视觉和从图片中得出合理结论的能力变成了,也许是关键的因素,把关于代表数据的网络属性排挤到螺母和螺栓事项之外。
换句话说,神经网络算法的特点没有得到充分的利用,也就是说,它们在使用时没有自动提取知识或用具体建议支持决策。在本文中,我们以一种更正式的方式考虑定义机器人的最佳参数集的问题。此外,我们将应用Kohonen网络来预测经济范围。然而,在进行这些应用问题之前,我们应该修改现有的源代码,得到一些修正,并进行一些改进。
如果你不熟悉 "网络"、"层"、"神经元"("节点")、"链接"、"权重"、"学习率"、"学习范围 "等术语以及其他与Kohonen网络相关的概念,强烈建议你先阅读上述文章。那么我们就必须在这个问题上达到饱和,所以重新教授基本概念会大大延长本刊物的时间。
交易、自动交易系统和测试交易策略论坛
2005 年构建的新 MetaTrader 5 平台:经济日历、MQL5 应用程序即服务和 R 语言 API
MetaQuotes Software Corp. , 2019.02.20 17:20
MetaTrader 5 平台更新将于 2019 年 2 月 21 日发布。新版本具有以下更改:
- 终端:完全修改了内置经济日历。
- 程序端:添加了新型 MQL5 应用程序 — 服务。这种新类型可以为终端创建自定义价格馈送,即从外部系统实时实施价格交付,就像在经纪人的交易服务器上实施一样。
- 终端:添加了一个学习程序。
- 终端: 交易账户历史可以显示为头寸。该平台收集与头寸相关的交易数据(开仓、交易量增加、部分或全部平仓)并将信息分组到单个记录中。因此,您可以访问头寸详细信息:开仓和平仓时间、交易量、价格和结果。这种高效的演示表格现在可以在导出到文件的历史报告中使用。
- 终端:通过使用R 语言的应用程序添加了 MetaTrader 5 终端数据的新 API 启用请求。
R CMD INSTALL --build MetaTrader
- MT5Initialize 初始化并建立与 MetaTrader 5 终端的连接。如有必要,在命令执行期间启动终端。
- MT5Shutdown 取消初始化并与 MetaTrader 5 断开连接。
- MT5Version 获得 MetaTrader 5 终端版本。
- MT5TerminalInfo 获取终端连接到经纪商服务器的状态和参数(账号和服务器地址)。
- MT5WaitTerminal 等待 MetaTrader 5 终端连接到经纪商的服务器。
- MT5CopyTicksFrom(symbol, from, count, flags) 从指定日期开始复制指定数量的刻度。自 01.01.1970 以来的日期以毫秒为单位指定。
- MT5CopyTicksRange(symbol, from, to, flags) 复制指定周期内的报价。自 1970 年 1 月 1 日起,日期以毫秒为单位指定。
- MT5CopyRatesFrom(symbol, timeframe, from, count) 从指定日期开始复制指定数量的一分钟柱线。日期以 1970 年 1 月 1 日以来的秒数为单位指定。
- MT5CopyRatesFromPos(symbol, timeframe, start_pos, count) 从相对于最后一根柱线的指定位置复制一分钟柱线。
- MT5CopyRatesFromRange(symbol, timeframe, date_from, date_to) 从指定时间段内复制柱线。自 01.01.1970 以来的日期以秒为单位指定。
- 程序端:优化的关闭方式对话框,用于关闭对面的头寸。现在,即使您有大量未平仓头寸,对话也不会变慢。
- 程序端:修复了合成符号计算错误,导致数据偶尔会被跳过。
- 程序端:当自定义交易品种被删除时,存储其报价和柱历史的文件也会被删除。这避免了未使用的数据在硬盘上的累积。
- 程序端:修复了高 DPI 屏幕上搜索结果的显示。
- MQL5:实现了从 MQL5 程序访问经济日历数据。
- MQL5:修复和改进与分时和柱历史相关的操作速度。
- MQL5:与自定义交易品种、 CustomTicks*和CustomRates*的分时和柱线历史修改功能相关的修复和显着的操作速度改进。
- MQL5:新的数据转换功能。
- 添加了 MathSwap函数,用于更改 ushort、uint 和 ulong 值中的字节顺序。
- MQL5:添加了用于通过系统套接字创建到远程主机的 TCP 连接的网络功能:
- SocketCreate 创建一个带有指定标志的套接字并返回它的句柄
- SocketClose 关闭套接字
- SocketConnect 连接服务器,有超时控制
- SocketIsConnected 检查套接字当前是否已连接
- SocketIsReadable 获取可以从套接字读取的字节数
- SocketIsWritable 检查当前时间是否可以将数据写入此套接字
- SocketTimeouts 设置系统套接字对象的数据接收和发送超时时间
- SocketRead 从套接字读取数据
- SocketSend 将数据写入套接字
- SocketTlsHandshake 使用 TLS 握手协议启动与指定主机的安全 TLS (SSL) 连接
- SocketTlsCertificate 接收有关用于安全网络连接的证书的信息
- SocketTlsRead 从安全的 TLS 连接中读取数据
- SocketTlsReadAvailable 从安全的 TLS 连接中读取所有可用数据
- SocketTlsSend 使用安全的 TLS 连接发送数据
使用网络功能建立连接的主机地址必须明确添加到终端设置中允许的地址列表中。
- ERR_NETSOCKET_INVALIDHANDLE (5270):传递给函数的套接字句柄无效
- ERR_NETSOCKET_TOO_MANY_OPENED (5271):打开的套接字过多(最多 128 个)
- ERR_NETSOCKET_CANNOT_CONNECT (5272):连接远程主机时出错
- ERR_NETSOCKET_IO_ERROR (5273):从套接字发送/接收数据时出错
- ERR_NETSOCKET_HANDSHAKE_FAILED (5274):安全连接建立错误(TLS 握手)
- ERR_NETSOCKET_NO_CERTIFICATE (5275) — 没有关于用于安全连接的证书的数据
- MQL5:为字符串操作添加了新函数:
- MQL5:为数组操作添加了新功能:
- MQL5:在函数CustomRatesUpdate 、 CustomRatesReplace 、 CustomTicksAdd和CustomTicksReplace中添加了新的“uint count”参数。它允许指定传递数组的元素数量,这些元素将用于这些函数。 WHOLE_ARRAY 值默认用于参数。这意味着将使用整个阵列。
- MQL5:添加了 CustomBookAdd函数以传递自定义交易品种的市场深度状态。该功能允许广播市场深度,就好像价格来自经纪人的服务器一样。
- MQL5:添加了 CustomSymbolCreate函数重载。这允许基于现有交易品种创建自定义交易品种。创建后,可以使用相应的功能编辑任何符号属性。
- 将带有日期/时间的字符串转换为日期时间值的StringToTime函数已更新。现在它支持以下日期格式:
- yyyy.mm.dd [hh:mi]
- yyyy.mm.dd [hh:mi:ss]
- yyyymmdd [hh:mi:ss]
- yyyymmdd [hhmiss]
- 年年/月/日 [hh:mi:ss]
- yyyy-mm-dd [hh:mi:ss]
- MQL5: ENUM_TERMINAL_INFO_INTEGER枚举中的新 TERMINAL_VPS 属性;它显示终端正在MetaTrader 虚拟主机服务器 (MetaTrader VPS) 上运行。如果应用程序在托管服务器上运行,您可以禁用其所有可视功能,因为虚拟服务器没有图形用户界面。
- MQL5: ENUM_SYMBOL_INFO_INTEGER枚举中的新 SYMBOL_EXIST 属性,表示此名称下的交易品种存在。
- MQL5:修正了使用模板函数预声明时的类型。
- MQL5:添加了更改交易账户时指标的重新初始化。
- MQL5:优化的StringSplit函数。
- MQL5:修复了标准库操作中的错误。
- 测试器:添加了 TesterStop功能 — 例行提前关闭测试代理上的 EA 交易。现在您可以在达到指定的亏损交易数量、预设的回撤水平或任何其他标准后强制停止测试。
- 测试器:禁用通过MQL5 云网络在真实报价模式下测试和优化 EA 交易的能力。此模式只能在本地代理和本地网络场上使用。
- 测试人员:改进了可视化测试期间的指标工作。现在价格图表和指标线是同步绘制的,即使是在最大可视化速度下也是如此。
- 测试器:优化并显着加速测试和优化。
- 测试器:修复了历史数据指标的调试。现在可以正确调试 OnInit 和 OnDeinit 指标函数。
- 测试器:在测试多币种智能交易系统时实现了对历史数据的更快访问。
- 测试器:修复了在调试历史数据期间视觉测试器偶尔冻结的问题。
- 测试人员:在代理处理任务包时实现了更快的优化通道启动。
- 测试人员:更改了将任务包分发给测试代理的策略。包大小已增加,因此网络操作的资源消耗已显着减少。
- 测试人员:更改了启用本地、网络和云代理的选项的行为。现在,当您关闭选项时,代理会完成对收到任务的处理,而不会再给他们新任务。在早期版本中,该行为类似于立即停止代理操作的“禁用”命令。
- MetaEditor:在调试器中添加了对非 ANSI 字符的支持。现在,即使在 Cyrillic 中指定了变量名,表达式也会正确显示。
- MetaEditor:修复了高 DPI 屏幕上搜索结果的显示。
- 添加了克罗地亚语的用户界面翻译。
- 文档已更新。
该更新将通过 LiveUpdate 系统提供。经济日历是我们的专有解决方案。您将在其中找到与全球 13 个最大经济体相关的 600 多个财经新闻和指标:美国、欧盟、日本、英国、加拿大、澳大利亚、中国等。相关数据是从开源实时收集的。
新版本具有更新的内容和高级事件过滤器:按时间、优先级、货币和国家。
现在可以从 MQL5 程序访问日历数据。请参阅下面的详细资料。
与智能交易系统、指标和脚本不同,服务未链接到特定图表。此类应用程序在后台运行,并在终端启动时自动启动(除非此类应用程序被强制停止)。
可以从导航器窗口中的新部分管理服务:
如何创建服务
要创建服务模板,请使用相应的MQL5 向导选项。服务有一个OnStart入口点,类似于脚本。此时,您可以使用网络函数实现无限的数据接收和处理循环。
如何启动服务
要运行具有不同参数的多个 EA 或指标副本,您应该在不同的图表上启动它们。在这种情况下,会创建不同的程序实例,然后独立运行。服务未链接到图表,因此实施了一种特殊机制来创建服务实例。
从导航器中选择一个服务,然后在其上下文菜单中单击“添加服务”。这将打开一个标准 MQL5 程序对话框,您可以在其中启用/禁用交易和访问信号设置,以及设置各种参数。
可以使用适当的实例菜单启动和停止服务实例。要管理所有实例,请使用服务菜单。新功能将帮助初学者学习如何与平台交互。我们添加了 100 多个有关主要平台功能的互动提示。
- 提示无缝地显示为工具栏上的进度条,因此不会分散用户的注意力。
- 提示仅针对您从未在平台中执行的操作显示。
- 所有提示都包含交互式链接,您可以通过这些链接导航到相关的界面元素。例如,可以直接从提示中启动带有所需程序的交易对话框或菜单。
每当您执行适当的操作并继续训练时,进度条的填充区域就会增加。我们准备了一个特殊的 MetaTrader 包。它包含用于 R 和 MetaTrader 5 终端之间交互的 DLL、文档和辅助 r 文件。我们正在完成CRAN存储库中的包注册,之后它将可供下载和安装。
可以使用特殊命令安装该软件包:
以下与数据请求相关的命令可用:
支持的命令列表将进一步扩展。
新功能
CalendarCountryById — 按标识符获取国家/地区描述。
CalendarEventById — 按标识符获取事件描述。
CalendarValueById — 按标识符获取事件值描述。
CalendarEventByCountry — 获取国家/地区可用事件的数组。
CalendarEventByCurrency — 获取受影响货币的可用事件数组。
CalendarValueHistoryByEvent — 按事件标识符获取指定时间段的值数组。
CalendarValueHistory — 获取指定时间段内所有事件的值数组,按国家和/或货币过滤。
CalendarValueLastByEvent — 按标识符获取最后一个事件值的数组。此功能启用自上次请求以来出现的值的请求。输入/输出参数“change_id”额外用于此操作。
每次日历数据库更改时,都会更新“change_id”属性(最后一次更改标识符)。在数据请求期间,您指定“change_id”,终端返回该时间之后出现的事件,以及当前的“change_id”值,可用于下一次请求。在第一次函数调用期间,指定零“change_id”:该函数不会返回任何事件,但会返回当前的“change_id”以供进一步请求。
CalendarValueLast — 获取所有事件的最后值数组,按国家和/或货币过滤。此功能启用自上次请求以来出现的值的请求。与 CalendarValueLastByEvent 类似,“change_id”属性用于请求。
新结构
MqlCalendarCountry — 国家描述。
MqlCalendarEvent — 事件描述。
MqlCalendarValue — 事件值描述。
新枚举
新的错误代码
CharArrayToStruct将 uchar 数组复制到 POD 结构。
StructToCharArray将 POD 结构复制到 uchar 数组。
为具有网络功能的操作添加了新的错误代码:
StringReserve 为字符串保留指定大小的内存缓冲区。
StringSetLength 以字符为单位设置指定的字符串长度。
ArrayRemove 从数组中删除从指定索引开始的指定数量的元素。
ArrayInsert 将源数组中指定数量的元素插入到接收器数组中,从指定的索引开始。
ArrayReverse 反转数组中从指定索引开始的指定数量的元素。
应从中复制自定义交易品种属性的交易品种名称在“symbol_origin”参数中指定。
使用此功能完成的测试被认为是成功的。函数调用后,将测试时获得的交易历史和所有交易统计数据传递给终端。
关于交易、自动交易系统和测试交易策略的论坛
MetaTrader R软件包--摘要
Sergey Golubev, 2019.02.22 06:47
主要研究
文章
论坛
----------------
更多内容请关注...
关于交易、自动交易系统和测试交易策略的论坛
有用的链接/线程/工具
Sergey Golubev, 2017.10.05 12:33
MT5中的多货币专家顾问--回测和优化
的线程/帖子
文章
在策略测试器中运行多货币EA也可以获得有趣的结果。作为一个例子,我们使用了来自CodeBase的免费多币种专家。此外,指定了 "#include <DistributionOfProfits.mqh>"文件,并在EA的标题中声明了 "CDistributionOfProfits ExtDistribution "变量,并在代码末尾添加了 "OnTester()"函数。在一次运行后,收到了以下的统计数据。"TestAnalysis.htm"。
在市场观察中选择的所有符号 上优化它
文档
...这是来自CodeBase的代码例子 -
----------------
多币种iMA趋势- MetaTrader 5的专家
The multi-symbol adviser uses the MA Trend 2 adviser as the base advisor, while the advisor itself is rewritten as a class.
这个顾问的第一个版本是以类的形式出现的,所以,现在,符号("EURUSD","USDCAD","USDJPY")在代码中被指定为硬。此外,所有的输入参数对这三个符号的每一个都是相同的(止损,获利,等等...)。
发表了一篇好文章-
----------------
关联性在交易中的实际应用
相关性是两个或多个随机变量(或在某种可接受的准确程度上可被视为随机的数量)之间的统计关系。一个或多个变量的变化会导致其他相关变量的系统变化。衡量两个随机变量的相关性的数学方法是相关系数。如果一个随机变量的变化并不导致另一个随机变量的规律性变化,而是导致这个随机变量的另一个统计特征的变化,那么这种关系就不被认为是相关的,尽管它是统计学的。
目录
关于交易、自动交易系统和测试交易策略的论坛
我从哪里开始?
Sergey Golubev, 2018.09.20 15:43
使用技巧--关于HowTo的说明
=========
----------------
----------------
----------------
在论坛上有一个主题--
Canvas的可能性。
这是非常有用的线程。
这是一个非常有趣的工具,与这个主题完全相关----。
----------------
每个柱子上的线性代数方程系统- MetaTrader 5的指标
This work has 3 goals: