为什么 MQL4 OrderModify() 在回测时不会修改订单?

2024-01-16

I'm trying to ADD a stop loss to my open market orders in MetaTrader 4 when a position gets 100 pips "to the good" which is to be equal to the Order Open Price;

OrderStopLoss() == OrderOpenPrice()

但这并没有发生。

我已经添加Print() & GetLastError()函数,日志中没有任何内容,所以它一定是我的编码中的某些内容 - 但看不出会出现什么问题。

好的,这就是我到目前为止所拥有的,一个用于买入的循环,一个用于卖出的循环。我还按照建议对“双打”进行了标准化,并在最顶部将 BuyMod 和 SellMod 声明为“true”。这应该确保默认值不会诉诸 false。我还认为如果我告诉您我有 MetaEditor 版本 5 build 1241 可能会有所帮助:)

我的以下代码如下;

/*Breakeven Order Modification*/
bool BuyMod               =  true;
bool SellMod              =  true;
                for(int b = OrdersTotal()-1;b>=0;b--)
                {
                if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES))
                   {
                   double   aBidPrice   =  MarketInfo(Symbol(),MODE_BID);
                   double   anOpenPrice =  OrderOpenPrice();
                   double   aNewTpPrice =  OrderTakeProfit();
                   double   aCurrentSL  =  OrderStopLoss();
                   double   aNewSLPrice =  anOpenPrice;
                   double   pnlPoints   =  (aBidPrice - anOpenPrice)/_Point;
                   double   stopPoints  =  (aBidPrice - aNewSLPrice)/_Point;
                   int      stopLevel   =  int(MarketInfo(Symbol(),MODE_STOPLEVEL));
                   int      aTicket     =  OrderTicket();
                   if(OrderType() == OP_BUY)
                   if(stopPoints >= stopLevel)
                   if(aTicket > 0)
                   if(pnlPoints >= breakeven)
                   if(aNewSLPrice != aCurrentSL)
                      {
                      BuyMod = OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(aNewSLPrice,Digits),NormalizeDouble(aNewTpPrice,Digits),0,buycolor);
                      SendMail("Notification of Order Modification for Ticket#"+IntegerToString(OrderTicket(),10),"Good news! Order Ticket#"+IntegerToString(OrderTicket(),10)+"has been changed to breakeven");
                      }
                   }
                }
                for(int s = OrdersTotal()-1; s>=0; s--)
                {
                if(OrderSelect(s,SELECT_BY_POS,MODE_TRADES))
                   {
                   double   anAskPrice  =  MarketInfo(Symbol(),MODE_ASK);
                   double   anOpenPrice =  OrderOpenPrice();
                   double   aNewTpPrice =  OrderTakeProfit();
                   double   aCurrentSL  =  OrderStopLoss();
                   double   aNewSLPrice =  anOpenPrice;
                   double   pnlPoints   =  (anOpenPrice - anAskPrice)/_Point;
                   double   stopPoints  =  (aNewSLPrice - anAskPrice)/_Point;
                   int      stopLevel   =  int(MarketInfo(Symbol(),MODE_STOPLEVEL));
                   int      aTicket     =  OrderTicket();
                   if(OrderType()== OP_SELL)
                   if(stopPoints >= stopLevel)
                   if(pnlPoints >= breakeven)
                   if(aNewSLPrice != aCurrentSL)
                   if(aTicket > 0)
                      {
                      SellMod = OrderModify(OrderTicket(),OrderOpenPrice(),NormalizeDouble(aNewSLPrice,Digits),NormalizeDouble(aNewTpPrice,Digits),0,sellcolor);
                      SendMail("Notification of Order Modification for Ticket#"+IntegerToString(OrderTicket(),10),"Good news! Order Ticket#"+IntegerToString(OrderTicket(),10)+"has been changed to breakeven");
                      }
                   }
                }

交易算法-交易 mql4 metatrader4

共享编辑删除标志

刚刚编辑过

2 天前询问

托德·吉尔贝 264

您可能想知道,StackOverflow 不会提倡重复问题。 (参见


除了遇见一个MQL4语法规则,
还有更多条件:


第一个隐患是数字舍入问题。

MetaQuotes, Inc. 建议尽可能将浮动值标准化为适当的价格表示形式。

Thus,
价格进入服务器端指令的任何地方{ OrderSend(), OrderModify(), ... }一个人应该always准备这样的aPriceDOMAIN value
通过致电NormalizeDouble( ... , _Digits ),在标准化价格到达任何服务器端指令调用之前。

可能听起来很天真,但是this避免服务器端拒绝的问题。

Add NormalizeDouble()定期调用您的代码作为您的救生衣。


第二个,甚至更好的隐患就在 STOP_ZONE-s and FREEZE_ZONE-s

虽然不直接可见,但任何 Broker 集都位于各自的条款及条件这些参数。

在实践中,
这意味着,如果您指示{ OrderSend() | OrderModify() } to set / move aPriceDOMAIN设置的级别与当前实际值太接近Ask/Bid(违反经纪人禁止STOP_ZONE )
or
删除/修改aPriceDOMAIN止盈或止损水平,已设置且目前处于经纪商禁止的范围内FREEZE_ZONE与实际的距离Ask/Bid,
该指示将不会被成功接受及执行。

所以除了打电话给NormalizeDouble(),当价格移动得足够“远”时,请务必等待一段时间,并定期检查是否违反禁止规定STOP_ + FREEZE_在对算法交易项目的订单管理部分进行任何修改之前先进行区域调整。

Anyway, 欢迎来到狂野世界MQL4

Update:虽然 StackOverflow 不是一个做家庭作业的网站,但让我为解决方案提出一些方向:

for ( int b = OrdersTotal() - 1; b >= 0; b-- ) // ________________________ // I AM NOT A FAN OF db.Pool-looping, but will keep original approach for context purposes
{     if (  ( OrderSelect( b, SELECT_BY_POS, MODE_TRADES ) ) == true )
      {    // YES, HAVE TO OPEN A CODE-BLOCK FOR if()-POSITIVE CASE:
           // ------------------------------------------------------
              double aBidPRICE   = MarketInfo( Symbol(), MODE_BID );       // .UPD
              double anOpenPRICE     = OrderOpenPrice();                   // .SET FROM a db.Pool Current Record
              double aNewTpPRICE     = OrderTakeProfit();                  // .SET FROM a db.Pool Current Record
              double aCurrentSlPRICE = OrderStopLoss();                    // .SET FROM a db.Pool Current Record
              double aNewSlPRICE     = anOpenPRICE;                        // .SET
              double  pnlPOINTs      = ( aBidPRICE - anOpenPRICE )/_Point; // .SET
              double stopPOINTs      = ( aBidPRICE - aNewSlPRICE )/_Point; // .SET
           // ------------------------------------------------------------ // .TEST
              if (                        OP_BUY    == OrderType()        )
                   if (                   Period()  == OrderMagicNumber() )
                        if (             stopPOINTa >  stopLevel          )
                             if (         pnlPOINTs >= breakeven          )
                                  if (  aNewSlPRICE != aCurrentSlPRICE    )
                                  {  // YES, HAVE TO OPEN A BLOCK {...}-CODE-BLOCK FOR THE if()if()if()if()-chain's-POSITIVE CASE:
                                     // -------------------------------------------------------------------------------------------
                                        int aBuyMOD = OrderModify( OrderTicket(),
                                                                   OrderOpenPrice(),
                                                                   NormalizeDouble( aNewSlPRICE, Digits ),
                                                                   NormalizeDouble( aNewTpPRICE, Digits ),
                                                                   0,
                                                                   buycolor
                                                                   );
                                        switch( aBuyMOD )
                                        {   case ( NULL  ): { ...; break; } // FAIL ( ANALYSE ERROR )
                                            default:        { ...; break; } // PASS OrderModify()
                                        }
      }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 MQL4 OrderModify() 在回测时不会修改订单? 的相关文章

  • mt4挂虚拟服务器,mt4挂云服务器需要哪个系统

    mt4挂云服务器需要哪个系统 内容精选 换一换 云服务器挂载磁盘 弹性云服务器挂载磁盘应用示例请参考弹性云服务器挂载磁盘 挂载bootable卷必须指定挂载盘符 由备份创建的磁盘不能挂载为系统盘 弹性云服务器状态 弹性云服务器的OS EXT
  • mt4双线macd_手机版MT4怎样添加双线MACD指标 手机MT4双线MACD设置方法

    技术分析指标是将金融品种的价格和 或成交量进行数学运算去预测未来的价格变化 技术分析指标信号能帮助决定是否开仓或平仓 通过功能属性判断 xff0c 技术分析指标能分为两类 xff1a 趋势指标和震荡指标 趋势指标可以确立价格向某个方向运动以
  • 使用Python从电报通道获取信号并将其放入MT4中

    我想从 Telegram 频道读取消息 这是重要的外汇信号 并在 MT4 Windows 应用程序中下订单 现在 我制作了一个 python 脚本 用于监听频道并将消息存储在数据库中 我还可以解析消息以获取必要的值 例如 TP SL 等 现
  • 如何在滚动窗口中应用Python中的赫斯特指数

    我正在尝试在滚动窗口上应用 SPY 收盘价的赫斯特指数 下面的代码 我从这里得到的 https www quantstart com articles Basics of Statistical Mean Reversion Testing
  • 风险管理:如果已经做多,则不要下新订单

    如果该标志已经指示长 则不应有新的指示长的标志 如果标志不指示长计算表达式 longCondition if strategy long false rsi lt 30 and close gt moving avg shortCondit
  • 如何从 SQL 数据库下载数据并注释 MT4 图表

    我最近下载了 MetaTrader 终端平台 MT4 我有自己的回测引擎 它将一些输出存储在我的 SQL 服务器数据库中 输出取决于我正在测试的模型 然而 输出可以像交易进入时间一样简单 我想知道什么 是否可以在 MQL4 中为downlo
  • 在数组、列表中查找异常值

    我有数组形式的销售统计数据 可以根据该数据计算标准差或平均值 stats 100 98 102 100 108 23 120 假设 20 的差异是正常情况 23显然是一个特例 找到这个不寻常值的最佳算法是什么 在任何语言 伪或任何原理中 你
  • 如何在 R 中为 Quantstrat 编写自定义规则函数 - 将追踪止损订单替换为 stoplimit 和ruleOrderProc

    我的目标是使用下面概述的规则来生成信号来放置新的 stoplimit 订单来取代我的追踪止损 我不希望我的止损无限期地跟踪 直到它达到我的盈亏平衡价格 如果已经可以以某种方式实现这一点 请告诉我 我希望在 quantstrat 中编写一个自
  • 如何连接到 TT X_TRADER API 以使用 python 创建自动交易系统?

    我已经在内部开发论坛中多次看到这个问题 因此想提供一个快速示例 说明如何立即在 python 中实现这一点 首先 请注意 我们所做的只是连接到相关的 X TRADER com 对象 因此以下所有内容仍然适用 https www tradin
  • 安装 ibapi 包

    您好 我正在尝试在 python 中安装 ibapi 但是该软件包似乎不可用 因为每次我尝试安装它时都会出现错误 是否有其他方法可以安装该软件包 对你的帮助表示感谢 我已经留下了我使用的代码 尝试安装该软件包 pip install iba
  • 无法从 pine 编辑器中的函数访问值

    我正在尝试测试 RSI 14 DI 反转策略 但无法从它们所在的函数访问 DI 或 DI 变量为 加 和 减 有关如何访问它们的任何想法 这是代码 version 4 strategy RSI 14 DI DI Reversal Strat
  • 如何避免数组超出范围

    有人知道如何避免错误array out of range当尝试在指标缓冲区中显示大量柱 比方说 7000 时 我有一个类似的问题 我总是遇到 Array out of range 我的一个缓冲区出现错误 我检查过ArraySize 返回了0
  • 从订单示例构建订单簿[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在寻找从订单构造订单簿的代码 例如 如果订单是 side price quantity buy 100 1 buy 101 10 buy
  • Pine Script 当前价格指标

    有没有办法在 Pine Script 中创建反映股票当前价格的指标 我需要这个指标 因为我需要在蜡烛收盘前 当存在特定交叉时 输入订单 并且逐条提供回测数据 我认为指标可以让我做到这一点 如果没有 还有其他方法可以解决这个问题 我不是一个经
  • 使用图表构建交易平台 - 对 Python GUI 库的建议

    我正在构建一个小程序来从市场检索数据并实时绘制图表 虽然交易决策将在很大程度上自动化 但图表会不断更新 以便有人可以跟踪决策的制定方式 并在必要时进行手动干预 对于该任务 对于 Python 来说 什么是一个好的 GUI 库 以下是考虑因素
  • 如何将字符串从 C++ DLL 返回到 MetaTrader 4 代码执行生态系统?

    我有以下功能 declspec dllexport wchar t stdcall getJson wchar t listN setlocale LC ALL function logic wstring ant utf8 to wstr
  • 如何编写 mql4 代码 (EA) 用矩形标记列出的蜡烛形态

    我对写作很陌生mql4代码 如果我能在出现以下烛台图案时获得一些绘制矩形的帮助 我将不胜感激 FIG1 Run code snippet blockquote class imgur embed pub a href imgur com a
  • 结构有对象且无法复制

    我正在尝试从我的第一个 MQL4 专家顾问开始 我创建了一个struct处理我的订单 struct Order int pair int command double quantity double entry double stopLos
  • 如何引用 pinescript 中临时变量中存储的先前入场价格?

    我有一些基本的 MA 交叉策略指标 我想实施更好的策略 仅当价格高于之前购买时才出售 但我不确定如何在 PINE 语法中执行此操作 有什么想法吗 这是简单的代码 工作正常 它打开 LONG 或关闭 LONG 取决于交叉 MA Strateg
  • R 中的 Websocket

    我设法在 R 中建立到 Mtgox websocket 的连接 规格如下 url https socketio mtgox com mtgox Currency USD https socketio mtgox com mtgox Curr

随机推荐

  • 使用 c_api.h 执行使用 tensorflow.contrib.resampler 的冻结张量流图

    我有一个冻结的张量流图 pb 格式 其中包含对 tensorflow contrib resampler 的调用 必须使用以下命令在 C 应用程序中加载和执行该调用 c api h 如果我调用以下命令 我就可以从 python 成功加载并执
  • 在django中显示多个条形图

    我是 django 的新手 对 python 知之甚少 我正在学习在 django 框架中绘制图表 我绘制了单个条形图 但在使用 django 项目的数据库 Telecom db 绘制多个条形图时遇到问题 然而 在 wxPython 中 以
  • 在全屏模式下检测事件更改 Internet Explorer

    我正在尝试编写一个事件处理程序来检测我拥有的视频播放器是否处于全屏模式或 常规 模式 我尝试过使用 document addEventListener fullscreenchange myfunc false 但这在 IE 中不起作用 我
  • 读取 NSUserDefaults 与变量的速度

    我有一个应用程序 它经常调用变量 这些变量存储在NSUserDefaults 我想知道在哪里NSUserDefaults正在存储 如果我打电话NSUserDefaults直接而不是使用变量 哪个更快 变量或NSUserDefaults 因为
  • 如何在 Visual Studio Code 上查看 C# Nuget Package 的源代码?

    当我们选择 转到定义 或 F12 或 CRTL 单击 时 有什么方法可以查看 Nuget 包的源代码吗 此时 我在代码中单击 CRTL 单击 Nuget Package 中的某个类 vscode 会显示程序集摘要 元数据 其中我只能看到文档
  • 从 Git 恢复文件?

    问题与问题相关 致命文件系统错误后如何恢复 Git https stackoverflow com questions 552832 how to restore git after fatal file system error 但对于单
  • 如何在不使用release分支的情况下使用git flow?

    有多家分店可供选择git flow 例如 feature release support hotfix bugfix 我不需要release 分支并想要合并staging分支 一个开发分支 直接到master 使用什么是实现此目的的最佳方法
  • C++11 在 constexpr 函数中使用统一值初始化数组

    我有一个类模板 它根据模板参数构建一个简单的数组作为其成员之一 我需要能够在构造函数之一中将数组中的每个元素初始化为单个值 不幸的是这个构造函数必须是constexpr 相关部分归结为 template
  • 每次循环递减

    是否可以在 Excel 的 VBA 中的每个循环中递减 我有这样的代码 Sub Makro1 Dim rng As Range Dim row As Range Dim cell As Range Set rng Range B1 F18
  • 无法从 .sql 文件创建存储过程 - JDBC

    我正在尝试使用 jdbc 在安装 Web 项目期间执行 sql 文件 谷歌建议的 2 个选项 手动解析脚本 通过拆分 字符 或使用 ant 我更喜欢简单的方式 所以 ant 是一个不错的选择 这是我用来设置数据库的代码 public voi
  • VFY:无法解析静态方法10876:Android

    我在程序中使用了 SmsCbMessage java 类 它取自http grepcode com file repository grepcode com java ext com google android android 4 0 1
  • 使用 WPF 将一个列表与另一个列表绑定

    开门见山 我正在使用 MVVM 编写一个程序 并且制作了如下视图 类结构 class Company int CompanyID string Name List
  • 如何让JavaScript在页面加载后执行?

    我正在执行一个外部脚本 使用
  • 如何在ansible中迭代库存组?

    我看过一些与我的问题类似的帖子 Ansible 迭代库存组 https stackoverflow com questions 53683136 ansible iterate over inventory groups Ansible 迭
  • 将 R markdown 文件发布为博客文章

    我想发布这样的基本博客文章 博客文章示例 http rpubs com hbat 6531使用我的 R markdown 文件 但我想在 Wordpress 而不是 wordpress com 中发布它 最有希望的解决方案似乎是怡辉的功能
  • 在 Android 中从屏幕抓取创建视频

    我想在视频中记录用户交互 然后人们可以将其上传到他们的社交媒体网站 例如 会说话的汤姆猫 Android 应用程序有一个小摄像机图标 用户可以按摄像机图标 然后与应用程序交互 按图标停止录制 然后处理 转换视频以准备上传 我想我可以使用 s
  • 将元素均匀分布在列中

    我有一个名为 wrap其中放置物品 未知数量的物品 thing 应排列成四列 相互堆叠 div class wrap div class thing thing1 div div class thing thing2 div div 列需要
  • Webpack 生产构建不加载任何内容

    我已经使用 React 和 Webpack 开发一个应用程序有一段时间了 我的开发环境运行良好 并且使用 webpack dev server 可以正确加载所有内容 我决定运行应用程序的生产构建 以查看最终产品的尺寸 并观察 webpack
  • 使用 java 8 将逗号分隔的字符串列表映射到列表

    我有一个逗号分隔字符串的列表 List format
  • 为什么 MQL4 OrderModify() 在回测时不会修改订单?

    I m trying to ADD a stop loss to my open market orders in MetaTrader 4 when a position gets 100 pips to the good which i