私募

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

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

[复制链接]
发表于 2024-4-3 08:34:47 | 显示全部楼层 |阅读模式
概述
) V4 i3 l( J) `" V: a7 D; X作为 MQL5 程序员或开发人员,我们发现我们需要很好地理解和使用策略测试器,才能获得有效的结果。 通过使用这款颇具价值的工具,我们可以获得有关我们所创建 MQL5 程序的性能的宝贵认知,这对获得更好的交易结果颇具影响。 故此,我们发现在进行测试之前,我们需要充分了解重要的主题,例如处理所有错误类型,因为作为开发人员,我们犯糊涂导致出错是很正常的。 我们还需要深刻理解的另一个主题是调试,它让我们以交互方式执行我们创建的程序。 然后,我们来到最重要和最有价值的工具,即策略测试器,用于测试和评估我们创建的程序,其功能比 MetaTrader 4 版本的更有趣。 因此,在本文中,学习使用 MQL5 策略测试器的最重要方面会是一次了不起的学习之旅
0 }# i% F5 Z9 D/ y6 A2 @错误
: ^+ x( W& P  A6 e; W6 C  v) Y在本主题中,我们将学习在创建、执行和运行 MQL5 程序时可能发现的错误。 理解这个主题的一个要点是,MQL5 会正确报告这些错误,但如果我们不知道这些错误意味着什么,或者在程序的哪个阶段,相较于我们已经知道它们的含义,我们就要花费更多的时间来处理或解决它们。
, {1 Z  M6 N! }% U$ a我们将根据我们在 MQL5 程序上的工作阶段来讲述这个主题,在我们编写代码时,可能会遇到错误和警告,即编译错误和警告。 我们在执行 MQL5 程序时也可能会遇到运行时错误,当我们的 MQL5 程序尝试交易时,我们也可能会遇到其它类型的错误,即交易服务器错误。
  A) O+ k+ Z5 b! T. i左括号不平衡错误:7 Z  @2 {( A+ _4 B: A( R4 y/ [
当我们缺少右括号、或多用了额外的右括号时,就会发生此类错误。 我们可以通过以下示例发现该错误。- _) Q, R- T( R' \! b. K
出错的错误代码:
/ e) v0 i% G# e7 |$ e& Sbool a=7;
! Y3 H3 n$ D8 u  ?1 I% T' bif (a=5
: H0 k8 Z9 p, n# Wa=50 T: d' M+ [7 F  w9 m! i, g
更正无错误代码:
7 T0 M7 Y) ?3 o' Rbool a=7;
$ ]% U% Z3 D; v- G: e: j) yif (a=5)3 t. Y7 A6 O2 [5 ~" r% [7 D9 O
a=5;
/ z( @- n* b( H- q7 q更正代码后,我们会发现编译时没有错误。1 [3 v" L+ Q  K5 `$ @0 w7 G. d, k8 r
程序意外结束错误:  Z0 a+ l2 S; I
有时我们在代码中遗漏了一个右括号,继而发生意外的程序结束错误,我们必须检查我们的代码,查看需要添加的内容,或者我们需要确保每个左括号匹配一个右括号来解决此错误。 下面是该代码的示例。5 e' M; E0 k4 \6 G
出错的错误代码:. l) c' g. A& n9 ^4 @0 D4 X
void OnStart()+ z3 G* Q5 u) I
{
2 e& k; l6 P- X* R/ ?2 _3 F5 Rbool a=7;
4 r2 Q% B/ \6 ]if (a=5)3 n! G) q+ G( N5 k5 N# L
a=5;  u" T% R8 l+ `! q
更正无错误代码:8 }0 P( t7 P: c: j* y
void OnStart()5 g# N# ~5 ^$ P7 z5 q
{
; G( ~+ F- T4 e' k8 G0 |, `/ j4 qbool a=7;
/ [% P+ o+ H/ J/ M8 t. Dif (a=5): h: f1 r7 v, ]1 \7 o5 c3 n
a=5;3 x, y$ F0 h3 J8 P* J( p
}
. @1 p7 r8 t! v) j3 Z( q: o$ L1 p添加右括号更正代码后,我们会发现代码成功编译没有错误。
% B6 v3 B0 ]5 z1 K( F) X" t. S表达式不允许出现在全局范围错误:: P4 c3 C9 u6 @: v2 @' u& Z  f  @  e
当我们在复合运算符中缺少左括号时,就会发生该错误,或者当我们在特定函数范围之外编写语句或表达式时,可能会发生该错误,因为我们只能在函数范围内使用表达式。 以下示例示意此类错误。" J, D$ w  ~- E% f
出错的错误代码:1 E) W( ^/ j! ~
int a=(7+5);
/ Q5 E1 }* M5 q. W  xif (a<7)) l) M; Z) U/ y% m
a=7;
8 H; \& F+ b/ v6 m" d}
& s  m! D! d5 X4 l; w. N在前面的代码中,我们遗漏了与(})配对的起始({),故系统报告 “表达式不允许出现在全局范围” 错误。 以下是 “错误” 选项卡中的错误。
  i' A5 M1 H- _0 W4 ?更正无错误代码:
& A" ?4 G5 m; [% d' T: u/ Uint a=(7+5);
4 N8 T# b3 L: F0 m1 y, s" Tif (a<7); ^. g' |! i9 t% m/ L: ~% E, J
{
4 A+ T3 X1 Y' J  @9 w$ j- Ea=7;7 g6 ]: Y8 O" J( ^) {
}8 B% y6 }# N& c/ T. Z
更正代码后,与前面的代码模块相同,我们会发现代码编译后没有任何错误。% X. I- Y% X' T% m* D
错误的参数计数错误:& Z  x" r) I! z- a# O- B
当我们用到拥有指定参数的特定函数时,若我们未正确指定这些参数,意即或多或少,我们会体验到这种类型的错误代码。 如果我们使用预定义的函数或我们创建的函数,则会出现此错误。 以下是该错误的示例。
8 G6 z# H9 I3 b+ K2 A有错误的代码:+ m4 S$ I) \# ]8 O
如果我们创建了一个 “myVal” 函数,返回两个整数值求和的结果,这意味着该函数中有两个参数? 故此,当我们调用此函数时传递个数的参数时,我们将得到此类错误,其与以下代码相同
* Q) p! F6 {2 b# y' g% l  jvoid OnStart()
( m4 P, g! W! {# c{
( W9 t* ~: U: r+ ^4 d+ }int example=myVal(10);8 s: x7 p! _  w7 D
}% r. M: |- B1 P
//+------------------------------------------------------------------+) i/ z6 i( Y" X; p
int myVal(int a, int b)
4 `) n. o# y& `8 `( |5 h{, {8 o# U6 O5 F9 D, j2 T# X
return a+b;
& s+ {* q6 v  S! U! ~2 [+ \1 r}8 Z3 n" O; H* r  n5 w3 g3 h
无错误代码:/ u( A' D  k4 b1 ]. P0 f7 O
为了正确编写此代码,我们需要为这个创建的函数传递相应个数的参数,如下所示
; R; {) Z1 c2 [4 Nvoid OnStart()( @$ o& C: Y7 _3 d
{
0 F5 m/ z8 M9 {5 I) a. q$ xint example=myVal(10,20);
0 F# b) ~0 i0 o" W) m}
/ Z/ `6 t$ B% s6 s//+------------------------------------------------------------------+4 W6 a) r1 e4 Z) i$ s* n6 k
int myVal(int a, int b)
- t- G$ |1 Y' }{
* s6 U: p) ^- `return a+b;0 o, b, Q: \1 |3 e+ l% P
}
% g! t% d8 K) I, N* O5 ^+ i编译此正确代码后,我们不会发现任何错误。8 l" Q: y% M* b5 _; H
某些操作符预期错误:" I' I6 _% C1 `- k
当我们在特定位置完全遗漏或放错操作符时,我们就会遇到这种类型的错误。 以下是该类错误的示例。% ^+ N  _; v, t6 x/ o* R$ K3 v
有错误的代码:1 c, R; L" x' N9 X" L. U
int a= 7 10;
http://www.simu001.cn/x287954x1x1.html
最好的私募社区 | 第一私募论坛 | http://www.simu001.cn

精彩推荐

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-10 20:21 , Processed in 2.569282 second(s), 32 queries .

Powered by www.simu001.cn X3.4

Copyright © 2001-2021, Tencent Cloud.

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