文章 "MQL5 简介:如何编写简单的EA 交易和自定义指标" - 页 3 12345 新评论 Yedelkin 2010.06.28 21:09 #21 问题 4:文章内容如下: ......让我们在请求 结构中加入在本程序中调用OrderSend 函数的大多数情况下常见的值: request.symbol =Symbol(); request.volume =Lots; request.tp =0; request.deviation =0; request.type_filling=ORDER_FILLING_AON; request.symbol 元素包含执行交易操作的工具的符号名称,request . volume 元素包含金融工具合约的价值,request.tp 元素 包含止盈价格(在某些情况下,订单的止盈值未指定,因此我们在request.tp 结构元素中输入 0)....。 但为什么我们要在 request.tp 结构元素中输入 0 呢?因为如果我们有一个挂单 买入,request.tp=0 就意味着 TP 将始终低于当前买入价。在我看来,具有这样一个 TP 值的订单要么会因为 TP 参数值指定错误而被拒绝,要么会在服务器接受该订单后立即以当前买入价执行。 处理 MQL5 EA 交易 Yedelkin 2010.06.28 22:01 #22 问题 5:文章内容如下: ...让我们指定在OnTick 函数 中使用的局部变量 及其类型:double h[], l[], ma[], atr_h[], atr_l[], lev_h, lev_l, StopLoss, StopLevel=_Point*SymbolInfoInteger(Symbol(),SYMBOL_TRADE_STOPS_LEVEL), Spread =NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_ASK) - SymbolInfoDouble(Symbol(),SYMBOL_BID),_Digits); ... StopLevel 变量用于存储 STOP_LEVEL 值--从当前价格到下单的最小距离(价格单位)。该值是点价(预定义变量_Point)与 STOP_LEVEL 值(以点为单位)的乘积。SymbolInfoInteger 函数返回 STOP_LEVEL 值。该函数的第一个参数是仪器的符号名称,第二个参数是所请求属性的标识符....。 MQL5 参考手册》还指出:"SYMBOL_TRADE_STOPS_LEVEL 是用于设置止损订单的当前收盘价的最小保证金(以点为单位)"。在我看来,这两种情况都需要满足不等式 ORDER_PRICE_CURRENT-request.price>=SYMBOL_TRADE_STOPS_LEVEL(如果是卖出止损订单)。 那么,为什么 Expert Advisor 代码要检查 Bid(Ask)和 StopLoss 之间的距离是否超过最小 StopLevel 缩进值? ...// 新的 StopLoss 是否不接近当前价格? && NormalizeDouble(SymbolInfoDouble(Symbol(),SYMBOL_BID)-StopLoss-StopLevel,_Digits)>0 ...// 新的 StopLoss 是否不接近当前价格? && NormalizeDouble(StopLoss-SymbolInfoDouble(Symbol(),SYMBOL_ASK)-StopLevel,_Digits)>0 是在所有情况下都有必要进行这样的检查,还是在执行特定策略时才会出现这种情况?简而言之,在下挂单时,我是否应该总是检查买入价(卖出价)和止损之间的距离,以查看是否超出了最小止损线幅度? Renat Fatkhullin 2010.06.29 17:05 #23 Yedelkin: 但为什么我们要在 request.tp 结构元素中填 0 呢?因为如果我们有一个挂单 买入订单 ,那么 request.tp=0 意味着 TP 将始终低于当前 买入价。而且,在我看来,具有这样一个 TP 值的订单要么会因 TP 参数指定错误而被拒绝,要么会在服务器接受该订单后立即以当前买入价执行。 零意味着没有 TP。 Renat Fatkhullin 2010.06.29 17:09 #24 Yedelkin: 简而言之,在下挂单时,我是否应该总是检查买入价(卖出价)和止损之间的距离,以查看是否超出了最低止损水平保证金?当您在非常接近市场的位置设置订单时,有必要检查挂单的止损/止赢/入市价格水平是否达到最低 保证金。如果您在合理和远离市场的模式下(几十或几百个点)使用止损或挂单,则可以跳过此类检查。 Yedelkin 2010.06.29 20:47 #25 Renat:当您在非常接近市场的情况下设置订单时,应始终检查挂单的 SL/TP/入市价格水平是否为最小缩进。 澄清问题 5.1。 我让 Expert Advisor 为每个挂单计算三个水平: 进入价格/SL/TP。 由于事先不知道入市价格水平与当前市场价格的距离,因此检查入市价格水平是否符合最低保证金 不会产生任何问题。 但是,我们应该对照什么水平来检查其余两个 SL/TP 水平呢?检查相对于当前市场价格的 SL/TP 水平有点不合逻辑,因为入市价格水平可能离当前市场价格很远,这样的检查就失去了意义。这就是为什么我在 Expert Advisor 中提供了|Entry price-TP(SL)|>SYMBOL_TRADE_STOPS_LEVEL 这一检查条件。一般来说,Expert Advisor 在这种条件下工作正常,但当我开始优化 EA 代码时,我想知道从服务器处理挂单的角度来看,这种检查是否必要。EA 代码不会因为检查该条件而超载(EA 策略本身不需要这样的检查)。 换句话说,具有三个进入价格/SL/TP 水平的挂单是否应始终检查最低保证金的 SL/TP 水平?如果是,是否应检查哪个水平(价格)的最低保证金? Yedelkin 2010.06.29 21:04 #26 我的帖子缺少编辑功能。所以我在这里补充一下: = 对于每个挂单,"智能交易系统 "会独立计算三个级别:入市价格/SL/TP。不追求 "设置 更接近市场的挂单"的目的。 = Renat Fatkhullin 2010.06.29 21:12 #27 挂单水平中的 SL 和 TP 是根据入市价格评估的,因此它们不会低于最低水平。在 MT4 中也是如此。 Yedelkin 2010.06.29 21:20 #28 Renat:挂单水平中的止损价和止盈价会从入市价开始评估,以便至少与入市价相差一个最低水平。在 MT4 中也是如此。 好了,现在我都明白了。因此,我无法让 EA 代码变得更简单;最初,一切都按照文章的要求进行,即正确无误。 而且我不熟悉 MT4,所以这些问题都是 "傻瓜 "提出的。谢谢! Yedelkin 2010.08.07 15:04 #29 Renat:......当需要在非常接近市场的位置设置订单时,请务必检查挂单的最小缩进幅度(SL/TP/Entry price level)。......挂单水平中的 SL 和 TP 是根据入市价格估算的,因此它们与入市价格的距离不会小于最小水平。 问题 6:在下 挂单时, 检查最小缩进量是明确的。现在我们有一个问题,即在修改 未结头寸的 TP/SL时,检查最小保证金的特殊性。 情况: 未结头寸有一个固定 TP 和一个 "上拉 "SL,当价格向有利方向移动时,SL 接近固定 TP。与设置挂单 类似,每次 Expert Advisor 发出修改未结头寸 TP/SL 的指令时,都会检查 TP 和 SL 水平的最小缩进量。 但在CTrade 类的 PositionModify 函数描述中,规定 tp 参数为 "将触发止盈的新价格(如果不需要更改,则为之前的值)"。 因此,问题是:如果不需要更改之前设置的止盈水平,在发送订单修改未结头寸的止盈/止损时,是否需要检查该止盈水平与当前(实际)价格的最小差额?或者在这种情况下,只检查与修改的 SL 有关的最低保证金是否足够? 换句话说,在发送修改未平仓头寸的 TP/SL 的指令时,如果 TP 水平在之前已经设定,并且不会改变,是否可以不检查与 TP 有关的最小保证金? 在修改指令中只需指定之前的 TP 值? Denis Zyatkevich 2010.09.29 03:07 #30 下载 "indicator_TP_en.mql5 "文件后,请将其重命名为 "indicator_TP.mql5"。 12345 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
问题 4:文章内容如下:
但为什么我们要在 request.tp 结构元素中输入 0 呢?因为如果我们有一个挂单 买入,request.tp=0 就意味着 TP 将始终低于当前买入价。在我看来,具有这样一个 TP 值的订单要么会因为 TP 参数值指定错误而被拒绝,要么会在服务器接受该订单后立即以当前买入价执行。
问题 5:文章内容如下:
MQL5 参考手册》还指出:"SYMBOL_TRADE_STOPS_LEVEL 是用于设置止损订单的当前收盘价的最小保证金(以点为单位)"。在我看来,这两种情况都需要满足不等式
那么,为什么 Expert Advisor 代码要检查 Bid(Ask)和 StopLoss 之间的距离是否超过最小 StopLevel 缩进值?
是在所有情况下都有必要进行这样的检查,还是在执行特定策略时才会出现这种情况?简而言之,在下挂单时,我是否应该总是检查买入价(卖出价)和止损之间的距离,以查看是否超出了最小止损线幅度?
但为什么我们要在 request.tp 结构元素中填 0 呢?因为如果我们有一个挂单 买入订单 ,那么 request.tp=0 意味着 TP 将始终低于当前 买入价。而且,在我看来,具有这样一个 TP 值的订单要么会因 TP 参数指定错误而被拒绝,要么会在服务器接受该订单后立即以当前买入价执行。
简而言之,在下挂单时,我是否应该总是检查买入价(卖出价)和止损之间的距离,以查看是否超出了最低止损水平保证金?
当您在非常接近市场的位置设置订单时,有必要检查挂单的止损/止赢/入市价格水平是否达到最低 保证金。
如果您在合理和远离市场的模式下(几十或几百个点)使用止损或挂单,则可以跳过此类检查。
当您在非常接近市场的情况下设置订单时,应始终检查挂单的 SL/TP/入市价格水平是否为最小缩进。
澄清问题 5.1。
我让 Expert Advisor 为每个挂单计算三个水平: 进入价格/SL/TP。
由于事先不知道入市价格水平与当前市场价格的距离,因此检查入市价格水平是否符合最低保证金 不会产生任何问题。
但是,我们应该对照什么水平来检查其余两个 SL/TP 水平呢?检查相对于当前市场价格的 SL/TP 水平有点不合逻辑,因为入市价格水平可能离当前市场价格很远,这样的检查就失去了意义。这就是为什么我在 Expert Advisor 中提供了|Entry price-TP(SL)|>SYMBOL_TRADE_STOPS_LEVEL 这一检查条件。一般来说,Expert Advisor 在这种条件下工作正常,但当我开始优化 EA 代码时,我想知道从服务器处理挂单的角度来看,这种检查是否必要。EA 代码不会因为检查该条件而超载(EA 策略本身不需要这样的检查)。
换句话说,具有三个进入价格/SL/TP 水平的挂单是否应始终检查最低保证金的 SL/TP 水平?如果是,是否应检查哪个水平(价格)的最低保证金?
我的帖子缺少编辑功能。所以我在这里补充一下:
= 对于每个挂单,"智能交易系统 "会独立计算三个级别:入市价格/SL/TP。不追求 "设置 更接近市场的挂单"的目的。 =
挂单水平中的 SL 和 TP 是根据入市价格评估的,因此它们不会低于最低水平。
在 MT4 中也是如此。
挂单水平中的止损价和止盈价会从入市价开始评估,以便至少与入市价相差一个最低水平。
在 MT4 中也是如此。
好了,现在我都明白了。因此,我无法让 EA 代码变得更简单;最初,一切都按照文章的要求进行,即正确无误。
而且我不熟悉 MT4,所以这些问题都是 "傻瓜 "提出的。谢谢!
......当需要在非常接近市场的位置设置订单时,请务必检查挂单的最小缩进幅度(SL/TP/Entry price level)。
......挂单水平中的 SL 和 TP 是根据入市价格估算的,因此它们与入市价格的距离不会小于最小水平。
问题 6:在下 挂单时, 检查最小缩进量是明确的。现在我们有一个问题,即在修改 未结头寸的 TP/SL时,检查最小保证金的特殊性。
情况: 未结头寸有一个固定 TP 和一个 "上拉 "SL,当价格向有利方向移动时,SL 接近固定 TP。与设置挂单 类似,每次 Expert Advisor 发出修改未结头寸 TP/SL 的指令时,都会检查 TP 和 SL 水平的最小缩进量。
但在CTrade 类的 PositionModify 函数描述中,规定 tp 参数为 "将触发止盈的新价格(如果不需要更改,则为之前的值)"。
因此,问题是:如果不需要更改之前设置的止盈水平,在发送订单修改未结头寸的止盈/止损时,是否需要检查该止盈水平与当前(实际)价格的最小差额?或者在这种情况下,只检查与修改的 SL 有关的最低保证金是否足够?
换句话说,在发送修改未平仓头寸的 TP/SL 的指令时,如果 TP 水平在之前已经设定,并且不会改变,是否可以不检查与 TP 有关的最小保证金? 在修改指令中只需指定之前的 TP 值?
下载 "indicator_TP_en.mql5 "文件后,请将其重命名为 "indicator_TP.mql5"。