四目观天下

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

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

[复制链接]
发表于 2024-4-3 08:34:47 | 显示全部楼层 |阅读模式
概述) o, n. i' Z" @
作为 MQL5 程序员或开发人员,我们发现我们需要很好地理解和使用策略测试器,才能获得有效的结果。 通过使用这款颇具价值的工具,我们可以获得有关我们所创建 MQL5 程序的性能的宝贵认知,这对获得更好的交易结果颇具影响。 故此,我们发现在进行测试之前,我们需要充分了解重要的主题,例如处理所有错误类型,因为作为开发人员,我们犯糊涂导致出错是很正常的。 我们还需要深刻理解的另一个主题是调试,它让我们以交互方式执行我们创建的程序。 然后,我们来到最重要和最有价值的工具,即策略测试器,用于测试和评估我们创建的程序,其功能比 MetaTrader 4 版本的更有趣。 因此,在本文中,学习使用 MQL5 策略测试器的最重要方面会是一次了不起的学习之旅
; t' i/ I3 a: s  e) U错误+ @) t9 @0 C9 C. ^
在本主题中,我们将学习在创建、执行和运行 MQL5 程序时可能发现的错误。 理解这个主题的一个要点是,MQL5 会正确报告这些错误,但如果我们不知道这些错误意味着什么,或者在程序的哪个阶段,相较于我们已经知道它们的含义,我们就要花费更多的时间来处理或解决它们。
+ H+ P$ e6 U* W我们将根据我们在 MQL5 程序上的工作阶段来讲述这个主题,在我们编写代码时,可能会遇到错误和警告,即编译错误和警告。 我们在执行 MQL5 程序时也可能会遇到运行时错误,当我们的 MQL5 程序尝试交易时,我们也可能会遇到其它类型的错误,即交易服务器错误。
! _3 s* |; ?+ ]$ N8 k左括号不平衡错误:
8 D' L1 f' z" M* |% Z* }3 C当我们缺少右括号、或多用了额外的右括号时,就会发生此类错误。 我们可以通过以下示例发现该错误。
# x$ B" |; x. j" A# g' K出错的错误代码:
( z. m6 l: H6 [6 W- \! `bool a=7;; q* b3 V9 F8 k( Q* ~
if (a=5
3 @' ^/ Z$ h4 C- f1 l* E, fa=5
5 n( X# r0 h+ R  J更正无错误代码:. E3 C# V9 \+ t2 G6 |+ N7 {/ G, I
bool a=7;
: V+ m" a" e  Y' _if (a=5)
# [' w6 u0 ^! ?* B$ Q2 va=5;( w) l4 P* n4 H+ S4 y/ n: o  E
更正代码后,我们会发现编译时没有错误。0 o& e( ]' N! I; {( C3 E
程序意外结束错误:! B' n, \& a) O
有时我们在代码中遗漏了一个右括号,继而发生意外的程序结束错误,我们必须检查我们的代码,查看需要添加的内容,或者我们需要确保每个左括号匹配一个右括号来解决此错误。 下面是该代码的示例。
. N' u9 _: z0 d9 R9 [' z9 T出错的错误代码:# A% M9 w0 N4 b( M" p! }
void OnStart()/ P* M! N6 A% `- T2 C( O( D" L3 l
{- l; E9 h, D2 F% q0 X/ x
bool a=7;
8 V! O8 F$ A" I! z' E1 X. n. Lif (a=5)
; u6 R. W3 F4 f# ^0 q, ^a=5;; D& v. E: o0 V0 p$ ]
更正无错误代码:( k7 [' @' I: }+ l1 \! L
void OnStart()
/ n" G6 j2 b" }0 U{- T  h% t9 \  z
bool a=7;$ Y% u6 Z, {  W  V
if (a=5)& C' }" T4 \/ J4 ]
a=5;
3 s3 E! \/ e5 n4 J# S7 I/ c) A( h}1 K$ S% Z8 C* ]0 a) i
添加右括号更正代码后,我们会发现代码成功编译没有错误。
7 U* E- ]: j5 i  X4 h表达式不允许出现在全局范围错误:
7 b; s8 C+ k$ ^" L; x9 l! D: i当我们在复合运算符中缺少左括号时,就会发生该错误,或者当我们在特定函数范围之外编写语句或表达式时,可能会发生该错误,因为我们只能在函数范围内使用表达式。 以下示例示意此类错误。
. U$ y8 x% _" L出错的错误代码:, ~1 {- s: e* W
int a=(7+5);7 j! O' Y+ i" E' j0 M/ X( u
if (a<7)
  Z3 g0 \  c2 q: r" ?2 z# q# Ja=7;
. M4 Z3 [9 G8 Z}
1 B7 _9 Z- W% o) p在前面的代码中,我们遗漏了与(})配对的起始({),故系统报告 “表达式不允许出现在全局范围” 错误。 以下是 “错误” 选项卡中的错误。
/ `; Q2 b7 ]7 G6 P- V3 B更正无错误代码:
4 p& M; `* q- [1 y, r1 K+ {4 [' Lint a=(7+5);
6 @9 p8 s( A) z8 L+ [8 u4 Mif (a<7)
3 _! N# t& {1 }: h{
' J4 W# `2 P% V+ Pa=7;
2 J# F4 O9 j( U% Y3 z}% c( M8 K# F0 }: r# ]
更正代码后,与前面的代码模块相同,我们会发现代码编译后没有任何错误。
' l% M; H0 p0 x- x5 D/ ^错误的参数计数错误:
5 {- _8 p* U2 P+ ]0 q6 O当我们用到拥有指定参数的特定函数时,若我们未正确指定这些参数,意即或多或少,我们会体验到这种类型的错误代码。 如果我们使用预定义的函数或我们创建的函数,则会出现此错误。 以下是该错误的示例。
. W: i* i1 r; _% A有错误的代码:
; |& G/ t5 Q: i+ `5 Q- p如果我们创建了一个 “myVal” 函数,返回两个整数值求和的结果,这意味着该函数中有两个参数? 故此,当我们调用此函数时传递个数的参数时,我们将得到此类错误,其与以下代码相同
1 }+ m; b( K8 w) G# O5 k( Lvoid OnStart()9 s9 c$ q' H! r6 ~, p+ a' T( C: o
{$ e( {5 c8 y% q; S, S
int example=myVal(10);4 }. ?- }" |" h# }) f5 }( I
}
- B- B) ?. o+ u6 P" x# ~//+------------------------------------------------------------------+* ^/ c; L) p6 h) W% o
int myVal(int a, int b)7 s5 N) l* B1 y' b
{
( \, k% n0 G, Xreturn a+b;4 T: I3 X' A1 L1 K0 A4 ]
}
5 I7 }; ~; [3 b' M, _无错误代码:
  R, b* T& d4 l7 b$ b: L为了正确编写此代码,我们需要为这个创建的函数传递相应个数的参数,如下所示
6 M( k  q. @3 i2 c  u; ]0 ~# tvoid OnStart()* }* y2 B7 Z7 [% L; K! T
{
  d( ~3 l! o) ^3 x. qint example=myVal(10,20);1 J3 n* b# @8 Z, _9 G9 {. |# d9 N
}
6 m1 k/ G, e8 \//+------------------------------------------------------------------+
  M& n8 H7 p3 x- \+ h& ~' Aint myVal(int a, int b)
# \' `& d+ O, q" r# {- y8 ]0 c{
7 d- e1 S4 r3 _6 v8 u8 Kreturn a+b;
0 b' G% y# v5 [. c6 r: a: Y/ _}
1 z  |0 M' h5 H8 l- i0 t编译此正确代码后,我们不会发现任何错误。. N; J6 W0 t4 k- K
某些操作符预期错误:
6 U0 _! p+ z% a2 q当我们在特定位置完全遗漏或放错操作符时,我们就会遇到这种类型的错误。 以下是该类错误的示例。
; v- a; L6 x0 h2 }/ y有错误的代码:
* }; `* ]! m4 p1 U0 _; ^7 ^  Xint a= 7 10;
http://www.simu001.cn/x287954x1x1.html
最好的私募社区 | 第一私募论坛 | http://www.simu001.cn

精彩推荐

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-7-22 23:22 , Processed in 2.033394 second(s), 31 queries .

Powered by www.simu001.cn X3.4

Copyright © 2001-2021, Tencent Cloud.

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