私募网

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

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

[复制链接]
发表于 2024-4-3 08:34:47 | 显示全部楼层 |阅读模式
概述7 G! T' t8 u+ \9 Y) L& \
作为 MQL5 程序员或开发人员,我们发现我们需要很好地理解和使用策略测试器,才能获得有效的结果。 通过使用这款颇具价值的工具,我们可以获得有关我们所创建 MQL5 程序的性能的宝贵认知,这对获得更好的交易结果颇具影响。 故此,我们发现在进行测试之前,我们需要充分了解重要的主题,例如处理所有错误类型,因为作为开发人员,我们犯糊涂导致出错是很正常的。 我们还需要深刻理解的另一个主题是调试,它让我们以交互方式执行我们创建的程序。 然后,我们来到最重要和最有价值的工具,即策略测试器,用于测试和评估我们创建的程序,其功能比 MetaTrader 4 版本的更有趣。 因此,在本文中,学习使用 MQL5 策略测试器的最重要方面会是一次了不起的学习之旅7 l& j4 U+ M  z. N1 Y- b
错误
. V) C# T+ x- v; G1 n# {. N在本主题中,我们将学习在创建、执行和运行 MQL5 程序时可能发现的错误。 理解这个主题的一个要点是,MQL5 会正确报告这些错误,但如果我们不知道这些错误意味着什么,或者在程序的哪个阶段,相较于我们已经知道它们的含义,我们就要花费更多的时间来处理或解决它们。
$ R8 L$ l& G0 ]% M* B我们将根据我们在 MQL5 程序上的工作阶段来讲述这个主题,在我们编写代码时,可能会遇到错误和警告,即编译错误和警告。 我们在执行 MQL5 程序时也可能会遇到运行时错误,当我们的 MQL5 程序尝试交易时,我们也可能会遇到其它类型的错误,即交易服务器错误。
& g# ~$ U8 S& {5 k7 g左括号不平衡错误:: P! F$ Z$ c* d1 _. G$ |; l
当我们缺少右括号、或多用了额外的右括号时,就会发生此类错误。 我们可以通过以下示例发现该错误。
* D, P1 |2 O/ j7 {- ^; e出错的错误代码:& z9 l1 e4 Q6 d
bool a=7;
# `6 s! p1 e5 t# [$ g- Bif (a=5
. K0 F" ]- A- S& Ta=5' b$ M& m) G6 ^0 K
更正无错误代码:
3 X6 {& r( v4 v/ A9 xbool a=7;; T( g. W$ F* L& r$ G( N' m
if (a=5)7 s$ s, G# b" ~: O
a=5;
% b' }) A" P5 w: {* Y更正代码后,我们会发现编译时没有错误。
! L2 @2 h) t0 g, _' T+ a' P程序意外结束错误:
" _! j2 e) P* o& o2 e. O: Q  |有时我们在代码中遗漏了一个右括号,继而发生意外的程序结束错误,我们必须检查我们的代码,查看需要添加的内容,或者我们需要确保每个左括号匹配一个右括号来解决此错误。 下面是该代码的示例。
% R* O7 N( d, g) F; V% b出错的错误代码:# }9 f: ^4 S* G9 V  q4 {1 N# u6 O! V
void OnStart()2 D0 ^4 u, ^; H1 ?" h8 ^" G
{
3 Y5 u) P% Y" b2 B& b7 N+ z. xbool a=7;; k5 t9 F" w  Y$ Y  L8 d
if (a=5)  t, G+ m6 y7 U4 w0 D1 i1 {( x; V# i7 {9 O
a=5;8 T. q. Z. R& \4 H) t# m# D( a
更正无错误代码:
3 o+ \+ |( W3 z7 H) ]& R+ @void OnStart()* Y) x8 V% W- a* o3 g
{
0 b* l4 j* a3 Z, Vbool a=7;
9 p, D2 m  m3 q3 C$ }$ sif (a=5)# ], x, l( A- t; ~
a=5;
* S- h5 d# I! C9 P+ g; F7 R8 }}
- t2 i3 e1 W' {; B添加右括号更正代码后,我们会发现代码成功编译没有错误。
. g( j# a, o/ x2 z表达式不允许出现在全局范围错误:+ N( k+ {$ I5 S+ l! h8 J
当我们在复合运算符中缺少左括号时,就会发生该错误,或者当我们在特定函数范围之外编写语句或表达式时,可能会发生该错误,因为我们只能在函数范围内使用表达式。 以下示例示意此类错误。* a# w( b- R! S
出错的错误代码:
( F+ V7 Q& x3 _2 Z% Bint a=(7+5);1 F( i6 ]. {/ N: c9 x: v
if (a<7)
" X; q' q$ }- F; I8 Ua=7;7 |* S6 \& i0 T4 g6 i
}% r# g% ]6 m5 b' i, @( T
在前面的代码中,我们遗漏了与(})配对的起始({),故系统报告 “表达式不允许出现在全局范围” 错误。 以下是 “错误” 选项卡中的错误。
0 C0 V' K, ~# U% m更正无错误代码:$ ]5 H  ~4 S9 u( H: g
int a=(7+5);/ U3 S8 @" M% W8 k
if (a<7)1 n: A/ X9 ^; W6 Y6 p9 a
{$ G& j; v# w0 }0 R: j7 O
a=7;
: V/ W" C  t9 l) t: N: _( k  u}# \/ r# C/ `; {$ @
更正代码后,与前面的代码模块相同,我们会发现代码编译后没有任何错误。
- S  u3 b, P. Q1 H错误的参数计数错误:
+ F  x: i) q4 ]6 s4 }当我们用到拥有指定参数的特定函数时,若我们未正确指定这些参数,意即或多或少,我们会体验到这种类型的错误代码。 如果我们使用预定义的函数或我们创建的函数,则会出现此错误。 以下是该错误的示例。* X) E$ a' l9 t! ]& ?  E/ v
有错误的代码:2 G/ k: b2 l, S' F* |7 {5 [
如果我们创建了一个 “myVal” 函数,返回两个整数值求和的结果,这意味着该函数中有两个参数? 故此,当我们调用此函数时传递个数的参数时,我们将得到此类错误,其与以下代码相同
8 Q9 m! F0 ^0 U7 o; E( I! [void OnStart()
2 q# o3 q- q3 d; I$ _$ ^! M: y* x- `{
1 P  i. }6 L% D( t  eint example=myVal(10);
# R1 C- f, Y; E, j) N}0 b7 O& ^, W7 y* p: w5 p
//+------------------------------------------------------------------+/ {; I0 Q3 {" x" ^, h8 L  E( f
int myVal(int a, int b)
( d0 m/ a) J8 A5 q% c{4 G$ M# I: b6 T& ~
return a+b;, v( ~7 F+ D( ^
}
5 ~- z4 J9 W3 n# b5 V- a无错误代码:
0 U& d  y* y) S2 @为了正确编写此代码,我们需要为这个创建的函数传递相应个数的参数,如下所示
8 [! W2 y  J  e- }$ h1 i( {void OnStart()
  d& r) y3 X0 p" n7 M# ~{
0 v8 d: Q4 E4 C6 ~0 gint example=myVal(10,20);0 j0 N: x% J' o( \
}% g/ O- ^# C- C) c% G2 S
//+------------------------------------------------------------------+
9 b( t7 ]0 |& k" r7 ]' dint myVal(int a, int b)
5 }! i4 |# `) P3 D  c- ?{9 o1 f4 @$ d1 J5 u( C: F
return a+b;9 Y9 E$ Y* n7 ^% B+ b/ y
}
3 `' T0 m: Y. ?5 V4 U/ c8 j编译此正确代码后,我们不会发现任何错误。
5 j# }5 D  b$ U某些操作符预期错误:
9 U: P: j8 K- N- F6 V1 x8 s当我们在特定位置完全遗漏或放错操作符时,我们就会遇到这种类型的错误。 以下是该类错误的示例。
0 C. e6 }0 g6 i. I8 q有错误的代码:
" j( _2 @6 Y0 L( Oint a= 7 10;
http://www.simu001.cn/x287954x1x1.html
最好的私募社区 | 第一私募论坛 | http://www.simu001.cn

精彩推荐

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-11 01:58 , Processed in 0.760144 second(s), 32 queries .

Powered by www.simu001.cn X3.4

Copyright © 2001-2021, Tencent Cloud.

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