//+------------------------------------------------------------------+//| Function..: SequenceNumber |//| Purpose...: Generate a sequential number. |//| Returns...: dSeqNum - next sequence number. |//| Notes.....: MT4 keeps the value of the global variable at the |//| client terminal for 4 weeks since the last access. | //| Use SequenceNumber() to generate a unique identity |//| for each order (and passed via parameter <magic> |//| number, or converted to a string and passed via the |//| parameter <comment> to the OrderSend() function) as |//| the trade servers of some brokers do modify the |//| ticket number of a pending order when it changes to |//| a market order. |//| The same sequence number could, for example, be used |//| to identify the two positions of a straddle order. |//| ******************************************************//| * If the expert has to close partial lots, then MT4 *//| * retains in the new order the contents of the *//| * OrderMagicNumber() but loses OrderComment(). *//| ******************************************************//| Sample....: string sNumber=DoubleToStr(SequenceNumber(),0); |//| if(OrderSend("EURUSD",OP_BUY,1,Ask,3,Ask-25*Point, |//| Ask+25*Point,sNumber,16384,0,Green) > 0)|//| OrderSend("EURUSD",OP_BUY,1,Ask,3,Ask-25*Point, |//| Ask+65*Point,sNumber,16384,0,Green); |//+------------------------------------------------------------------+double SequenceNumber() {
double dSeqNum=1, d;
string sName="SequenceNumber";
while(GlobalVariableCheck("Semaphore")) d+=0;
GlobalVariableSet("Semaphore",1);
if(GlobalVariableCheck(sName)) dSeqNum=GlobalVariableGet(sName)+1;
GlobalVariableSet(sName,dSeqNum);
GlobalVariableDel("Semaphore");
return(dSeqNum);
}
请大致描述一下你的EA将做什么。有多少种不同类型的订单需要单独 管理。如果我们知道你真正想实现的目标,也许你的问题根本就不是问题。
我想在下单的时候有一个独特的标签,比如说神奇的数字。没有固定数量的订单。
每个新的订单都将被视为一个新的组,并被单独管理。
int ticket=OrderSend(Symbol(),OP_BUY,LotSize,MarketInfo(Symbol(),MODE_ASK),3,0,0,"My EA",12345,0,Green) & ticket=OrderSend(Symbol(),OP_BUY,LotSize,MarketInfo(Symbol(),MODE_ASK),3,0,0,"My EA",12345,0,Green);
我希望每个新的订单都有一个神奇的数字,而不是固定的12345,比如1,然后下一个订单是2,然后是3,然后是4等等。
另外,OrderSend是在一个不循环的函数中。如何做这样的事情?
比如说一个动态数组[i]?
当我试图关闭时,我可以通过OrdersTotal()和每一个独特的魔法数字数组[i]?当条件得到满足时,将在同一组中关闭这些订单。
请不要推荐这种无稽之谈 。 神奇的数字不是用来存储已经包含在订单中的值的。
你能告诉我订单中的Period();到底包含在哪里吗?
你能告诉我Period();这个命令中到底包含了什么吗?
不是的。
我认为,如果你不打算用这个专家,也不打算把它送人,那么你就可以用神奇号码来储存任何你想要的东西。
你能告诉我订单中的Period();到底是什么吗?
不是的。
我认为,如果你不打算用这个专家,也不打算把它送人,那么你可以用魔法号码来存储任何你想要的东西。
也许可以用一个函数 来存储递增的神奇数字
在每个OrderSend之前,运行该函数以找出下一个要分配的魔法号码。
你知道如何制作一个这样的函数吗?
是否知道如何制作这样的函数?
在这篇文章中,有一个相对复杂的例子->http://mqlmagazine.com/mql-programming/object-oriented-trading-an-oop-approach-to-trading/。
谢谢!
这真的很复杂,有没有更简单的方法?
我想让魔法数字随着每一个 新的订单而递增,比如1,然后下一个订单是2,然后是3,然后是4等等。
但是,这难道不能保证你永远不会 有两个具有相同唯一编号的订单吗?你的 "组 "将由每组中只有一个交易组成?我对你的理解正确吗?
你解释了你想做的事情(MN阵列,等等),基于你认为是解决问题的唯一办法,但你仍然没有解释问题本身,交易系统应该如何决定哪些订单要关闭,哪些要保留。如果一个人想手动交易,它将如何运作?也许有一个公开的交易系统与之相似,足以解释这个概念,以明确这是一个什么类型的系统?
例如,"通常"(非常频繁),人们试图关闭满足某些要求的订单,这些要求可以从订单本身 确定,例如 "最古老的订单","x点利润","收支平衡","x点损失 "等,而魔法数字只用于区分自己的交易和来自完全不同的EA的交易。
如果一个人只是看着图表上已经开好的订单 ,并且*没有写上ID,他可以手动交易(继续交易)这个系统吗?
在你的系统中,你需要一个单一订单的ID来决定该订单是否应该关闭,这是什么原因?如果每个订单都是唯一的,为什么不能使用票号本身?
对这个问题有更多的了解,就可以退一步,从不同的角度看待整个事情,也许可以找到一个更优雅、更容易的解决方案。
但是,这难道不能保证你永远不会 有两个具有相同唯一编号的订单吗?你的 "组 "将由每组中只有一个交易组成?我对你的理解正确吗?
你解释了你想做的事情(MN阵列,等等),基于你认为是解决问题的唯一办法,但你仍然没有解释问题本身,交易系统应该如何决定哪些订单要关闭,哪些要保留。如果一个人想手动交易,它将如何运作?也许有一个公开的交易系统与之相似,足以解释这个概念,以明确这是一个什么类型的系统?
例如,"通常"(非常频繁),人们试图关闭满足某些要求的订单,这些要求可以从订单本身 确定,例如 "最古老的订单","x点利润","收支平衡","x点损失 "等,而神奇的数字只是用来区分自己的交易和完全不同的EA的交易。
如果一个人只是看着图表上已经开好的订单 ,并且*没有写上ID,他可以手动交易(继续交易)这个系统吗?
在你的系统中,你需要一个单一订单的ID来决定该订单是否应该关闭,这是什么原因?如果每个订单都是唯一的,为什么不能使用票号本身?
了解更多这方面的情况,就可以退一步,从不同的角度看待整个事情,也许可以找到一个更优雅、更容易的解决方案。
"但是,这难道不能保证你永远不会 有两个具有相同的唯一号码的订单吗"
是的,有可能出现2个或更多具有唯一号码的订单。在分组订单后做增量
强这个函数 发出唯一的数字