我的EA做了一个重复输入 - 页 9 1234567891011 新评论 Snelle Moda 2014.01.19 10:43 #81 你好 这种方法只有在当前头寸大小为零,并且新的交易以所需的头寸大小成功执行时才有效。请看代码。#include <Trade\Trade.mqh> //--- global variables CTrade trade; bool position_opened=false; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnTick() { bool conditions_to_open; ENUM_ORDER_TYPE order_type; double lot; double price,sl,tp; //---...set variables //--- inside OnTick() if(conditions_to_open && !position_opened) //-- Or position_opened==false { if(trade.PositionOpen(_Symbol,order_type,lot,price,sl,tp,"comment") && (trade.ResultRetcode()==10009 || trade.ResultRetcode()==10008)) //-- Or others condition according to your needs { //--- set the global variable to true to avoid duplicate orders position_opened=true; Print("Success!"); } else { Print("Error = ",GetLastError(), "trade error = ", trade.ResultRetcode()); //--- Sets the global variable to false // position_opened=false; //-- Not needed as position_opened is already false return; } } //--- }但是,如果您的EA正在调转头寸:从多头转为空头,或者反之亦然,并且这个动作是在两个不同的交易中执行的呢?在第一笔交易后,"position_opened "布尔值被设置为 "TRUE",EA无法打开第二笔交易,因为条件是检查"if(condition_to_open && !position_opened)",所以第二笔交易将被阻止。如果仓位大小只是部分打开呢?你需要第二笔交易来使你的仓位规模达到正确的大小。最后,"长话短说",你总是需要PositionSelect(Symbol())函数来计算当前的头寸大小,这就是问题的起点(和这个论坛主题)。在关键时刻,当EA调用PositionSelect(Symbol())时,终端尚未更新当前头寸大小,EA使用错误的头寸大小工作,并向交易服务器发送了新的双倍订单。我认为(figurelli)的方法更好,因为你不得不等待,直到EA将PositionSelect(Symbol())函数更新为正确的仓位大小。bool fatalError=false; // atention: declare this as global .... if(fatalError == false) { if(m_Trade.PositionOpen(Symbol(), ORDER_TYPE_BUY, LotSize, Price, 0, 0)) { Print("Position opened in ", Symbol()); int maxTimeout=0; while(!PositionSelect(Symbol())) { Sleep(100); maxTimeout++; if(maxTimeout > 100) { Print("### PositionSelect fatal error!"); fatalError = true; break; } } Print("--> PositionSelect delay=",maxTimeout * 100); break; } } Alain Verleyen 2014.01.19 10:56 #82 snelle_moda:你好 这种方法只有在当前头寸大小为零,并且新的交易以所需的头寸大小成功执行时才有效。请看代码。但是,如果您的EA正在调转头寸:从多头转为空头,或者反之亦然,并且这个动作是在两个不同的交易中执行的呢?在第一笔交易后,"position_opened "布尔值被设置为 "TRUE",EA无法打开第二笔交易,因为条件是检查"if(condition_to_open && !position_opened)",所以第二笔交易将被阻止。如果仓位大小只是部分打开呢?你需要第二笔交易来使你的仓位规模达到正确的大小。最后,"长话短说",你总是需要PositionSelect(Symbol())函数来计算当前的头寸大小,这就是问题的起点(和这个论坛主题)。在关键时刻,当EA调用PositionSelect(Symbol())时,终端尚未更新当前头寸大小,EA使用错误的头寸大小工作,并向交易服务器发送了新的双倍订单。我认为(figurelli)的方法更好,因为你不得不等待,直到EA更新PositionSelect(Symbol())函数。你是对的,两种方法都有局限性。这个问题的根源现在已经明确了。每个人都必须根据自己的策略来调整自己的代码。我不认为有一种通用的方法可以适用于所有情况。 Ubzen 2014.01.19 10:59 #83 我们是否需要为伟大而强大的mql5提供一个OrderSendReliable()库? Alain Verleyen 2014.01.19 11:08 #84 Ubzen: 我们是否需要为伟大而强大的mql5建立一个OrderSendReliable()库? 我不认为讽刺会有什么帮助。尽管这显然是一个糟糕的设计,导致了这样的复杂性。 Snelle Moda 2014.01.19 11:13 #85 angevoyageur:你是对的,两种方法都有局限性。这个问题的根源现在已经明确了。每个人都必须根据自己的策略来调整自己的代码。我不认为有一种通用的方法可以适用于所有情况。或者我们必须等待Metaquotes的人自己的 "官方声明"。服务台是否已经有了回应? Ubzen 2014.01.19 11:14 #86 angevoyageur: 我不认为讽刺能有什么帮助。尽管这显然是一个糟糕的设计,导致了这样的复杂性。如果我同意你的观点,你会认为这是没有帮助的吗?.我只是教了睡到终止交易的解决方案,这让我想起了OrderSendReliable()。我教这些会被更优雅地解决。这也让我想起了old_documents的处理方法......在那里,它的内容是{和所有的交易都应该停止}。总之,道歉并不是要挑剔mql5。 Alain Verleyen 2014.01.19 11:18 #87 snelle_moda:或者我们必须等待Metaquotes的人自己的 "官方声明"。服务台是否已经有了回应?不,我只是在想这个问题......如果所有相关的人都就这个问题向ServiceDesk写一张票,可能会很有用。然而,我非常怀疑MQ是否愿意改变这种设计。但我们可以试试。人们可以写信给ServiceDesk,并在这里报告票号。我的是 错误,MetaTrader 5 MQL,打开,开始。2013.12.23 19:08,#916435 Get in touch with developers using Service Desk! www.mql5.com We therefore attach great importance to all user reports about issues in our programs and try to answer each one of them. Alain Verleyen 2014.01.19 11:25 #88 Ubzen:如果我同意你的观点,你会认为这是没有帮助的吗? .我只是教了睡到终止交易的解决方案,让我想起了OrderSendReliable()。我教这些会被更优雅地解决。这也让我想起了old_documents的处理方法......在这里,它的内容是{和所有的交易都应该停止}。总之,道歉并不是要挑剔mql5。 我想知道类似的问题是否也存在于mql4中,在过去的几个月里,我在mql4论坛上至少读到了2个用户抱怨双重交易的主题。我不确定这是否相关,但可能值得检查 这些主题。你也读过这些内容吗? Ubzen 2014.01.19 11:26 #89 angevoyageur: 我想知道在mql4中是否也存在类似的问题,我在过去几个月中在mql4论坛上至少读到了2个用户抱怨双重交易的主题。我不确定这是否相关,但可能值得检查这些主题。你也读过这些内容吗?是的,但很难判断其是否因为编码不良。双重交易是一个问题,甚至在多重交易线程之前。它的传统处理方式是snelle_moda的处理方式。 Alain Verleyen 2014.01.19 11:39 #90 Ubzen:是的,但很难判断其是否因为编码不良。双重交易是一个问题,甚至在多重交易线程之前。它的传统处理方式是snelle_moda的处理方式。 我不确定我理解你的意思。我们在这个话题中讨论的这个问题不是由糟糕的编码造成的,而是由mql5中糟糕的设计造成的(这是我的观点,或者说这只是一个错误?)你说的 "多个交易线 "是什么意思? Get in touch with developers using Service Desk! www.mql5.com We therefore attach great importance to all user reports about issues in our programs and try to answer each one of them. 1234567891011 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你好
这种方法只有在当前头寸大小为零,并且新的交易以所需的头寸大小成功执行时才有效。
请看代码。
但是,如果您的EA正在调转头寸:从多头转为空头,或者反之亦然,并且这个动作是在两个不同的交易中执行的呢?
在第一笔交易后,"position_opened "布尔值被设置为 "TRUE",EA无法打开第二笔交易,因为条件是检查"if(condition_to_open && !position_opened)",所以第二笔交易将被阻止。
如果仓位大小只是部分打开呢?你需要第二笔交易来使你的仓位规模达到正确的大小。
最后,"长话短说",你总是需要PositionSelect(Symbol())函数来计算当前的头寸大小,这就是问题的起点(和这个论坛主题)。
在关键时刻,当EA调用PositionSelect(Symbol())时,终端尚未更新当前头寸大小,EA使用错误的头寸大小工作,并向交易服务器发送了新的双倍订单。
我认为(figurelli)的方法更好,因为你不得不等待,直到EA将PositionSelect(Symbol())函数更新为正确的仓位大小。
你好
这种方法只有在当前头寸大小为零,并且新的交易以所需的头寸大小成功执行时才有效。
请看代码。
但是,如果您的EA正在调转头寸:从多头转为空头,或者反之亦然,并且这个动作是在两个不同的交易中执行的呢?
在第一笔交易后,"position_opened "布尔值被设置为 "TRUE",EA无法打开第二笔交易,因为条件是检查"if(condition_to_open && !position_opened)",所以第二笔交易将被阻止。
如果仓位大小只是部分打开呢?你需要第二笔交易来使你的仓位规模达到正确的大小。
最后,"长话短说",你总是需要PositionSelect(Symbol())函数来计算当前的头寸大小,这就是问题的起点(和这个论坛主题)。
在关键时刻,当EA调用PositionSelect(Symbol())时,终端尚未更新当前头寸大小,EA使用错误的头寸大小工作,并向交易服务器发送了新的双倍订单。
我认为(figurelli)的方法更好,因为你不得不等待,直到EA更新PositionSelect(Symbol())函数。
你是对的,两种方法都有局限性。
这个问题的根源现在已经明确了。每个人都必须根据自己的策略来调整自己的代码。我不认为有一种通用的方法可以适用于所有情况。
我们是否需要为伟大而强大的mql5建立一个OrderSendReliable()库?
你是对的,两种方法都有局限性。
这个问题的根源现在已经明确了。每个人都必须根据自己的策略来调整自己的代码。我不认为有一种通用的方法可以适用于所有情况。
或者我们必须等待Metaquotes的人自己的 "官方声明"。
服务台是否已经有了回应?
如果我同意你的观点,你会认为这是没有帮助的吗?.
我只是教了睡到终止交易的解决方案,这让我想起了OrderSendReliable()。我教这些会被更优雅地解决。
这也让我想起了old_documents的处理方法......在那里,它的内容是{和所有的交易都应该停止}。
总之,道歉并不是要挑剔mql5。
或者我们必须等待Metaquotes的人自己的 "官方声明"。
服务台是否已经有了回应?
不,我只是在想这个问题......如果所有相关的人都就这个问题向ServiceDesk写一张票,可能会很有用。然而,我非常怀疑MQ是否愿意改变这种设计。但我们可以试试。
人们可以写信给ServiceDesk,并在这里报告票号。我的是
如果我同意你的观点,你会认为这是没有帮助的吗? .
我只是教了睡到终止交易的解决方案,让我想起了OrderSendReliable()。我教这些会被更优雅地解决。
这也让我想起了old_documents的处理方法......在这里,它的内容是{和所有的交易都应该停止}。
总之,道歉并不是要挑剔mql5。
是的,但很难判断其是否因为编码不良。双重交易是一个问题,甚至在多重交易线程之前。它的传统处理方式是snelle_moda的处理方式。
是的,但很难判断其是否因为编码不良。双重交易是一个问题,甚至在多重交易线程之前。它的传统处理方式是snelle_moda的处理方式。