四目观天下

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

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

[复制链接]
发表于 2024-4-3 08:34:47 | 显示全部楼层 |阅读模式
概述$ e" j) ]3 t4 t6 M2 D
作为 MQL5 程序员或开发人员,我们发现我们需要很好地理解和使用策略测试器,才能获得有效的结果。 通过使用这款颇具价值的工具,我们可以获得有关我们所创建 MQL5 程序的性能的宝贵认知,这对获得更好的交易结果颇具影响。 故此,我们发现在进行测试之前,我们需要充分了解重要的主题,例如处理所有错误类型,因为作为开发人员,我们犯糊涂导致出错是很正常的。 我们还需要深刻理解的另一个主题是调试,它让我们以交互方式执行我们创建的程序。 然后,我们来到最重要和最有价值的工具,即策略测试器,用于测试和评估我们创建的程序,其功能比 MetaTrader 4 版本的更有趣。 因此,在本文中,学习使用 MQL5 策略测试器的最重要方面会是一次了不起的学习之旅8 x/ G( p# G! I# s/ l6 E6 Q
错误7 X3 _0 X) @* H
在本主题中,我们将学习在创建、执行和运行 MQL5 程序时可能发现的错误。 理解这个主题的一个要点是,MQL5 会正确报告这些错误,但如果我们不知道这些错误意味着什么,或者在程序的哪个阶段,相较于我们已经知道它们的含义,我们就要花费更多的时间来处理或解决它们。
! H2 D4 {% `" M; a8 l: T我们将根据我们在 MQL5 程序上的工作阶段来讲述这个主题,在我们编写代码时,可能会遇到错误和警告,即编译错误和警告。 我们在执行 MQL5 程序时也可能会遇到运行时错误,当我们的 MQL5 程序尝试交易时,我们也可能会遇到其它类型的错误,即交易服务器错误。4 E# ]5 I0 {6 V3 D  `: i/ e$ L* j4 E
左括号不平衡错误:4 ~6 t- T$ x9 {( x. ^" a
当我们缺少右括号、或多用了额外的右括号时,就会发生此类错误。 我们可以通过以下示例发现该错误。
" C" L" r0 g( W& ?出错的错误代码:$ H8 a9 C/ W$ \3 q! `% W
bool a=7;
9 j2 ^& K9 N5 n1 C$ Fif (a=5) {* v- f! e- \9 y. r! S7 c' Y
a=5
! y$ _+ G. F7 B7 m2 U更正无错误代码:; Z' ]$ Y) E9 `! v5 J: s% e2 s
bool a=7;
2 H9 s' Q2 `# t( {if (a=5)! Z* X& q& m4 X( o5 _
a=5;# @; C- s8 o& a) e
更正代码后,我们会发现编译时没有错误。; ?3 s, Z4 t, Z  t0 R3 E& n- s& E3 [" M
程序意外结束错误:5 E% n# D+ f6 u
有时我们在代码中遗漏了一个右括号,继而发生意外的程序结束错误,我们必须检查我们的代码,查看需要添加的内容,或者我们需要确保每个左括号匹配一个右括号来解决此错误。 下面是该代码的示例。
; E( @9 j  f. D出错的错误代码:, L7 G. [  j0 H% R0 L
void OnStart(); W: B! `( ?6 ~1 y# `& h- [
{
% t+ P+ k; I2 O4 qbool a=7;2 Z; W: x9 z4 J4 o
if (a=5)2 _5 o6 |# @5 X' f8 l7 N
a=5;4 j9 Q: t: Y, u+ l0 i
更正无错误代码:
; w+ Z2 Y$ x% N. m1 c6 H. cvoid OnStart()! Q' V2 t) y& ^. u% d( w* _
{. h  p- ]0 I8 }2 T3 ]! w1 X$ J  c
bool a=7;
2 h( R0 {! C: v7 q" Vif (a=5)/ h$ ~+ V) r2 L( x  t0 ?
a=5;
% ?) n& O, t4 a+ {2 R6 a}
: r$ A' @/ k' m  |4 M$ X添加右括号更正代码后,我们会发现代码成功编译没有错误。
7 S1 V. H+ a8 {4 {. y表达式不允许出现在全局范围错误:& e. j! X1 R; z; i( A0 a2 ^" }) s
当我们在复合运算符中缺少左括号时,就会发生该错误,或者当我们在特定函数范围之外编写语句或表达式时,可能会发生该错误,因为我们只能在函数范围内使用表达式。 以下示例示意此类错误。
' A1 H. P0 y: P; h: }2 M出错的错误代码:
0 a' V6 k/ N7 Z& Y9 P( L' Tint a=(7+5);0 `7 @0 _+ A5 E. e; W
if (a<7)
: {" q# o5 f4 \8 x4 ia=7;% y6 i6 |* G1 l2 q; h- [) H  y: p$ |
}. v6 j6 r% |# P* y, {
在前面的代码中,我们遗漏了与(})配对的起始({),故系统报告 “表达式不允许出现在全局范围” 错误。 以下是 “错误” 选项卡中的错误。2 P; W, M/ q- k
更正无错误代码:8 O; |# E6 B4 f
int a=(7+5);# P2 X1 s1 Z( L  t
if (a<7)
4 m/ F0 n- Z9 y& |# J2 D{
7 I# [: p9 d" W& N; A( Z/ ?4 na=7;) S1 T5 y8 k7 k9 f* K5 H8 `0 z/ |$ ^
}1 k( w1 H1 B% ]/ B. t# Q* R, @* Q2 d
更正代码后,与前面的代码模块相同,我们会发现代码编译后没有任何错误。
3 k  Z! E* v/ F错误的参数计数错误:: E. C, r* f# C6 y2 Z6 H
当我们用到拥有指定参数的特定函数时,若我们未正确指定这些参数,意即或多或少,我们会体验到这种类型的错误代码。 如果我们使用预定义的函数或我们创建的函数,则会出现此错误。 以下是该错误的示例。
; N# i' J' o! m; ]: n* ?" T有错误的代码:3 ]: h( B' ^4 L5 L+ b
如果我们创建了一个 “myVal” 函数,返回两个整数值求和的结果,这意味着该函数中有两个参数? 故此,当我们调用此函数时传递个数的参数时,我们将得到此类错误,其与以下代码相同
3 C0 f5 M& O9 j7 `1 {+ Ivoid OnStart()
4 q% I. z9 R# j- C* M{! Y: A8 E2 V1 W, [
int example=myVal(10);
- A& x7 m; E* y8 g( |}
9 |" @, s) v0 `. o- B//+------------------------------------------------------------------+
& I$ [7 Y3 j" h. _1 _. `int myVal(int a, int b)
: ~& @  g. J- n( Z: r0 Q& q{
( {  y6 H6 e- s8 e. |8 }return a+b;! {3 u6 v7 S4 Y  G/ F! b9 T
}' Y4 [/ Y" @$ D
无错误代码:
. J, Q% n5 R& t5 k3 @# j* y为了正确编写此代码,我们需要为这个创建的函数传递相应个数的参数,如下所示5 F4 {+ M* @7 j6 b. Z
void OnStart()
- U! ~$ ?0 u6 Y' V. i# p{& b4 [! f3 x6 p5 q7 u" n
int example=myVal(10,20);
" _0 |2 T. j, k0 G  ^}
: T. a( W5 X2 n: t' H) w: Z//+------------------------------------------------------------------+$ p- L2 \* }7 j# q9 M: X/ x
int myVal(int a, int b)
# f. G! o, b* p% a% _8 W{
, q. ]* v) m5 ~% }return a+b;
' s. K3 d, _7 T  G% a. E; x' l}6 K5 [) k* C5 t8 D
编译此正确代码后,我们不会发现任何错误。) M4 I% d9 L2 r4 S+ T. x# |2 X) M. W
某些操作符预期错误:
! {6 D" Q4 {3 `当我们在特定位置完全遗漏或放错操作符时,我们就会遇到这种类型的错误。 以下是该类错误的示例。
+ ^+ L2 d4 ~2 L, J- w& E7 N% j有错误的代码:
7 M2 G- x; k$ Y% t# {int a= 7 10;
http://www.simu001.cn/x287954x1x1.html
最好的私募社区 | 第一私募论坛 | http://www.simu001.cn

精彩推荐

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-7-21 23:17 , Processed in 1.261913 second(s), 32 queries .

Powered by www.simu001.cn X3.4

Copyright © 2001-2021, Tencent Cloud.

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