四目观天下

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

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

[复制链接]
发表于 2024-4-3 08:34:47 | 显示全部楼层 |阅读模式
概述
& L0 {) I# }7 W- p: d1 g# [3 i8 l作为 MQL5 程序员或开发人员,我们发现我们需要很好地理解和使用策略测试器,才能获得有效的结果。 通过使用这款颇具价值的工具,我们可以获得有关我们所创建 MQL5 程序的性能的宝贵认知,这对获得更好的交易结果颇具影响。 故此,我们发现在进行测试之前,我们需要充分了解重要的主题,例如处理所有错误类型,因为作为开发人员,我们犯糊涂导致出错是很正常的。 我们还需要深刻理解的另一个主题是调试,它让我们以交互方式执行我们创建的程序。 然后,我们来到最重要和最有价值的工具,即策略测试器,用于测试和评估我们创建的程序,其功能比 MetaTrader 4 版本的更有趣。 因此,在本文中,学习使用 MQL5 策略测试器的最重要方面会是一次了不起的学习之旅( d8 H* S& Q3 k6 E+ B; j0 n( X
错误5 a+ ~  a2 I+ N- |' e5 q  M
在本主题中,我们将学习在创建、执行和运行 MQL5 程序时可能发现的错误。 理解这个主题的一个要点是,MQL5 会正确报告这些错误,但如果我们不知道这些错误意味着什么,或者在程序的哪个阶段,相较于我们已经知道它们的含义,我们就要花费更多的时间来处理或解决它们。; A- t7 @* ^7 b. Q% g' a
我们将根据我们在 MQL5 程序上的工作阶段来讲述这个主题,在我们编写代码时,可能会遇到错误和警告,即编译错误和警告。 我们在执行 MQL5 程序时也可能会遇到运行时错误,当我们的 MQL5 程序尝试交易时,我们也可能会遇到其它类型的错误,即交易服务器错误。
' ~9 ^/ S9 o4 {' B8 F' E左括号不平衡错误:
' \# X% A7 a- R, F5 F" F: E. j* V当我们缺少右括号、或多用了额外的右括号时,就会发生此类错误。 我们可以通过以下示例发现该错误。
1 w6 ~' H, h6 i' S出错的错误代码:
/ c  B+ Z4 \  E# M. G% ?bool a=7;
8 p* t5 m0 O% a, Fif (a=5
; c3 Q! H0 U, L3 T7 ]. Aa=50 ~+ _* k  m/ ~
更正无错误代码:
: D/ D8 J' b' @7 p7 [) G* ]8 Pbool a=7;# e5 f3 r. Z; f0 \5 `
if (a=5)
) S. L+ l6 b9 Y4 ^. \0 I: M: |a=5;/ w! f) j, g0 ~1 R+ d
更正代码后,我们会发现编译时没有错误。
" @4 Q7 a: U) @# O8 f程序意外结束错误:
. A, W% Z  @, Y$ e有时我们在代码中遗漏了一个右括号,继而发生意外的程序结束错误,我们必须检查我们的代码,查看需要添加的内容,或者我们需要确保每个左括号匹配一个右括号来解决此错误。 下面是该代码的示例。
' S2 x' w1 i9 z! s, p出错的错误代码:
: R) h  }: d. Q$ h" i1 uvoid OnStart()
& A7 J+ `3 J% I: R/ x{2 s9 c8 i' [, ?2 c" d  c' u
bool a=7;
! P& M$ [# j1 S4 O1 Mif (a=5)
5 D3 c$ R) P5 ]7 h! Sa=5;/ t- x- E, m2 A- ]0 A8 M
更正无错误代码:
  p( g6 J2 Y- ~6 d/ R; M: j! d1 Fvoid OnStart()
" g- l: ?% L$ a. g4 m  r3 O{
- q6 v- o& g; l! V( K" A9 ^) E8 Nbool a=7;+ o# N. y4 g6 b$ B2 H
if (a=5)
$ @" _. z, C5 }- \a=5;2 f" V9 f$ x5 T
}
6 T- G9 f* o9 z0 d, \# }- L添加右括号更正代码后,我们会发现代码成功编译没有错误。# Z3 ^# p0 i* L( X% k: |$ q  D
表达式不允许出现在全局范围错误:
) H, G+ B9 E: D% H# A当我们在复合运算符中缺少左括号时,就会发生该错误,或者当我们在特定函数范围之外编写语句或表达式时,可能会发生该错误,因为我们只能在函数范围内使用表达式。 以下示例示意此类错误。
8 U: H5 U% K) X* I出错的错误代码:: o5 }0 r: C- z! ^; a
int a=(7+5);1 H; w( S( f& @6 G" i
if (a<7)
2 y# i7 C8 Y6 X" U8 I3 ^/ oa=7;
% [4 e6 z2 |4 m$ d5 D; U2 [}
/ e# ~$ f2 u5 z9 [7 Q/ T$ P在前面的代码中,我们遗漏了与(})配对的起始({),故系统报告 “表达式不允许出现在全局范围” 错误。 以下是 “错误” 选项卡中的错误。
* U* P: g" m% u- r更正无错误代码:
5 F( h6 q( p0 Xint a=(7+5);9 v4 U( o. s3 G' G: K9 z7 q* w
if (a<7)
* e8 @' _: U3 D. ]; _) d{
+ w$ D4 R+ {% A7 \- Q) ta=7;
% X. Z; E6 Y' Z! W# |+ i9 b* e' l}
! D2 U! H9 L; @* M) a* b更正代码后,与前面的代码模块相同,我们会发现代码编译后没有任何错误。
0 S) _  Y; E$ ]8 Z错误的参数计数错误:
  D( G, ?# j; G# l- X( C* b" H0 Q* c当我们用到拥有指定参数的特定函数时,若我们未正确指定这些参数,意即或多或少,我们会体验到这种类型的错误代码。 如果我们使用预定义的函数或我们创建的函数,则会出现此错误。 以下是该错误的示例。5 ^7 @3 W0 w8 t1 E$ g
有错误的代码:
" J- p& I6 k) ?如果我们创建了一个 “myVal” 函数,返回两个整数值求和的结果,这意味着该函数中有两个参数? 故此,当我们调用此函数时传递个数的参数时,我们将得到此类错误,其与以下代码相同
( V  q0 l8 |4 Vvoid OnStart()  F5 D1 B5 v9 ^/ o8 I
{" ^  Z* _1 ], G" \' C+ U
int example=myVal(10);9 |+ Z6 y1 ~* q7 o- ^% \
}
* ]2 Q' O9 Q5 ?7 q- L//+------------------------------------------------------------------+- M* s$ M" N  D0 c  T0 z7 _2 A' [1 n
int myVal(int a, int b)
# \6 J0 x$ N, H+ R{/ l; z4 d; a0 x8 @
return a+b;
+ W7 Y1 e3 o9 X8 Y7 m0 j4 @}: a+ V) v+ s" g
无错误代码:
8 x; y) n$ d3 C$ I为了正确编写此代码,我们需要为这个创建的函数传递相应个数的参数,如下所示& v4 U9 N1 O' s
void OnStart()
" x3 q8 H6 V6 _% S{- Y" V- u, M, J
int example=myVal(10,20);
9 Q2 i. b; D* H- B* T) t  h# x8 H}
0 v" M- X* g  P2 |( E//+------------------------------------------------------------------+
# M5 \+ B! f3 |/ xint myVal(int a, int b)1 m4 X5 E( M' G5 L4 _2 X1 I
{( G" p- s. g) {; Q8 ^8 [& R
return a+b;. N6 x4 [% C. q) Z8 }
}3 n- S. l2 T* b& Q" x
编译此正确代码后,我们不会发现任何错误。4 A4 C. R( u  ~: N7 O
某些操作符预期错误:
" k) R$ f# J1 J( f, J2 i, N当我们在特定位置完全遗漏或放错操作符时,我们就会遇到这种类型的错误。 以下是该类错误的示例。
, X& \! I+ y0 M7 L4 o  K有错误的代码:
4 b/ i! A! q! E' r1 oint a= 7 10;
http://www.simu001.cn/x287954x1x1.html
最好的私募社区 | 第一私募论坛 | http://www.simu001.cn

精彩推荐

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-7-28 01:41 , Processed in 5.333520 second(s), 32 queries .

Powered by www.simu001.cn X3.4

Copyright © 2001-2021, Tencent Cloud.

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