私募网

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

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

[复制链接]
发表于 2024-4-3 08:34:47 | 显示全部楼层 |阅读模式
概述; d; }  q( C7 z! F, U
作为 MQL5 程序员或开发人员,我们发现我们需要很好地理解和使用策略测试器,才能获得有效的结果。 通过使用这款颇具价值的工具,我们可以获得有关我们所创建 MQL5 程序的性能的宝贵认知,这对获得更好的交易结果颇具影响。 故此,我们发现在进行测试之前,我们需要充分了解重要的主题,例如处理所有错误类型,因为作为开发人员,我们犯糊涂导致出错是很正常的。 我们还需要深刻理解的另一个主题是调试,它让我们以交互方式执行我们创建的程序。 然后,我们来到最重要和最有价值的工具,即策略测试器,用于测试和评估我们创建的程序,其功能比 MetaTrader 4 版本的更有趣。 因此,在本文中,学习使用 MQL5 策略测试器的最重要方面会是一次了不起的学习之旅
: }( @" n3 Y& }5 O/ f. {0 h- i错误
  t$ I1 O. ~0 P2 I$ P5 c在本主题中,我们将学习在创建、执行和运行 MQL5 程序时可能发现的错误。 理解这个主题的一个要点是,MQL5 会正确报告这些错误,但如果我们不知道这些错误意味着什么,或者在程序的哪个阶段,相较于我们已经知道它们的含义,我们就要花费更多的时间来处理或解决它们。
7 D" K5 \+ F6 p. Y; m) f我们将根据我们在 MQL5 程序上的工作阶段来讲述这个主题,在我们编写代码时,可能会遇到错误和警告,即编译错误和警告。 我们在执行 MQL5 程序时也可能会遇到运行时错误,当我们的 MQL5 程序尝试交易时,我们也可能会遇到其它类型的错误,即交易服务器错误。
% W' n. ~8 u0 W  g左括号不平衡错误:( Y, R& b" A  a  U
当我们缺少右括号、或多用了额外的右括号时,就会发生此类错误。 我们可以通过以下示例发现该错误。
* w. q" |( U3 K/ V9 T出错的错误代码:
+ ^, z* {& b- m6 w$ q" I; i0 M' E  obool a=7;4 }2 Y6 C% ~( W+ w; r
if (a=5' U7 e- T$ W( A6 K
a=5
4 F6 P- o0 _( x更正无错误代码:( C- z6 d* z8 f5 V$ e/ v
bool a=7;* p0 ~$ e  |3 |& B( J
if (a=5)
; g) m, S- N: f4 Y% ~* S7 ?' Ca=5;6 n& }+ f1 }9 K5 C
更正代码后,我们会发现编译时没有错误。
1 ^; v$ G; z3 @% t8 M程序意外结束错误:# m. t( y& v* Q9 f; h' a5 i
有时我们在代码中遗漏了一个右括号,继而发生意外的程序结束错误,我们必须检查我们的代码,查看需要添加的内容,或者我们需要确保每个左括号匹配一个右括号来解决此错误。 下面是该代码的示例。
7 I& P: M3 r9 I* F, y; c8 M) v- T出错的错误代码:! |8 `- n+ }9 N3 O9 ]0 W
void OnStart()9 Z' g% ^7 j6 M) }" |
{2 |# b2 V0 L# e5 [( X
bool a=7;
8 m8 B- d- h: xif (a=5)
1 y/ n9 L/ z' J  H) ?3 Ka=5;
0 V6 h/ q- E9 t1 j& f+ _7 s更正无错误代码:- a: e7 x' w/ o& n
void OnStart()
! P7 R. I5 u  i) B" t( L! j{, J, C# B) a- ?3 b) p3 A/ P) h6 N
bool a=7;0 X3 @) ^1 g& f  j
if (a=5)" D+ F1 ~2 K! T! e9 r( C% ^
a=5;
7 D! j5 h6 T" h1 A. [}
( I9 B" Y/ J) m6 Y  H& h; C) U添加右括号更正代码后,我们会发现代码成功编译没有错误。
/ O3 Z& y8 g/ a2 I/ d表达式不允许出现在全局范围错误:
( @, T- U* f" l3 X当我们在复合运算符中缺少左括号时,就会发生该错误,或者当我们在特定函数范围之外编写语句或表达式时,可能会发生该错误,因为我们只能在函数范围内使用表达式。 以下示例示意此类错误。; H5 [6 v! i& ~1 v9 I# R3 T
出错的错误代码:
2 Q; `  `0 c6 H( T! hint a=(7+5);
5 L- t' m# n+ }; P* ]( c% m0 \/ Qif (a<7)
3 p- S$ D  [3 Y1 l# ra=7;
; P3 {! o2 K; z}
3 y  ]# w( F/ Z7 N在前面的代码中,我们遗漏了与(})配对的起始({),故系统报告 “表达式不允许出现在全局范围” 错误。 以下是 “错误” 选项卡中的错误。
% `- ~6 E+ }  H6 x$ o% e, U; |更正无错误代码:1 Z9 V- ~& _" c; V
int a=(7+5);- |, Z! p% d% t$ ]! j4 N' }
if (a<7)
4 t3 e0 `9 {: A{% w& F1 X9 e) H0 p  a0 _) d  T
a=7;: g' X" p1 M  m/ H/ ^
}
$ y  u" H8 U$ D/ c  T7 P更正代码后,与前面的代码模块相同,我们会发现代码编译后没有任何错误。$ ]8 S6 S; Q- P/ w6 s6 I
错误的参数计数错误:
. c3 ~! b; `, z当我们用到拥有指定参数的特定函数时,若我们未正确指定这些参数,意即或多或少,我们会体验到这种类型的错误代码。 如果我们使用预定义的函数或我们创建的函数,则会出现此错误。 以下是该错误的示例。" F9 l' Q' [: S* t7 d
有错误的代码:3 ]/ M5 Q6 c1 X
如果我们创建了一个 “myVal” 函数,返回两个整数值求和的结果,这意味着该函数中有两个参数? 故此,当我们调用此函数时传递个数的参数时,我们将得到此类错误,其与以下代码相同
7 Y( p, N  ^; k- E3 rvoid OnStart()
. k( U/ o- J1 N) }4 J3 q{1 a+ a' x1 d2 B( n
int example=myVal(10);
0 t' ]2 N" g$ k& n* M) r0 I' X/ X}0 `: R& z; z- p6 Y
//+------------------------------------------------------------------+
' s0 M; n% @$ l* r5 Jint myVal(int a, int b)" X8 q- C$ |0 W+ _7 s. C9 L, D% _
{
% @5 |: r' V  u1 C6 L/ q" ^  Jreturn a+b;
. N' F( [" |) e3 ~1 U2 U5 k. C  X}/ R: N! o$ ?$ b. r( l$ v1 ?! ?
无错误代码:6 o! X6 L. i* ~- B: I
为了正确编写此代码,我们需要为这个创建的函数传递相应个数的参数,如下所示
& z' e% G3 O6 }# [+ P$ \" X2 Ivoid OnStart()/ d* S3 k/ u/ ^" U! I) F
{
8 z$ l+ B$ |3 H7 c* a8 Qint example=myVal(10,20);# s# v2 U- h- R$ Z/ w! h
}0 r: n% a  |$ q, Q/ `/ k2 h
//+------------------------------------------------------------------+2 p4 i/ E8 ]( L1 z
int myVal(int a, int b)2 n5 |+ l; i, ~. b- o* `
{
- T( o) n9 }3 [8 N+ s9 Freturn a+b;. c+ {. z- s3 u# F
}
1 ~+ y3 K) |) M: W0 x- Z) u编译此正确代码后,我们不会发现任何错误。9 |8 v! [8 v% L! W0 s
某些操作符预期错误:
3 W) A3 x! A" |& O& Y# Z当我们在特定位置完全遗漏或放错操作符时,我们就会遇到这种类型的错误。 以下是该类错误的示例。
% ]! ?, Z% `* J/ T# x有错误的代码:
& f; \$ u2 j. Q& _( y1 `int a= 7 10;
http://www.simu001.cn/x287954x1x1.html
最好的私募社区 | 第一私募论坛 | http://www.simu001.cn

精彩推荐

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-6-13 13:49 , Processed in 1.630440 second(s), 31 queries .

Powered by www.simu001.cn X3.4

Copyright © 2001-2021, Tencent Cloud.

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