文章 "使用限价订单替代止盈且无需修改 EA 的原始代码" - 页 6 1234567 新评论 justinmcridge 2020.08.16 23:35 #51 就会出现<堆栈 溢出> 错误!问题出在库文件中: <LimitTakeProfit.mqh>。 有人知道出了什么问题吗? justinmcridge 2020.08.17 00:05 #52 读者朋友们,你们好! 有没有人遇到过"堆栈 溢出 "错误? 我认为问题出在 "LimitTakeProfit.mqh "库中 Mario Marconi 2021.10.19 19:46 #53 你好,德米特里、 感谢您的有趣文章! 请您解释一下与以下各行(第 54、55、56 行)相关的错误 "参数传递为引用,预期为变量"(paramter passed as reference, variable expected)。 CSymbolInfo CLimitTakeProfit::c_Symbol = new CSymbolInfo(); CArrayLong CLimitTakeProfit::i_TakeProfit = new CArrayLong(); CArrayDouble CLimitTakeProfit::d_TakeProfit = new CArrayDouble(); 谢谢! Dmitriy Gizlyk 2021.10.19 21:05 #54 Mario Marconi CArrayDouble CLimitTakeProfit::d_TakeProfit = new CArrayDouble(); 谢谢! 您好,您使用的是? #include <Arrays\ArrayDouble.mqh> #include <Arrays\ArrayLong.mqh> #include <Trade\SymbolInfo.mqh> Mario Marconi 2021.10.20 10:01 #55 Dmitriy Gizlyk #:您好,请问您使用? 你好,德米特里、 以下几行正是写在您的 "LimitTakeProfit.mqh "上的: #include <Arrays\ArrayDouble.mqh> #include <Arrays\ArrayLong.mqh> #include <Trade\SymbolInfo.mqh> 更确切地说, 您的 EA " MACD Sample LImitTP.mq5 " 在编译时出现了 "参数传递为引用,变量为预期 " 的错误。 感谢您的回答! Dmitriy Gizlyk 2021.10.20 10:08 #56 Mario Marconi #:你好,德米特里、以下几行正是写在您的 "LimitTakeProfit.mqh "上的:更确切地说, 您的 EA " MACD Sample LImitTP.mq5 " 在编译时出现了 "参数传递为引用,变量为预期 " 的错误。感谢您的回答! 您好,必须在 paprameter 前添加 *。 CSymbolInfo * CLimitTakeProfit::c_Symbol = new CSymbolInfo(); CArrayLong * CLimitTakeProfit::i_TakeProfit = new CArrayLong(); CArrayDouble * CLimitTakeProfit::d_TakeProfit = new CArrayDouble(); Mario Marconi 2021.10.20 16:33 #57 Dmitriy Gizlyk #:嗨,您必须在 paprameter 前加上 *。 你好,德米特里、 还是有问题,同样的三行出现了以下错误: - 参数传递为引用,预期为变量 LimitTakeProfit.mqh 54 57 - 重新定义;类型修饰符不同 LimitTakeProfit.mqh 54 35 感谢您的回答! Rogerio Celentano Szterling 2022.12.08 02:39 #58 你好,德米特里、 我知道这篇文章发表有一段时间了,但我还是想谢谢你!这篇文章非常有用,你的解释非常清楚,而且这门课也非常好用。谢谢! 我相信我在发布的代码中发现了一个小错误。在函数 SetTakeProfits 执行到一半时,我们发现了这一行: switch((ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE)) 这一行位于所有 TP 的循环中。问题是,在循环的稍后部分,函数 CheckLimitOrder 被调用,而 CheckLimitOrder 反过来又调用函数 CheckOrderInHistory,这时可能会选择另一个位置。这意味着在循环的下一次迭代中,上述代码中的 "开关 "可能会不同。 为了解决这个问题,我认为应该在循环开始之前将position_type 保存在一个变量中。这样就可以了: bool CLimitTakeProfit::SetTakeProfits(ulong position_ticket, double new_tp=0) // (...) double position_volume=PositionGetDouble(POSITION_VOLUME); //********** 添加下一行 ENUM_POSITION_TYPE position_type=(ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE); //**************************** double closed=0; double closed_perc=0; double fix_closed_per=0; //--- for(int i=0;i<total;i++) { tp_request.comment="TP"+IntegerToString(i)+"_"+IntegerToString(position_ticket); if(i_TakeProfit.At(i)<tp_int && d_TakeProfit.At(i)>0) { if(closed>=100 || fix_closed_per>=100) break; //--- double lot=position_volume*MathMin(d_TakeProfit.At(i),100-closed_perc)/(100-fix_closed_per); lot=MathMin(position_volume-closed,lot); lot=c_Symbol.LotsMin()+MathMax(0,NormalizeDouble((lot-c_Symbol.LotsMin())/c_Symbol.LotsStep(),0)*c_Symbol.LotsStep()); lot=NormalizeDouble(lot,2); tp_request.volume=lot; //********** 修改下一行 //switch((ENUM_POSITION_TYPE)PositionGetInteger(POSITION_TYPE)) switch(position_type) //******************************* { case POSITION_TYPE_BUY: tp_request.type=ORDER_TYPE_SELL_LIMIT; tp_request.price=c_Symbol.NormalizePrice(open_price+i_TakeProfit.At(i)*c_Symbol.Point()); // (...) 希望这能说得通。再次感谢您的出色工作! Marcel Cardoso 2023.08.09 16:01 #59 大家好! 我遇到了[无效过期]问题,有人知道如何解决吗? Alison Rossete 2023.12.26 20:23 #60 您好。 在使用 LimitTakeProfit 测试 EA 时,它返回以下错误信息:"无效到期日"。 我试着在交易请求结构 中添加到期时间,但无济于事。 谁能帮帮我? 版主进行了机器翻译 1234567 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
读者朋友们,你们好!
有没有人遇到过"堆栈 溢出 "错误?
我认为问题出在 "LimitTakeProfit.mqh "库中
你好,德米特里、
感谢您的有趣文章!
请您解释一下与以下各行(第 54、55、56 行)相关的错误 "参数传递为引用,预期为变量"(paramter passed as reference, variable expected)。
CSymbolInfo CLimitTakeProfit::c_Symbol = new CSymbolInfo();
CArrayLong CLimitTakeProfit::i_TakeProfit = new CArrayLong();
CArrayDouble CLimitTakeProfit::d_TakeProfit = new CArrayDouble();
谢谢!
谢谢!
您好,您使用的是?
您好,请问您使用?
你好,德米特里、
以下几行正是写在您的 "LimitTakeProfit.mqh "上的:
更确切地说, 您的 EA " MACD Sample LImitTP.mq5 " 在编译时出现了 "参数传递为引用,变量为预期 " 的错误。
感谢您的回答!
你好,德米特里、
以下几行正是写在您的 "LimitTakeProfit.mqh "上的:
更确切地说, 您的 EA " MACD Sample LImitTP.mq5 " 在编译时出现了 "参数传递为引用,变量为预期 " 的错误。
感谢您的回答!
您好,必须在 paprameter 前添加 *。
嗨,您必须在 paprameter 前加上 *。
你好,德米特里、
还是有问题,同样的三行出现了以下错误:
- 参数传递为引用,预期为变量 LimitTakeProfit.mqh 54 57
- 重新定义;类型修饰符不同 LimitTakeProfit.mqh 54 35
感谢您的回答!
你好,德米特里、
我知道这篇文章发表有一段时间了,但我还是想谢谢你!这篇文章非常有用,你的解释非常清楚,而且这门课也非常好用。谢谢!
我相信我在发布的代码中发现了一个小错误。在函数 SetTakeProfits 执行到一半时,我们发现了这一行:
这一行位于所有 TP 的循环中。问题是,在循环的稍后部分,函数 CheckLimitOrder 被调用,而 CheckLimitOrder 反过来又调用函数 CheckOrderInHistory,这时可能会选择另一个位置。这意味着在循环的下一次迭代中,上述代码中的 "开关 "可能会不同。
为了解决这个问题,我认为应该在循环开始之前将position_type 保存在一个变量中。这样就可以了:
希望这能说得通。再次感谢您的出色工作!
大家好!
我遇到了[无效过期]问题,有人知道如何解决吗?
您好。
在使用 LimitTakeProfit 测试 EA 时,它返回以下错误信息:"无效到期日"。
我试着在交易请求结构 中添加到期时间,但无济于事。
谁能帮帮我?
版主进行了机器翻译