私募网

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

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

[复制链接]
发表于 2024-4-3 08:34:47 | 显示全部楼层 |阅读模式
概述
, {0 m0 t0 g  Z: |8 O9 o0 f0 _作为 MQL5 程序员或开发人员,我们发现我们需要很好地理解和使用策略测试器,才能获得有效的结果。 通过使用这款颇具价值的工具,我们可以获得有关我们所创建 MQL5 程序的性能的宝贵认知,这对获得更好的交易结果颇具影响。 故此,我们发现在进行测试之前,我们需要充分了解重要的主题,例如处理所有错误类型,因为作为开发人员,我们犯糊涂导致出错是很正常的。 我们还需要深刻理解的另一个主题是调试,它让我们以交互方式执行我们创建的程序。 然后,我们来到最重要和最有价值的工具,即策略测试器,用于测试和评估我们创建的程序,其功能比 MetaTrader 4 版本的更有趣。 因此,在本文中,学习使用 MQL5 策略测试器的最重要方面会是一次了不起的学习之旅! ]0 P) G+ @3 K0 z
错误
# ^& i. B% q4 A4 F6 j. }6 e在本主题中,我们将学习在创建、执行和运行 MQL5 程序时可能发现的错误。 理解这个主题的一个要点是,MQL5 会正确报告这些错误,但如果我们不知道这些错误意味着什么,或者在程序的哪个阶段,相较于我们已经知道它们的含义,我们就要花费更多的时间来处理或解决它们。0 V/ u1 L( r4 s3 m9 T1 g3 ]- \
我们将根据我们在 MQL5 程序上的工作阶段来讲述这个主题,在我们编写代码时,可能会遇到错误和警告,即编译错误和警告。 我们在执行 MQL5 程序时也可能会遇到运行时错误,当我们的 MQL5 程序尝试交易时,我们也可能会遇到其它类型的错误,即交易服务器错误。; k" H( s' _4 f) l: x. Y1 d
左括号不平衡错误:
" f, X( j; x/ _当我们缺少右括号、或多用了额外的右括号时,就会发生此类错误。 我们可以通过以下示例发现该错误。
2 j8 W9 x) Z( v, [( r/ b0 }出错的错误代码:
3 q+ e& X" t# p+ ^bool a=7;
! E$ V6 _3 V$ Y3 W0 tif (a=5% s! y# y5 Y5 Y& v/ N( w) G3 J1 u
a=5
- M3 x  a8 U# |# d! I2 q: `更正无错误代码:  ]* }. ]. C# r8 X& t
bool a=7;) y. a/ A) L+ ?" `2 C- j. k# \2 }1 Y
if (a=5)6 `+ r4 h6 r$ L  r, y, `2 D- ?6 f1 D: T
a=5;: B1 }- o* ]# B7 M- p
更正代码后,我们会发现编译时没有错误。
/ }: [7 r! w  D, |程序意外结束错误:
7 E4 g# e# L0 a, L) c2 R$ f有时我们在代码中遗漏了一个右括号,继而发生意外的程序结束错误,我们必须检查我们的代码,查看需要添加的内容,或者我们需要确保每个左括号匹配一个右括号来解决此错误。 下面是该代码的示例。
& Z3 G/ R" r+ Y出错的错误代码:5 o& h% J- ~/ L6 e  g
void OnStart()7 [2 A9 `5 k# M0 r) c5 h. k! S# N: W# y
{
9 Z7 g, S0 L+ }" o* B/ O( Sbool a=7;
, I5 U9 d) I8 b5 M% {if (a=5)) |) ?/ S/ ~* b7 a
a=5;
% i  F- z) w7 l; E9 w0 O0 N更正无错误代码:
8 E0 y5 A1 A0 q) l2 a( Kvoid OnStart()
, G1 e7 K& p/ e3 E/ d. U) z{
" y0 O4 u* h; X2 pbool a=7;
9 O& h) ~: K+ v5 w  ~7 iif (a=5)' n% H2 v! Y7 }- Y( C
a=5;
% ^. |. N. x6 }" ?! {! y}
5 s( T+ z1 ~7 @添加右括号更正代码后,我们会发现代码成功编译没有错误。$ [: D" p" k) H
表达式不允许出现在全局范围错误:: P, b+ e. R6 Z
当我们在复合运算符中缺少左括号时,就会发生该错误,或者当我们在特定函数范围之外编写语句或表达式时,可能会发生该错误,因为我们只能在函数范围内使用表达式。 以下示例示意此类错误。
7 H' T+ l! K+ `8 c6 ~# C出错的错误代码:; l5 T6 u0 M7 O: y
int a=(7+5);5 ?# o/ P" U0 p' l& m! C
if (a<7)
3 {$ V" A* c' p: y3 ya=7;
* V7 V) R# h9 M: ]# f}
, q9 n: Z" V  g6 x! Q: x1 z在前面的代码中,我们遗漏了与(})配对的起始({),故系统报告 “表达式不允许出现在全局范围” 错误。 以下是 “错误” 选项卡中的错误。
" z% ]" b1 M3 s1 @) U2 b3 o更正无错误代码:4 [( a( y+ X+ n4 K
int a=(7+5);: T& z  Z4 I9 \  S$ d
if (a<7)
7 B/ s5 L" m7 W5 P  ^{. j5 P! h' H& Y0 f9 z
a=7;8 T( S: f. P; o
}1 s  [1 Z0 {0 O
更正代码后,与前面的代码模块相同,我们会发现代码编译后没有任何错误。8 g( j8 V: t/ v% [7 H0 Q' _- g; y
错误的参数计数错误:, g8 T! p7 B8 C' V# z! Z
当我们用到拥有指定参数的特定函数时,若我们未正确指定这些参数,意即或多或少,我们会体验到这种类型的错误代码。 如果我们使用预定义的函数或我们创建的函数,则会出现此错误。 以下是该错误的示例。
& ^: i2 g+ @& q5 S2 C. N; V有错误的代码:
- S6 B6 `7 n; ~6 P/ R如果我们创建了一个 “myVal” 函数,返回两个整数值求和的结果,这意味着该函数中有两个参数? 故此,当我们调用此函数时传递个数的参数时,我们将得到此类错误,其与以下代码相同& G% U+ z" a! u3 d2 y" o, R8 R
void OnStart()
$ s4 ^2 r; H# E) f{
. J% h5 b$ Z, G: R2 Tint example=myVal(10);1 Y& a) P  {& C! A. n% o8 A$ }
}
  f* \/ _: g1 i//+------------------------------------------------------------------+
, D( {# |( H0 kint myVal(int a, int b)
: D5 P6 N8 ]( s- x" ~- J' l  ~{
" \# e0 |# \* i- C9 areturn a+b;
2 V' p0 j" P+ u}
" w2 l- L/ y# o$ A4 @' }/ w$ w无错误代码:
' |& \6 I. J- `% S为了正确编写此代码,我们需要为这个创建的函数传递相应个数的参数,如下所示
2 S# U  A2 r: {7 vvoid OnStart()
3 R: p$ Z. z+ {% R' l, Z{! q2 U( w) T( K( t3 r! y1 R' ~/ [; i1 I
int example=myVal(10,20);! \9 q9 Q3 W; l7 J
}
% r5 V/ L  [5 v//+------------------------------------------------------------------+$ e7 X) G2 c" ~5 N/ m
int myVal(int a, int b)7 C  ?& q; K1 a
{
# n# v1 c5 M" g- jreturn a+b;
" h8 b4 N( O5 n/ B; T+ I1 q& ?}
4 ^+ k9 ]- |1 ?3 V0 G编译此正确代码后,我们不会发现任何错误。$ }2 M0 n6 Z! Y
某些操作符预期错误:
2 y  k8 A4 h3 [" N; R7 o% v当我们在特定位置完全遗漏或放错操作符时,我们就会遇到这种类型的错误。 以下是该类错误的示例。3 }/ C) t* u  j" c. o! E
有错误的代码:3 l/ D  J- b; l7 g6 e* P6 W
int a= 7 10;
http://www.simu001.cn/x287954x1x1.html
最好的私募社区 | 第一私募论坛 | http://www.simu001.cn

精彩推荐

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-2 15:13 , Processed in 0.415639 second(s), 32 queries .

Powered by www.simu001.cn X3.4

Copyright © 2001-2021, Tencent Cloud.

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