如何创建一个神奇的数字阵列? - 页 2

 
7bit:
请大致描述一下你的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]?当条件得到满足时,将在同一组中关闭这些订单。

 
7bit:
请不要推荐这种无稽之谈 神奇的数字不是用来存储已经包含在订单中的值的。

你能告诉我订单中的Period();到底包含在哪里吗?
 
qjol:
你能告诉我Period();这个命令中到底包含了什么吗?

不是的。

我认为,如果你不打算用这个专家,也不打算把它送人,那么你就可以用神奇号码来储存任何你想要的东西。

 
qjol:

你能告诉我订单中的Period();到底是什么吗?
什么是OrderPeriod()?
 
gordon:

不是的。

我认为,如果你不打算用这个专家,也不打算把它送人,那么你可以用魔法号码来存储任何你想要的东西。


也许可以用一个函数 来存储递增的神奇数字

在每个OrderSend之前,运行该函数以找出下一个要分配的魔法号码。

你知道如何制作一个这样的函数吗?

 
johnnybegoode:

是否知道如何制作这样的函数?

在这篇文章中,有一个相对复杂的例子--http://mqlmagazine.com/mql-programming/object-oriented-trading-an-oop-approach-to-trading/。
 

谢谢!
这真的很复杂,有没有更简单的方法?
 
johnnybegoode:


我想让魔法数字随着每一个 新的订单而递增,比如1,然后下一个订单是2,然后是3,然后是4等等。

但是,这难道不能保证你永远不会 有两个具有相同唯一编号的订单吗?你的 "组 "将由每组中只有一个交易组成?我对你的理解正确吗?

你解释了你想做的事情(MN阵列,等等),基于你认为是解决问题的唯一办法,但你仍然没有解释问题本身,交易系统应该如何决定哪些订单要关闭,哪些要保留。如果一个人想手动交易,它将如何运作?也许有一个公开的交易系统与之相似,足以解释这个概念,以明确这是一个什么类型的系统?

例如,"通常"(非常频繁),人们试图关闭满足某些要求的订单,这些要求可以从订单本身 确定,例如 "最古老的订单","x点利润","收支平衡","x点损失 "等,而魔法数字只用于区分自己的交易和来自完全不同的EA的交易。

如果一个人只是看着图表上已经开好的订单 ,并且*没有写上ID,他可以手动交易(继续交易)这个系统吗?

在你的系统中,你需要一个单一订单的ID来决定该订单是否应该关闭,这是什么原因?如果每个订单都是唯一的,为什么不能使用票号本身?

对这个问题有更多的了解,就可以退一步,从不同的角度看待整个事情,也许可以找到一个更优雅、更容易的解决方案。

 
7bit:

但是,这难道不能保证你永远不会 有两个具有相同唯一编号的订单吗?你的 "组 "将由每组中只有一个交易组成?我对你的理解正确吗?

你解释了你想做的事情(MN阵列,等等),基于你认为是解决问题的唯一办法,但你仍然没有解释问题本身,交易系统应该如何决定哪些订单要关闭,哪些要保留。如果一个人想手动交易,它将如何运作?也许有一个公开的交易系统与之相似,足以解释这个概念,以明确这是一个什么类型的系统?

例如,"通常"(非常频繁),人们试图关闭满足某些要求的订单,这些要求可以从订单本身 确定,例如 "最古老的订单","x点利润","收支平衡","x点损失 "等,而神奇的数字只是用来区分自己的交易和完全不同的EA的交易。

如果一个人只是看着图表上已经开好的订单 ,并且*没有写上ID,他可以手动交易(继续交易)这个系统吗?

在你的系统中,你需要一个单一订单的ID来决定该订单是否应该关闭,这是什么原因?如果每个订单都是唯一的,为什么不能使用票号本身?

了解更多这方面的情况,就可以退一步,从不同的角度看待整个事情,也许可以找到一个更优雅、更容易的解决方案。


"但是,这难道不能保证你永远不会 有两个具有相同的唯一号码的订单吗"

是的,有可能出现2个或更多具有唯一号码的订单。在分组订单后做增量

 

强这个函数 发出唯一的数字

//+------------------------------------------------------------------+
//| 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);
}