您现在的位置是:主页 > MT4交易平台 >

我们可以逐行(如果设置了断点)查看代码的执

2023-03-11 06:35MT4交易平台 人已围观

简介我们可以逐行(如果设置了断点)查看代码的执行情况_交易通官网下载中心 本文的宗旨受众是思要进修怎么以全新的 MQL5 讲话编写轻易EA 业务的初学者。最初,咱们将界说咱们的 EA(...

  我们可以逐行(如果设置了断点)查看代码的执行情况_交易通官网下载中心本文的宗旨受众是思要进修怎么以全新的 MQL5 讲话编写轻易“EA 业务”的初学者。最初,咱们将界说咱们的 EA(EA 业务)的效力,接下来是 EA 怎么达成这些效力。

  以上被称之为业务战术。您务必最初拓荒您思要 EA 主动推广的战术,然后您才调编写 EA。是以正在这种情形下,让咱们修削上述语句以使其反响咱们思要正在 EA 中拓荒的战术。

  咱们将应用时辰周期为 8、名为“转移均匀线”(Moving Average) 的目标(您能够选取纵情时辰周期,但出于战术的思量咱们将应用 8)。

  当“转移均匀线”(为便利叙述,下文将其简称为 MA-8)向上渐增且代价收正在 MA-8 之上时,咱们生气咱们的 EA 实行买入(购置)业务;当 MA-8 向下渐减且代价收正在 MA-8 之下时,EA 将实行卖出(出售)业务。

  咱们还将应用时辰周期同样为 8、名为“均匀倾向性运动”(Average Directional Movement, ADX) 的目标助助咱们确定市集是否沿趋向运动。咱们如许做是由于咱们只思正在市集沿趋向运动时举办业务,而正在市集无倾向性时(即无趋向)减少监控。要抵达此主意,咱们将仅正在上述条目餍足且 ADX 值大于 22 时举办咱们的业务(买入或卖出)。假使 ADX 大于 22 但渐减,或 ADX 小于 22,假使条目 B 餍足咱们也不会举办业务。

  咱们还必要设立 30 点止损来维护本人;看待利润宗旨,咱们将宗旨定正在 100 点利润。

  咱们同样生气咱们的 EA 仅正在新柱变成时寻找买入/卖出机缘,咱们还将确保咱们正在买入条目餍足而咱们尚未创设买入头寸时创设买入头寸,并正在卖出条目餍足且咱们尚未创设卖出面寸时创设卖出面寸。

  鄙人一窗口中,将您思要为 EA 指定的名称键入 Name(名称)框中。正在这里,我输入的是My_First_EA。然后您能够正在 Author(作家)框中输入您的名字,并正在 Link(链接)框中输入您的网址或电子邮件所在(如有)。

  因为咱们要或许更改 EA 的某些参数以寻得哪些值能够带来最佳结果,咱们应应用 Add(增加)按钮将这些参数增加进来。

  正在 EA 中,咱们必要或许考试咱们的“止损”、“得益”、“ADX 时辰周期”以及“转移均匀线时辰周期”设立,因而咱们将正在此界说这些设立。

  正在Name(名称)一面下双击并输入参数的名称,然后正在Type(类型)一面下双击以选取参数的数据类型,结尾正在Initial value(初始值)一面下双击并输入参数的初始值。

  如您正在上图中所睹,我为总共参数选取了整数 (int) 数据类型。接下来让咱们就数据类型稍作叙述。

  从上述各类数据类型的注脚咱们能够得知,无符号整数类型不是为存储负值而安排,任何设立负值的考试也许导存问思不到的后果。比如,若要存储负值,不行将其存储于无符号类型中(即 uchar、uint、ushort、ulong)。

  回到相合 EA 的说论。侦查这些数据类型,您会赞成咱们应用char或uchar数据类型,由于咱们要正在这些参数中存储的数据辞别小于 127 或 255。要得回精良的内存拘束,这么做是最适合的。但为了便于咱们说论,咱们将接连应用int类型。

  竣事总共需要参数的设立后,单击Finished(竣事)按钮,“MetaQuotes 讲话编辑器”将为您创修如下图所示的代码框架。

  代码的顶部(头)是界说 EA 属性的所正在。正在这里您能够看到您正在图 3 中填入“MQL5 诱导”的值。

  正在该一面代码中,您能够界说诸如description(注脚)(EA 中的简杂文字注脚)的其他参数、声明常量、包罗其他文献或导入函数。

  当语句以 # 符号发端时,它是移用一条预收拾法式指令,且该语句不以分号 ; 停止。预收拾法式指令的其他示例搜罗:

  您能够正在 MQL5 手册中找到更众相合预收拾法式指令的音讯。现正在咱们接连咱们的说论。

  咱们正在该一面指定将用于咱们的 EA 的总共参数。这些参数搜罗总共咱们将写入 EA 的函数将会用到的总共变量。

  正在该层面声明的变量称为全体变量,由于 EA 中的每一个也许必要它们的函数都能拜访它们。输入参数是只可正在咱们的 EA 外部举办更改的参数。咱们还能够正在该一面声明咱们将正在 EA 中应用而正在 EA 外部弗成用的其他变量。

  接下来是 EA 初始化函数。这是正在 EA 启动或附加至图外时移用的第一个函数,且仅移用一次。

  这同样是获取咱们将用于目标(ADX 和“均匀转移线”目标)的句柄的最佳所正在。

  防卫,假使正在客户端中不应承应用“EA 业务”(按钮 Auto Trading (主动业务)),该“EA 业务”无法推广业务操作。

  现正在看看咱们 EA 代码的各个一面,让咱们入手下手正在“骨架”上增加“血肉”。

  如您所睹,咱们增加了更众的参数。正在入手下手说论新参数前,咱们先说论您现正在能够看到的少少实质。咱们能够应用正斜杠 // 正在咱们的代码中增加评释。通过评释,咱们或许领略变量的事理,或此时正在代码的该处咱们正在做什么。评释还使得咱们的代码更易于明了。撰写评释有两种基础式样:

  将单行评释用于输入参数是一个很好的式样,使 EA 用户能够明了那些参数的事理。 正在 EA 输入属性上,咱们的用户将不会看到参数自身,而是看到如下所示的评释:

  咱们决断为咱们的 EA 增加更众参数。EA_Magic是出自 EA 的总共订单的幻数。 最小 ADX 值 (Adx_Min) 将声明为double数据类型。double用于存储浮点常数,浮点常数包罗整数一面、小数点和小数一面。

  业务手数 (Lot) 默示咱们思要业务的金融器材的量。接下来咱们声明将要应用的其他参数:

  adxHandle用于存储 ADX 目标句柄,而maHandle将用于存储“均匀转移线”目标的句柄。plsDI[]、minDI[]、adxVal[]是动态数组,用于生存图外上每个柱的 +DI、-DI 和(ADX 目标的)主 ADX 的值。maVal[]是动态数组,用于生存图外上每个柱的“转移均匀线”目标的值。

  正在这里乘隙注脚一下什么是动态数组。动态数组是正在声明时没有确定命组巨细的数组。换言之,方括号对中没有指定任何值。与之相对,静态数组正在声明时界说了数组的巨细。

  p_close是用于存储咱们将要看管以检讨咱们的买入/卖出业务的柱的收盘价。

  ADX 目标函数通过iADX函数得回。它将图外业务种类(NULL 也意味着现在图外确当前业务种类)、图外时辰周期/时辰外(0 也意味着现在图外确当前时辰外)和ADX 均匀周期用于行为参数或实参的索引(之前咱们正在输入参数一面已界说)的谋划。

  请阅读 MQL5 手册以得回相合这些目标函数的更众细节。它将助助您更好地明了怎么应用每个目标。

  假使函数未胜利返回句柄,咱们将获得一个 INVALID_HANDLE 差错,此时咱们必要再次检讨是否存正在差错。咱们应用GetlastError函数通过警示函数来显示差错。

  咱们决断将“止损”值和“得益”值存储正在咱们先前声明的STP和TKP变量中。咱们如许做的缘故是什么?

  这是由于存储正在输入参数中的值是只读的,无法对其举办更改。因而,咱们生气正在此确保总共经纪人的 EA 都运转精良。DigitsDigits()返回决断现在图外业务种类的代价精度的小数位数。看待 5 位或 3 位代价图外,咱们将“止损”和“得益”均乘以 10。

  因为该函数是正在将 EA 从图外中移除或禁用 EA 时移用,咱们将正在此开释咱们正在初始化经过中创修的总共目标句柄。咱们创修了两个句柄,一个用于 ADX 目标,其余一个用于“均匀转移线”目标。

  咱们将应用IndicatorRelease()函数来竣事开释使命。该函数仅有一个实参(目标句柄)

  该函数删除目标句柄并开释目标的运算块,假使未正在应用的线 EA ONTICK 一面

  正在这里咱们最初要做的是检讨现在图外是否有足足数目的柱。咱们能够应用Bars

  symbol(可应用_SymbolSymbol()获取,它们将返回附加 EA 确当前图外确当前业务种类)和现在图外的period或timeframe(可应用PeriodPeriod()获取,它们将返回附加 EA 确当前图外的时辰外)。假使总可用柱数少于 60,咱们生气 EA 不做任何操作直至咱们正在图外上有足够的柱可用。Alert函数正在零丁窗口中显示信息。它将任缘何逗号分开的值行为参数/实参。正在本例中,咱们唯有一个字符串值。返回退出咱们的 EA 初始化。

  New_Time变量(同样为 datetime 数据类型)举办比力,后者是用于生存新(现在)柱时辰的包罗一个元素的数组。咱们还声明晰一个 bool 数据类型变量IsNewBar,并将其值设为false。这是由于咱们生气它的值仅正在咱们具有新柱时为 TRUE。咱们应用CopyTime函数来获取现在柱的时辰。函数将柱时辰复制到仅有一个元素的数组New_Time

  正在这里咱们接下来要做的是检讨是否有足足数目的柱用于收拾。为什么要反复检讨?咱们只是生气确定 EA 使命平常。应该要防卫的是,OnInit

  您能够查察到,正在这里咱们从新检讨了一次,但和之前有所差异。咱们决断将咱们从以下外达式

  MqlTick类型的变量很容易地得回买价、卖价、结尾代价以及业务量确当前值。因而咱们将

  该构造用于推广业务操作的总共业务哀告。其构造包罗推广业务所需的总共字段。

  任何业务操作的结果均行为MqlTradeResult类型的非常预订义构造返回。任何声明为MqlTradeResult类型的变量都或许拜访业务哀告结果。

  业务种类的代价(开盘价、收盘价、最高价、最低价)、时辰、每个柱的业务量以及点差均存储于该构造中。 任何声明为MqlRates

  , // 援用数组boolset// true 默示倒序索引);应当防卫的是,这同样能够正在代码的初始化一面推广一次。然而,为便于分析,我决断正在此处举办注脚。

  接下来,咱们应用CopyRates函数将相合最新的三个柱的音讯复制到 Mqlrates 类型数组中。CopyRates用于获取指定命目的指定业务种类-时辰周期的MqlRates

  _period 获取。看待肇始处所,咱们将从现在柱柱 0入手下手,而且咱们仅计数三个柱,即柱 0、1和2。结果将存储正在数组mrate[]中。mrate[]

  接下来,咱们将总共目标值复制到咱们应用CopyBuffer函数声明的动态数组中。

  咱们将现在柱 (0) 复制到较早的两个柱。是以要复制的记实量为 3(柱 0、1 和 2)。

  。正如您正在这里再次看到的相通,咱们考试捉拿正在复制经过中也许产生的任何差错。假使存正在差错,无需推广进一步操作。

  函数将咱们生气检讨的业务种类(钱银对)行为实参/参数。正在这里咱们应用 _symbol,由于咱们检讨的是现在业务种类(钱银对)。

  假使该外达式返回 TRUE,则咱们生气检讨未平仓头寸是买入仍然卖出。咱们应用PositionGetInteger函数来举办检讨。咱们将该函数配合

  化妆符应用时,函数给出未平仓头寸的类型。该函数将返回来寸类型标识符,这能够是

  值存储正在Buy_opened中。当咱们稍后正在代码中检讨卖出或买入条目时,咱们将或许应用这两个变量。现正在是岁月存储咱们将用于咱们的买入/卖出设立的柱的收盘价。咱们之前已为此声明晰一个变量。// 复制现在柱的前一个柱的收盘价, 也即是柱 1 p_close=mrate[1].close; // 柱1收盘价

  类型的变量,用于鄙人达订单之前务必餍足的各个条目。bool 类型的变量只可包罗

  假使总共这些条目均获得餍足,即统统返回 true,则咱们生气确认正在咱们已有买入头寸时不会创设新的买入头寸。现正在是检讨咱们之前正在代码中声明的 Buy_opened 变量的值的岁月了。

  // 有买入持仓吗? if (Buy_opened) { Alert(咱们仍然有了买入仓位!!!); return; // 不修新的买入仓位 }

  因为咱们下达了一个即刻推广的业务订单,此处业务操作类型的品行为TRADE_ACTION_DEAL

  和订单号,假使订单已下达的线默示OrderSend哀告已胜利推广,而10008默示订单已下达。这即是咱们必要检讨这两个返回码的缘故。假使咱们获得两个返回码的纵情一个,咱们能够确认咱们的订单已竣事或已下达。要检讨卖出机缘,除了咱们的 ADX 务必大于指定的最小值外,咱们应检讨咱们为买入机缘所做的对应一面。

  上的 MA-8 值,而且柱 1上的MA-8值小于柱 2上的对应值,这意味着MA-8向下淘汰。这便餍足了咱们卖出设立的四个条目的个中一个。bool Sell_Condition_2 = (p_close maVal[1]);该外达式旨正在检讨正在同偶然间周期内(柱 1 时辰周期),柱 1 的收盘价是否低于 MA-8 的值。假使低于,则咱们的第二个条目也同样获得餍足,接下来咱们将检讨其他条目的餍足情形。然而,假使咱们刚刚说论的两个条目并未餍足,则没有需要检讨其他条目的餍足情形。这即是咱们决断将下述外达式包罗正在这两个初始条目(外达式)中的缘故。

  假使这些条目获得餍足,即统统返回 true,则咱们生气确认正在咱们已有买入头寸时不会创设新的买入头寸。现正在是检讨咱们之前正在代码中声明的 Buy_opened 变量的值的岁月了。

  // 是否有卖出仓位? if (Sell_opened) { Alert(咱们仍然有了卖出仓位!!!); return; // 不修新的卖出仓位 }

  假使 Sell_opened 返回 true,咱们不生气创设其他的卖出面寸,因而咱们显示一则警示信息来报告咱们然后返回,因而咱们的 EA 将恭候下一订单号的到来。然而,假使 Sell_opened 返回 FALSE,则咱们依照正在买入订单中所做的设立卖出业务哀告。

  此处合键的区别正在于咱们谋划止损代价和得益代价的式样。同样地,因为咱们卖出,咱们以卖价卖出;这即是咱们应用

  正犹如咱们对买入订单所做的那样,咱们也务必检讨卖出订单胜利与否。因而咱们应用正在买入订单中应用的统一外达式。

  到这一步,咱们必要测试咱们的 EA,以获悉咱们的战术使命与否。同样地,正在咱们的 EA 代码中也许存正在个人差错。这些差错将正在接下来的程序中寻得。

  通过代码调试,咱们能够逐行(假使设立了断点)查看代码的推广情形,寻得代码中存正在的任何差错或缺陷,然后正在将代码用于切实业务前敏捷对其举办需要的更改。

  正在这里,咱们将正在设立断点和接下来不设立断点的两种状况中逐渐遍历“EA 业务”的调试经过。为此,确保咱们没相合闭“编辑器”。最初,咱们应选取生气用于测试 EA 的图外。正在编辑器菜单栏上,点击

  Options(选项)窗口呈现后,选取要应用的钱银对、时辰周期/时辰外,然后单击 OK(确定)按钮。

  要启动调试法式,按 F5 或单击 MetaEditor 器材栏上的绿色按钮:

  编辑器最初将编译代码,假使代码中存正在差错,编译器将显示差错,反之编译器将报告您代码胜利编译。

  调试法式正在竣事代码的编译后,将跳转至业务端,并将 EA 附加至您正在 MetaEditor 选项设立中指定的图外。同时,调试法式将显示 EA 的输入参数一面。因为咱们未作任何调剂,单击 OK(确定)按钮即可。

  您将防卫到,正在代码行的左边有一个绿色的箭头呈现。该箭头默示已推广了前面的代码行;现正在咱们已预备好推广现在的代码行。

  正在接连前,请应承我做少少需要的注脚。查察编辑器的器材栏,您会浮现之前映现灰色的三个带弯曲箭头的按钮现已激活。这是由于咱们现正在正正在运转调试法式。这些按钮/敕令用于单程序试咱们的代码(单步推广、跳过或跳出)。

  我以为您能够脱节几分钟去喝杯咖啡,使 EA 正在无人值守的形态下使命。回来时,您会浮现本人已有所进账(

  有一点我要清楚一下,业务端务必联贯搜集,不然调试会由于终端无法举办业务而不起效力。

  现正在,咱们将应用业务端内置的战术测试法式来测试咱们的 EA。 要启动战术测试法式,按

  (视图)菜单,然后单击 Strategy Tester(战术测试法式),如下图所示。

  测试法式(战术测试法式)正在终端的下部显示。要查看测试法式的总共设立,必要将其打开或调剂巨细。为此,将鼠标指针移至赤色箭头标示的处所(如下所示)。

  鼠标指针将变为双向箭头,按住鼠标并向上拖动线条。当您能够看到设立选项卡上的总共实质时,休歇拖动鼠标。

  将 Optimization(优化)设立为 Disable(禁用)(咱们现正在不是优化,仅仅是出于测试主意)

  正在咱们点击 Start(入手下手)按钮前,咱们先熟识一下测试法式上的其他选项卡。

  测试法式正在测试中应用的收拾器。基于您的电脑的收拾器类型。我的仅仅是单 (1) 核收拾器。

  一朝您入手下手正在 Journal(日记)选项卡上查看已发送订单的合连信息,您也许会思要转到方才创修的名为Graph

  正在这里,您能够查看总毛利、净利、总业务数、蚀本业务总数以及更众实质。看到咱们正在为测试选取的时辰周期内具有约

  正在这里,我要着重夸大一件事故。您会浮现,您正在战术测试法式中看到的 EA 参数的设立和 EA 输入参数中的初始设立差异。我方才向您指出,您能够更改那些输入参数中的纵情参数以得回最优的 EA 本能。我能够将“转移均匀线 的时辰周期辞别改为 10 和 14。我还能够将止损从 30 改为 35。结尾一点也很要紧,我能够应用 2 小通常间外。记住,这是战术测试法式。

  (结果)选项卡中应用右键单击纵情处,然后您将会看到一个菜单。正在该菜单上选取

  生存对话框窗口将显示,假使您准许,为报外输入名称,或是保存默认名称,然后单击生存按钮。完好的陈诉将以 HTML 形式生存。

  图 36. 显示测试的图外就如许,咱们胜利编写和测试了咱们的 EA,现正在咱们有了一个可应用的结果。现正在您能够返回战术测试法式 Settings(设立)选项卡,应用其他的时辰外/时辰周期来举办测试。

  我生气您能够应用差异的钱银对、差异的时辰外、差异的止损值、差异的得益值来举办测试,看看 EA 是怎么使命的。您以至能够尝尝新的“转移均匀线”值和 ADX 值。如我之前所言,这恰是战术测试法式的精华所正在。同样,我也生气您能够将结果与我分享。

  正在天职步指南中,咱们能够找到基于拓荒的业务战术编写轻易的“EA 业务”所需的基础程序。指南中也包罗了怎么应用调试法式检讨 EA 是否存正在差错的步骤。咱们还说论了应用战术测试法式测试 EA 本能的步骤。为此,咱们或许意会到全新的 MQL5 讲话的庞大性和牢靠性。咱们的 EA 尚不完满或美满,正在用于切实业务前咱们还务必对其举办豪爽纠正。

Tags:

广告位
    广告位
    广告位

标签云