四目观天下

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

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

[复制链接]
发表于 2024-4-3 08:34:47 | 显示全部楼层 |阅读模式
概述" ]+ P; H0 @" q( H: a& v
作为 MQL5 程序员或开发人员,我们发现我们需要很好地理解和使用策略测试器,才能获得有效的结果。 通过使用这款颇具价值的工具,我们可以获得有关我们所创建 MQL5 程序的性能的宝贵认知,这对获得更好的交易结果颇具影响。 故此,我们发现在进行测试之前,我们需要充分了解重要的主题,例如处理所有错误类型,因为作为开发人员,我们犯糊涂导致出错是很正常的。 我们还需要深刻理解的另一个主题是调试,它让我们以交互方式执行我们创建的程序。 然后,我们来到最重要和最有价值的工具,即策略测试器,用于测试和评估我们创建的程序,其功能比 MetaTrader 4 版本的更有趣。 因此,在本文中,学习使用 MQL5 策略测试器的最重要方面会是一次了不起的学习之旅
1 C3 y1 q- |3 E1 N) ]- M错误
+ n' L/ A+ F; r7 N. M在本主题中,我们将学习在创建、执行和运行 MQL5 程序时可能发现的错误。 理解这个主题的一个要点是,MQL5 会正确报告这些错误,但如果我们不知道这些错误意味着什么,或者在程序的哪个阶段,相较于我们已经知道它们的含义,我们就要花费更多的时间来处理或解决它们。+ ?5 y2 |. M2 Z
我们将根据我们在 MQL5 程序上的工作阶段来讲述这个主题,在我们编写代码时,可能会遇到错误和警告,即编译错误和警告。 我们在执行 MQL5 程序时也可能会遇到运行时错误,当我们的 MQL5 程序尝试交易时,我们也可能会遇到其它类型的错误,即交易服务器错误。
# A$ E$ E4 o& ~# u: ]  u* p7 P左括号不平衡错误:$ g& o( l! F" y' A- S1 [" J
当我们缺少右括号、或多用了额外的右括号时,就会发生此类错误。 我们可以通过以下示例发现该错误。$ R4 v% E# Q* S1 t4 c0 c4 U
出错的错误代码:
4 E4 r, T4 u! s* mbool a=7;
8 E$ P8 J' b0 O6 K$ r' oif (a=5
& g- \6 D% z; }% n9 j7 ~% o6 _; Pa=5
1 K4 V* [, b( S0 C0 W* U更正无错误代码:: C" @0 D  @- u* R$ L7 J' ?* G- s
bool a=7;
% m/ V. v$ Y' ~if (a=5)
% W0 U% f2 ]5 ?5 v+ T* U7 K4 Y7 }a=5;
& U6 j, G3 U9 B' C, j. H: \更正代码后,我们会发现编译时没有错误。! a" @3 T; I+ T* f7 \
程序意外结束错误:  e, m2 A' e2 ^  k& d) t; h
有时我们在代码中遗漏了一个右括号,继而发生意外的程序结束错误,我们必须检查我们的代码,查看需要添加的内容,或者我们需要确保每个左括号匹配一个右括号来解决此错误。 下面是该代码的示例。1 Z% c2 [9 Z8 R3 H; ^; u
出错的错误代码:( b9 i, D9 J8 R% P% R( d
void OnStart()# ^" X, w" H3 S9 V9 [
{
7 B& T) K/ b# [bool a=7;7 H& b, I; p+ k( U5 F/ S
if (a=5)7 X2 j  _; y- L9 t9 e  [* R3 W) {0 z
a=5;
+ W8 F( D  i3 v/ t; y6 V2 T更正无错误代码:
' X. l& J5 B. ]" b0 a* V0 l) M  @void OnStart()% ]- c4 V  Z9 _' n) D2 v$ M6 T
{8 G. ?; L- T) n% w% n6 Z% v
bool a=7;3 }; v3 e4 J7 T- V( n5 ~$ j
if (a=5)/ j8 p3 x5 u+ }9 W( e8 O4 z
a=5;
2 d, ]- Q/ v' y" i8 v( V$ g}. G. \9 q$ a5 x$ O  w
添加右括号更正代码后,我们会发现代码成功编译没有错误。+ K! X% W. ?" p. O- u* I
表达式不允许出现在全局范围错误:) r- u  P2 k1 g; l& S3 A
当我们在复合运算符中缺少左括号时,就会发生该错误,或者当我们在特定函数范围之外编写语句或表达式时,可能会发生该错误,因为我们只能在函数范围内使用表达式。 以下示例示意此类错误。
1 R1 t7 T' M7 ~( |( l& [出错的错误代码:
% B1 g( z' }9 C) c5 Vint a=(7+5);6 }( ^0 N% w3 ?
if (a<7)
7 a" Q' x+ [; x1 }a=7;
" R( C) Z# [/ D0 f) g5 a8 k! k  T}* }2 l8 n; L) m
在前面的代码中,我们遗漏了与(})配对的起始({),故系统报告 “表达式不允许出现在全局范围” 错误。 以下是 “错误” 选项卡中的错误。  e& x+ Y- o4 b: J1 z2 p
更正无错误代码:
: ^3 c* ^8 S# U. \+ zint a=(7+5);/ N3 x7 W4 ^8 K$ ?: Z+ @
if (a<7)
' R- v: I) {1 F4 ?( ]. x{
! h# d( u& I. Z' K( D2 t  _a=7;
+ J& q5 ]+ ^0 S+ T8 e+ q2 Q4 p" D}
0 W" c( ]& N# Y$ M9 ~7 E更正代码后,与前面的代码模块相同,我们会发现代码编译后没有任何错误。
* v: a# F) ^0 M+ ?" V错误的参数计数错误:' _# w1 e. _1 t
当我们用到拥有指定参数的特定函数时,若我们未正确指定这些参数,意即或多或少,我们会体验到这种类型的错误代码。 如果我们使用预定义的函数或我们创建的函数,则会出现此错误。 以下是该错误的示例。; p* _2 o7 u. e4 P
有错误的代码:3 s# z$ N  N  x2 e. }5 N
如果我们创建了一个 “myVal” 函数,返回两个整数值求和的结果,这意味着该函数中有两个参数? 故此,当我们调用此函数时传递个数的参数时,我们将得到此类错误,其与以下代码相同
4 o9 Z- h/ z' ~( H8 ?void OnStart()
5 \9 k% B6 ]( h{
. d3 Q: P. ^0 N% x8 l3 oint example=myVal(10);8 ^& k& C9 I$ {: i' r+ H6 B
}# j# [( F- v7 `5 N( f2 \3 A
//+------------------------------------------------------------------+: Z  A8 i1 e1 A3 C+ B
int myVal(int a, int b)
6 {4 y) r) |/ f$ E{
# k9 `! L6 S1 `1 Y* Ereturn a+b;; G9 d5 n( a( v4 E! T
}8 c0 w7 @2 [+ @+ J
无错误代码:1 i2 Z1 h- J& ~/ Z4 V6 B) n
为了正确编写此代码,我们需要为这个创建的函数传递相应个数的参数,如下所示
& H3 D9 S+ [! j7 Bvoid OnStart()
8 D, ?7 _- X8 o7 b% g) G{9 T% S6 I: T7 H( x; l' h
int example=myVal(10,20);
; V& B: m0 B( w}+ R; A! ^& p( x: M; Z6 L
//+------------------------------------------------------------------+0 ]* G: R- P6 ~# n0 @
int myVal(int a, int b)
$ `3 f: t2 z* X  O. }6 U{
* n, B9 g" d0 H/ Xreturn a+b;# T" s8 z" X: p7 l; I/ s
}
& ]" W; M: q. A3 b% E编译此正确代码后,我们不会发现任何错误。
+ b& I" R4 g; v" e某些操作符预期错误:! w( D; N  c4 M5 ]
当我们在特定位置完全遗漏或放错操作符时,我们就会遇到这种类型的错误。 以下是该类错误的示例。) g( X. T5 o! a* H5 V! n
有错误的代码:
6 l2 ?7 O) s; Y/ \6 Y3 Z3 R' Oint a= 7 10;
http://www.simu001.cn/x287954x1x1.html
最好的私募社区 | 第一私募论坛 | http://www.simu001.cn

精彩推荐

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-8-25 14:32 , Processed in 0.802409 second(s), 31 queries .

Powered by www.simu001.cn X3.4

Copyright © 2001-2021, Tencent Cloud.

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