程序库: MT4Orders - 页 5 123456789101112...95 新评论 fxsaber 2016.11.04 14:16 #41 -Aleks-:找到了 - 谢谢 - 错误几乎没有了,但还有一个:OrderCloseBy' - 函数未定义 cPoza13-1.mqh 1885 8 //+------------------------------------------------------------------------------------------------------------------------------------+//| Возвращает TRUE, если один ордер закрылся другим//+------------------------------------------------------------------------------------------------------------------------------------+ bool cPoza::closeBy(int ticketB, int ticketA){ if(ticketB > 0 && ticketA > 0) { if(OrderCloseBy(ticketB, ticketA)) return true; else Print("Magic=", mMagic, " ",__FUNCTION__, " Встречное закрытие не вышло ticketB=", ticketB, " ticketA=", ticketA, " вызвало ошибку-", _LastError); } else return false; return false;}// 没有实现的东西://CloseBy 时刻--我还没有时间这样做。也许将来需要的时候会有时间。// 确定平仓头寸的 TP 和 SL - 目前(构建 1368),MQL5 不知道如何做到这一点。我为自己编写了这个库,我不使用 CloseBy。这就是我没有实现它的原因。也许我会尽快添加。作为临时解决方案,请在包含您的库之前添加以下几行#ifdef __MQL5__ bool OrderCloseBy( const int Ticket, const int Opposite, const color Arrow_Color = clrNONE ) { return(false); } #endif 不懂就问。编程0基础,想学MQL5语言,有没有必要先学C++?谢谢各位大佬! 任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. 轻松快捷开发 MetaTrader 程序的函数库(第十部分):与 MQL4 Aleksey Vyazmikin 2016.11.04 14:20 #42 fxsaber:当然有可能我觉得没必要 显然,应该这样做。事实上,DC 限制了订单 的最大数量,如果账户中有 15-20 个带有网格的智能交易系统(Expert Advisors),解决方法就是在接近订单限制的时刻将部分网格最小化,我们必须挖掘历史数据以了解头寸的真实财务结果。 Aleksey Vyazmikin 2016.11.04 14:22 #43 fxsaber:// 没有实现的东西://CloseBy 时刻--我还没有时间这样做。也许将来需要的时候会有时间。// 确定平仓头寸的 TP 和 SL - 目前(构建 1368),MQL5 不知道如何做到这一点。 这个库是我自己写的,我不使用 CloseBy。这就是我没有实现它的原因。也许在加速后我也会加入这个功能。那太好了,谢谢。CloseBy 对于在计算点中固定部分位置非常方便。 fxsaber 2016.11.04 14:24 #44 -Aleks-:在使用平均法构建网格时,我们还必须积极利用历史数据,事实上,DC 限制了订单 的最大数量,如果账户中有 15-20 个带有网格的 Expert Advisors,那么在接近订单限制时,解决方案就会被视为部分网格的崩溃,我们必须分别挖掘历史数据,以了解头寸的真实财务结果。 我将在下一个版本中添加 CloseBy 和历史加速功能。我只是不明白这是否是需要的(库已被使用),还是以防万一的建议。 Aleksey Vyazmikin 2016.11.04 14:25 #45 fxsaber:// 没有实现的东西://CloseBy 时刻--我还没有时间这样做。也许将来需要的时候会有时间。// 确定平仓头寸的 TP 和 SL - 目前(构建 1368),MQL5 不知道如何做到这一点。这个库是我自己写的,我不使用 CloseBy。所以我还没有实现它。也许等我熟悉了之后会尽快添加。作为临时解决方案,请在启用库之前添加以下几行#ifdef __MQL5__ bool OrderCloseBy( const int Ticket, const int Opposite, const color Arrow_Color = clrNONE ) { return(false); } #endif谢谢--在处理订单的部分编译成功了!现在我要解决语言不兼容造成的其他错误... Aleksey Vyazmikin 2016.11.04 14:27 #46 fxsaber: 我将在下一个版本中添加 CloseBy 和历史加速功能。我只是不明白这是需求(库已被使用)还是只是以防万一的建议。我使用了它,得到了非常有趣的结果,但我还没有在真实账户 上使用它(功能)--很快就会。 fxsaber 2016.11.07 08:31 #47 fxsaber: 会成功的!我通过 MT4Orders 在股票市场上做任何事情。我不会因为未结头寸的数量而限制自己。 但我不建议通过 MT4Orders 处理证券交易所的历史记录。即 MODE_TRADE - 没问题,MODE_HISTORY - 不需要在交易所 使用。 Maxim Dmitrievsky 2016.11.07 11:55 #48 在证券交易所不能设置止损,但可以打开交易。2016.11.07 10:41:20.468 Trades '4974': failed modify buy 0.00 sl: 0.00000, tp: 0.00000 -> sl: 10407.00000, tp: 0.00000 [Invalid request]在我看来,您没有在库中进行修改。if ((ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(Request.symbol, SYMBOL_TRADE_EXEMODE) == SYMBOL_TRADE_EXECUTION_EXCHANGE) Request.type_filling = ORDER_FILLING_RETURN;我知道你需要在这里添加: static bool MT4OrderModify( const int Ticket, const double Price, const double SL, const double TP, const datetime Expiration, const color Arrow_Color = clrNONE ) { MqlTradeRequest Request = {0}; // 订单和仓位出现相同票据的情况将被考虑在内 bool Res = ((Ticket != MT4ORDERS::Order.Ticket) || (MT4ORDERS::Order.Ticket <= OP_SELL)) ? (MT4ORDERS::ModifyPosition(Ticket, Request) ? true : MT4ORDERS::ModifyOrder(Ticket, Price, Expiration, Request)) : (MT4ORDERS::ModifyOrder(Ticket, Price, Expiration, Request) ? true : MT4ORDERS::ModifyPosition(Ticket, Request)); if (Res) { Request.tp = TP; Request.sl = SL; if ((ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(Request.symbol, SYMBOL_TRADE_EXEMODE) == SYMBOL_TRADE_EXECUTION_EXCHANGE) Request.type_filling = ORDER_FILLING_RETURN; Res = MT4ORDERS::NewOrderSend(Request); } return(Res); } 还是不行。 错误、漏洞、问题 Errors, bugs, questions MQL4 to MQL5 fxsaber 2016.11.07 13:40 #49 Maxim Dmitrievsky:他不能在证券交易所设置止损,但他可以开仓交易。2016.11.07 10:41:20.468 Trades '4974': failed modify buy 0.00 sl: 0.00000, tp: 0.00000 -> sl: 10407.00000, tp: 0.00000 [Invalid request]事实上,这几乎是开发人员的一个错误。添加这一行 static bool ModifyPosition( const int Ticket, MqlTradeRequest &Request ) { const bool Res = ::PositionSelectByTicket(Ticket); if (Res) { Request.action = TRADE_ACTION_SLTP; Request.position = Ticket; Request.symbol = ::PositionGetString(POSITION_SYMBOL); // 指定一张票是不够的! } return(Res); }在我看来,在 lib 中您没有指定修改。 一切都在这里。 Maxim Dmitrievsky 2016.11.07 14:09 #50 fxsaber:事实上,这几乎是开发人员的一个错误。添加这一行 static bool ModifyPosition( const int Ticket, MqlTradeRequest &Request ) { const bool Res = ::PositionSelectByTicket(Ticket); if (Res) { Request.action = TRADE_ACTION_SLTP; Request.position = Ticket; Request.symbol = ::PositionGetString(POSITION_SYMBOL); // 指定一张票是不够的! } return(Res); } 这里一切正常。 是的,它就是这样工作的,谢谢......订单拣选速度变慢了,是的......但到目前为止,我还没有发现其他错误....实际上,这是一个很好的库,我认为它对加快订单拣选速度很有意义。 123456789101112...95 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
找到了 - 谢谢 - 错误几乎没有了,但还有一个:
OrderCloseBy' - 函数未定义 cPoza13-1.mqh 1885 8
//+------------------------------------------------------------------------------------------------------------------------------------+
//| Возвращает TRUE, если один ордер закрылся другим
//+------------------------------------------------------------------------------------------------------------------------------------+
bool cPoza::closeBy(int ticketB, int ticketA)
{
if(ticketB > 0 && ticketA > 0)
{
if(OrderCloseBy(ticketB, ticketA)) return true;
else Print("Magic=", mMagic, " ",__FUNCTION__, " Встречное закрытие не вышло ticketB=", ticketB, " ticketA=", ticketA, " вызвало ошибку-", _LastError);
}
else return false;
return false;
}
//CloseBy 时刻--我还没有时间这样做。也许将来需要的时候会有时间。
// 确定平仓头寸的 TP 和 SL - 目前(构建 1368),MQL5 不知道如何做到这一点。
我为自己编写了这个库,我不使用 CloseBy。这就是我没有实现它的原因。也许我会尽快添加。
作为临时解决方案,请在包含您的库之前添加以下几行
bool OrderCloseBy( const int Ticket, const int Opposite, const color Arrow_Color = clrNONE )
{
return(false);
}
#endif
当然有可能我觉得没必要
显然,应该这样做。事实上,DC 限制了订单 的最大数量,如果账户中有 15-20 个带有网格的智能交易系统(Expert Advisors),解决方法就是在接近订单限制的时刻将部分网格最小化,我们必须挖掘历史数据以了解头寸的真实财务结果。
//CloseBy 时刻--我还没有时间这样做。也许将来需要的时候会有时间。
// 确定平仓头寸的 TP 和 SL - 目前(构建 1368),MQL5 不知道如何做到这一点。
那太好了,谢谢。CloseBy 对于在计算点中固定部分位置非常方便。
在使用平均法构建网格时,我们还必须积极利用历史数据,事实上,DC 限制了订单 的最大数量,如果账户中有 15-20 个带有网格的 Expert Advisors,那么在接近订单限制时,解决方案就会被视为部分网格的崩溃,我们必须分别挖掘历史数据,以了解头寸的真实财务结果。
//CloseBy 时刻--我还没有时间这样做。也许将来需要的时候会有时间。
// 确定平仓头寸的 TP 和 SL - 目前(构建 1368),MQL5 不知道如何做到这一点。
这个库是我自己写的,我不使用 CloseBy。所以我还没有实现它。也许等我熟悉了之后会尽快添加。
作为临时解决方案,请在启用库之前添加以下几行
bool OrderCloseBy( const int Ticket, const int Opposite, const color Arrow_Color = clrNONE )
{
return(false);
}
#endif
谢谢--在处理订单的部分编译成功了!现在我要解决语言不兼容造成的其他错误...
我将在下一个版本中添加 CloseBy 和历史加速功能。我只是不明白这是需求(库已被使用)还是只是以防万一的建议。
我使用了它,得到了非常有趣的结果,但我还没有在真实账户 上使用它(功能)--很快就会。
会成功的!我通过 MT4Orders 在股票市场上做任何事情。我不会因为未结头寸的数量而限制自己。
在证券交易所不能设置止损,但可以打开交易。
在我看来,您没有在库中进行修改。
Request.type_filling = ORDER_FILLING_RETURN;
我知道你需要在这里添加:
{
MqlTradeRequest Request = {0};
// 订单和仓位出现相同票据的情况将被考虑在内
bool Res = ((Ticket != MT4ORDERS::Order.Ticket) || (MT4ORDERS::Order.Ticket <= OP_SELL)) ?
(MT4ORDERS::ModifyPosition(Ticket, Request) ? true : MT4ORDERS::ModifyOrder(Ticket, Price, Expiration, Request)) :
(MT4ORDERS::ModifyOrder(Ticket, Price, Expiration, Request) ? true : MT4ORDERS::ModifyPosition(Ticket, Request));
if (Res)
{
Request.tp = TP;
Request.sl = SL;
if ((ENUM_SYMBOL_TRADE_EXECUTION)::SymbolInfoInteger(Request.symbol, SYMBOL_TRADE_EXEMODE) == SYMBOL_TRADE_EXECUTION_EXCHANGE)
Request.type_filling = ORDER_FILLING_RETURN;
Res = MT4ORDERS::NewOrderSend(Request);
}
return(Res);
}
他不能在证券交易所设置止损,但他可以开仓交易。
事实上,这几乎是开发人员的一个错误。添加这一行
{
const bool Res = ::PositionSelectByTicket(Ticket);
if (Res)
{
Request.action = TRADE_ACTION_SLTP;
Request.position = Ticket;
Request.symbol = ::PositionGetString(POSITION_SYMBOL); // 指定一张票是不够的!
}
return(Res);
}
在我看来,在 lib 中您没有指定修改。
事实上,这几乎是开发人员的一个错误。添加这一行
{
const bool Res = ::PositionSelectByTicket(Ticket);
if (Res)
{
Request.action = TRADE_ACTION_SLTP;
Request.position = Ticket;
Request.symbol = ::PositionGetString(POSITION_SYMBOL); // 指定一张票是不够的!
}
return(Res);
}