私募网

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

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

[复制链接]
发表于 2024-4-3 08:34:47 | 显示全部楼层 |阅读模式
概述
! l( R& w) e' q( a( |5 `作为 MQL5 程序员或开发人员,我们发现我们需要很好地理解和使用策略测试器,才能获得有效的结果。 通过使用这款颇具价值的工具,我们可以获得有关我们所创建 MQL5 程序的性能的宝贵认知,这对获得更好的交易结果颇具影响。 故此,我们发现在进行测试之前,我们需要充分了解重要的主题,例如处理所有错误类型,因为作为开发人员,我们犯糊涂导致出错是很正常的。 我们还需要深刻理解的另一个主题是调试,它让我们以交互方式执行我们创建的程序。 然后,我们来到最重要和最有价值的工具,即策略测试器,用于测试和评估我们创建的程序,其功能比 MetaTrader 4 版本的更有趣。 因此,在本文中,学习使用 MQL5 策略测试器的最重要方面会是一次了不起的学习之旅
( v. ~. y: S7 y5 }" v2 E0 S3 y4 Y6 c  Y错误
* [* p7 o/ n% n$ O在本主题中,我们将学习在创建、执行和运行 MQL5 程序时可能发现的错误。 理解这个主题的一个要点是,MQL5 会正确报告这些错误,但如果我们不知道这些错误意味着什么,或者在程序的哪个阶段,相较于我们已经知道它们的含义,我们就要花费更多的时间来处理或解决它们。
$ h6 b/ {# P8 I: _% E6 y  N# S我们将根据我们在 MQL5 程序上的工作阶段来讲述这个主题,在我们编写代码时,可能会遇到错误和警告,即编译错误和警告。 我们在执行 MQL5 程序时也可能会遇到运行时错误,当我们的 MQL5 程序尝试交易时,我们也可能会遇到其它类型的错误,即交易服务器错误。
% s3 P5 d: I5 C; s  |/ C左括号不平衡错误:) z- j* U! x0 W" b' I  e6 L. r
当我们缺少右括号、或多用了额外的右括号时,就会发生此类错误。 我们可以通过以下示例发现该错误。
2 H5 U( P) @! v4 H出错的错误代码:, e- {4 [3 r2 Y( M4 ~5 r! n
bool a=7;& k4 i- D+ `7 x" V
if (a=5
/ }* ^; }( Q; k( F1 d0 U4 ga=5
" Z0 R2 K( r' m- W, G更正无错误代码:
+ M1 D, M$ U2 c0 fbool a=7;
2 M, B$ b- s# S: uif (a=5)
. c5 B) L" i4 `  Y+ Y  Ja=5;  [! M1 V: a& r2 h! n# M
更正代码后,我们会发现编译时没有错误。
* }1 P* p" F6 t7 |6 O/ o程序意外结束错误:
/ C6 ~; Y. Q8 W6 G) d+ g/ v1 p  y6 m有时我们在代码中遗漏了一个右括号,继而发生意外的程序结束错误,我们必须检查我们的代码,查看需要添加的内容,或者我们需要确保每个左括号匹配一个右括号来解决此错误。 下面是该代码的示例。+ N7 m$ G3 j9 l# R3 ?- e
出错的错误代码:
, t; m- D: ]2 J' Jvoid OnStart()
& {! S" A6 I' B/ Q( {+ L0 w{
/ y6 }# W% h6 k8 ?- O+ Zbool a=7;
' _& e) H4 l3 K# Z, j8 E7 m3 cif (a=5)0 S& R0 F( G' w1 e* ]& w
a=5;- k" V; s; p, r7 c, F3 e5 b
更正无错误代码:
9 c: o9 o. U/ X/ g( h! Q4 h6 g5 dvoid OnStart()  G; h0 r. K8 V7 {
{6 j! ~6 b& H+ K+ ], m/ T
bool a=7;! n" ~% I" |# p8 M+ T
if (a=5)
; W1 O; t5 u1 la=5;
' M( O  C$ q4 s3 ^: c5 N5 M}$ l) b; ]0 z' K" y0 v5 S
添加右括号更正代码后,我们会发现代码成功编译没有错误。
$ z5 U2 h/ R. U8 L8 g表达式不允许出现在全局范围错误:" k! ~) k5 w% }+ o
当我们在复合运算符中缺少左括号时,就会发生该错误,或者当我们在特定函数范围之外编写语句或表达式时,可能会发生该错误,因为我们只能在函数范围内使用表达式。 以下示例示意此类错误。
5 g% u0 b. `) Y) y出错的错误代码:% E# t+ q9 V/ |% L
int a=(7+5);& W& z$ D' o$ \) K7 W
if (a<7)2 i4 f: r9 r; e
a=7;
8 ]5 P& A$ L5 ?8 m& z}
6 l, B! Q. `4 W; u1 w8 E在前面的代码中,我们遗漏了与(})配对的起始({),故系统报告 “表达式不允许出现在全局范围” 错误。 以下是 “错误” 选项卡中的错误。
5 n; A5 L! i+ Q: B: o更正无错误代码:& A' |) Z3 _4 k  {, g1 ^! R' ]
int a=(7+5);
3 b6 {# _9 s2 V" nif (a<7)
. q. u3 u$ a, |& v: u" z& b{4 O+ R3 F8 J; o. V8 m% r) G. j
a=7;2 S# `8 Z6 J: E" n- J5 t
}
. }3 p$ J8 }5 b4 x3 H, [' ^更正代码后,与前面的代码模块相同,我们会发现代码编译后没有任何错误。
; k9 \. M9 p' h( Q, S  s  @错误的参数计数错误:, A# I4 E( f- @" t
当我们用到拥有指定参数的特定函数时,若我们未正确指定这些参数,意即或多或少,我们会体验到这种类型的错误代码。 如果我们使用预定义的函数或我们创建的函数,则会出现此错误。 以下是该错误的示例。' U9 C+ A( d& O. Z1 {
有错误的代码:; ~5 i! ~1 s! n4 C+ r* A+ n
如果我们创建了一个 “myVal” 函数,返回两个整数值求和的结果,这意味着该函数中有两个参数? 故此,当我们调用此函数时传递个数的参数时,我们将得到此类错误,其与以下代码相同% ~7 a/ [( F( e, h3 z2 L, T+ y
void OnStart()2 q1 _, G* D( p+ U$ O6 p  t
{
% j& M7 Y1 ~" h9 D6 a* Pint example=myVal(10);9 ~; m' A2 I7 _' u2 b% v5 D
}- |9 ~. w' G, b3 I6 {
//+------------------------------------------------------------------+  j% ^' @/ R9 d' h$ ]
int myVal(int a, int b)
( A7 U( s0 r1 Q  P1 D{4 w" `# h4 p) l  Y! o! y7 w
return a+b;
2 D; Q7 ~% w% }0 F5 Y+ X8 b}
2 i4 n* U- d- C) f9 n无错误代码:( X. o* V+ y5 Q+ E
为了正确编写此代码,我们需要为这个创建的函数传递相应个数的参数,如下所示
2 K- J3 A: _4 N/ q: Xvoid OnStart()! ?- F8 i; E  ?5 _0 M: |
{
- m4 l( B- C5 Z! {% bint example=myVal(10,20);( X9 c1 X$ S# U" c9 O
}
/ }+ @5 p( B/ y+ c//+------------------------------------------------------------------+; c# A4 M; `  c- n% j
int myVal(int a, int b)
* d$ x, G4 n* U  _. @/ Y6 T{+ H) G' v9 V9 N
return a+b;
4 L. q  S( Y" \" f' b% e8 d5 C( ~1 E( m}
7 W4 R: r, x9 v; T编译此正确代码后,我们不会发现任何错误。! F, E8 k- c4 T% Q
某些操作符预期错误:- {% ]' p7 V2 w1 T, H1 @
当我们在特定位置完全遗漏或放错操作符时,我们就会遇到这种类型的错误。 以下是该类错误的示例。; ~5 J- V2 Y, x
有错误的代码:3 n8 u$ }- E# C) h+ U
int a= 7 10;
http://www.simu001.cn/x287954x1x1.html
最好的私募社区 | 第一私募论坛 | http://www.simu001.cn

精彩推荐

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-6-3 15:28 , Processed in 0.418807 second(s), 32 queries .

Powered by www.simu001.cn X3.4

Copyright © 2001-2021, Tencent Cloud.

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