如何获得同一货币订单编号 - 页 2

 
caohongbin520:

要实现你说的这些其实没必要一定要找到所有订单的订单号再做操作的,在你EA的逻辑实现中一定有其他的方式。

过滤掉其他货币对的订单: 

void OnStart()
  {
//---
   long ticket[100];
   OrderTicketRecord(ticket,Symbol());
   for(int i=0;i<ArraySize(ticket);i++)
    if(ticket[i]>0) 
      {
        Print(i," ",ticket[i]); 
        if(OrderSelect(ticket[i],SELECT_BY_TICKET,MODE_TRADES))
        //做你想对这张订单做的操作,可通过这张订单的其他属性来确定是你EA中所谓的第几张订单...
        //....
      }

  }
//+------------------------------------------------------------------+
void OrderTicketRecord(long & ticket[],string _symbol)
{    
   int total = OrdersTotal();
   if(total == 0) return;
   ArrayResize(ticket,total);
   for(int i=0;i<total;i++)
   {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
      {
         if(OrderSymbol()== symbol/* your symbol*/)
            ticket[i] = OrderTicket();
         else
            ticket[i] = -1; //其他货币对订单号一律设为-1
      }
   }
}
 
代码 慢慢研究  其实我发现 是我计算机思想问题  逻辑问题
 
问题解决谢谢 我已经可以实现同类 操作了  基本可以了 
 
caohongbin520:

你要想按照顺序

1.可以自己对ticket进行排序,一般先下的单ticket要小一些

2.如果不放心ticket,自己EA下单时传入递增得magic值

3.还可以对时间进行排序 

个人目前经验来看,这些顺序与平仓,盈利,设置,资金管理等没多大关系。你要实现什么样的功能,可以详细描述出来,大伙交流一下,没准不用那么复杂~

 

我要实现这个功能  我同时 下了 GU 一单 多 单 那么 下一个 空 EU  空单

形成货币对冲

我需要找到这2个订单

然后 找到这2个订单的盈利

只要 盈利 大于10点 就平仓

平调这2个货币的  明白了吗

每次下 2个货币  我还没考虑加仓的问题 我怕 加仓太复杂 订单不好找了

 

什么叫只要这个对冲组合的盈利大于10点?

你完全没必要关心订单号。

如果帐户中只有这组对冲订单(加仓也一样处理),那么直接获取帐户当前的profit。

如果还有其他货币对订单,那么在计算profit的时候过滤掉就行了。

 
caohongbin520:

我要实现这个功能  我同时 下了 GU 一单 多 单 那么 下一个 空 EU  空单

形成货币对冲

我需要找到这2个订单

然后 找到这2个订单的盈利

只要 盈利 大于10点 就平仓

平调这2个货币的  明白了吗

每次下 2个货币  我还没考虑加仓的问题 我怕 加仓太复杂 订单不好找了

你可以这样解决:

OP_BUY:GU  ticket:111111

OP_SELL:EU ticket:222222 magic:111111(做空单时将多单的ticket当做空单的magic,实现配对)