私募

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz

期货量化软件:赫兹量化中理解并有效地使用 MQL5 策略测试器

[复制链接]
发表于 2024-4-3 08:34:47 | 显示全部楼层 |阅读模式
概述( _& I& X3 e' U& ?- b4 E
作为 MQL5 程序员或开发人员,我们发现我们需要很好地理解和使用策略测试器,才能获得有效的结果。 通过使用这款颇具价值的工具,我们可以获得有关我们所创建 MQL5 程序的性能的宝贵认知,这对获得更好的交易结果颇具影响。 故此,我们发现在进行测试之前,我们需要充分了解重要的主题,例如处理所有错误类型,因为作为开发人员,我们犯糊涂导致出错是很正常的。 我们还需要深刻理解的另一个主题是调试,它让我们以交互方式执行我们创建的程序。 然后,我们来到最重要和最有价值的工具,即策略测试器,用于测试和评估我们创建的程序,其功能比 MetaTrader 4 版本的更有趣。 因此,在本文中,学习使用 MQL5 策略测试器的最重要方面会是一次了不起的学习之旅2 p( n% o/ }8 O' B# P7 {, }/ n5 A
错误. H! i& Q5 Z! _# L
在本主题中,我们将学习在创建、执行和运行 MQL5 程序时可能发现的错误。 理解这个主题的一个要点是,MQL5 会正确报告这些错误,但如果我们不知道这些错误意味着什么,或者在程序的哪个阶段,相较于我们已经知道它们的含义,我们就要花费更多的时间来处理或解决它们。; b: k& W- D! P* v  _
我们将根据我们在 MQL5 程序上的工作阶段来讲述这个主题,在我们编写代码时,可能会遇到错误和警告,即编译错误和警告。 我们在执行 MQL5 程序时也可能会遇到运行时错误,当我们的 MQL5 程序尝试交易时,我们也可能会遇到其它类型的错误,即交易服务器错误。
; [- O+ R$ b) d- M左括号不平衡错误:
1 y  D9 G7 M1 v# p% J当我们缺少右括号、或多用了额外的右括号时,就会发生此类错误。 我们可以通过以下示例发现该错误。
9 T( H* B' ~. o7 a8 N出错的错误代码:
+ l: p% |* B, n1 j( Qbool a=7;5 `" t; L, V% q9 g0 |* D
if (a=5
  v3 J- A; b  c% Y3 b# H9 ^- pa=5
* e$ \" B4 `$ u& A- O更正无错误代码:
! B. F8 Z: _2 \bool a=7;
' _; b5 c& ]1 {) D* n/ x  Sif (a=5)
2 L- H6 ~+ k. Q/ b; ua=5;
% W; m  S2 B9 ~& D1 X& g1 N更正代码后,我们会发现编译时没有错误。
+ K2 L5 ~2 U& x$ D: m) b* L程序意外结束错误:3 \& z. n  d' T4 m
有时我们在代码中遗漏了一个右括号,继而发生意外的程序结束错误,我们必须检查我们的代码,查看需要添加的内容,或者我们需要确保每个左括号匹配一个右括号来解决此错误。 下面是该代码的示例。
% ~) ]1 R3 S, ^% `' W/ V  e& K出错的错误代码:
  d6 ~" w8 U8 Q0 Z0 D+ h9 O8 qvoid OnStart()
0 f( M8 o2 H! k) B7 c{3 @' O2 }2 Q) j( u% N: P
bool a=7;& Z8 p% L6 E# |4 z+ ]# L4 L
if (a=5)/ G; R( |+ t% d8 _0 R& ^$ \
a=5;: y/ g+ H. j# }# n+ I8 n
更正无错误代码:0 f  S: K# F, Q  P  ^6 D
void OnStart()
; `  R- {" r5 f{( b5 Z+ x' G. t$ k) G* T9 S
bool a=7;2 p3 L. a/ w/ v; T
if (a=5)2 v1 A, S5 N3 Y1 a. q* {) ~
a=5;) k7 Z1 p' [+ l# Q2 \8 o) [9 j
}7 i' \7 o8 t. Z$ s) c
添加右括号更正代码后,我们会发现代码成功编译没有错误。
0 s( R* I  a5 ]4 k4 Q# d表达式不允许出现在全局范围错误:2 A+ e4 \6 e7 t, `1 F; o0 j
当我们在复合运算符中缺少左括号时,就会发生该错误,或者当我们在特定函数范围之外编写语句或表达式时,可能会发生该错误,因为我们只能在函数范围内使用表达式。 以下示例示意此类错误。$ n1 C! r* {# a* _$ W: t
出错的错误代码:. N; e, V0 E+ q6 \
int a=(7+5);; f; R3 O- _- D$ c
if (a<7)
0 r/ m" U2 z1 U% @' va=7;
( g9 Q: W6 J$ v4 J}8 C( U" f0 f) e- r7 f6 a
在前面的代码中,我们遗漏了与(})配对的起始({),故系统报告 “表达式不允许出现在全局范围” 错误。 以下是 “错误” 选项卡中的错误。
" D( K) Z4 b* f' A2 S3 j更正无错误代码:% r4 v6 g$ p  G  n" f; T  B
int a=(7+5);
1 i; I% ^# M, L" g9 T& L: ^if (a<7)9 h  N. a" [, Z
{
4 S9 F! X: p6 Y7 v, s$ ]3 Ma=7;
% C: ^& h5 `# h2 A; ?1 t% O9 b+ @}
  I% J. e* @( z5 Z* F更正代码后,与前面的代码模块相同,我们会发现代码编译后没有任何错误。' q+ h( U) u1 N# {3 z( g' f' Z
错误的参数计数错误:
# W, H' U3 [" `7 l" E. p( R6 n当我们用到拥有指定参数的特定函数时,若我们未正确指定这些参数,意即或多或少,我们会体验到这种类型的错误代码。 如果我们使用预定义的函数或我们创建的函数,则会出现此错误。 以下是该错误的示例。
% k: p. M+ Q, A: n, M有错误的代码:
! Q3 G1 Z0 f% ~6 W7 z8 F如果我们创建了一个 “myVal” 函数,返回两个整数值求和的结果,这意味着该函数中有两个参数? 故此,当我们调用此函数时传递个数的参数时,我们将得到此类错误,其与以下代码相同
8 t$ o4 i1 f- G* k2 F7 Vvoid OnStart()0 S; K: L* Z( c1 \7 v
{4 \8 Y: M3 B/ l5 V0 A( D; `; O
int example=myVal(10);
: v# V- g7 y: N( J( `+ ]: ~}# W" `* k$ P1 y/ i' l
//+------------------------------------------------------------------+) W& m' G! [7 k
int myVal(int a, int b)9 _/ I: C: O( \: r6 o+ \! y' K
{
: @: U' u. \2 T6 h/ X7 ~0 rreturn a+b;
, T! o1 l+ a: G+ Q$ q' g" R}, k9 G2 Z$ }* [  ?
无错误代码:) W* E7 E/ v' L2 C, C- s
为了正确编写此代码,我们需要为这个创建的函数传递相应个数的参数,如下所示
/ P; |% r1 N3 W% G+ nvoid OnStart()4 l$ v2 r  P( C+ D
{
& t1 }# ?1 R$ @* }& L3 i$ oint example=myVal(10,20);; F0 t3 V7 P* w! A; l( D5 k
}  R3 m5 ?, b- H; V
//+------------------------------------------------------------------+" x3 M0 P' r/ O
int myVal(int a, int b)6 Z. M( w$ Z, g- z- e
{
- ^$ j4 l5 Y& ^3 J; n0 zreturn a+b;
8 K: c: ^$ ?1 Z4 u  [}
* U. G' h4 b2 M# g4 o7 J; a4 {编译此正确代码后,我们不会发现任何错误。
/ z) l2 P0 n8 E' F5 V+ S某些操作符预期错误:
  M9 X: s( w4 U+ {当我们在特定位置完全遗漏或放错操作符时,我们就会遇到这种类型的错误。 以下是该类错误的示例。
, q7 Q4 [  F5 S: L/ k, b, [" V有错误的代码:
) [! A/ M0 t4 h  e* @int a= 7 10;
http://www.simu001.cn/x287954x1x1.html
最好的私募社区 | 第一私募论坛 | http://www.simu001.cn

精彩推荐

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|Archiver| ( 桂ICP备12001440号-3 )|网站地图

GMT+8, 2025-12-23 23:36 , Processed in 0.526762 second(s), 31 queries .

Powered by www.simu001.cn X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表