设为首页 收藏本站 切换语言

请教一下各位大声,我想根据以下代码,在相关条件下平掉锁仓的单子,这个代码应

| 发表于 2024-3-21 08:03:29 | 显示全部楼层 |复制链接
请教一下各位大声,我想根据以下代码,在相关条件下平掉锁仓的单子,这个代码应该怎么写,请赐教。


void lock(int Ordertype)
  {
   double Price1,Lot1,Price2,Lot2;
   bool locked;
   if(Ordertype == OP_BUY)
     {
      OrderSend(Symbol(), OP_BUY, GetsellLots()-GetbuyLots(), Ask, 3, 0, 0, 0, 0, 0, BlueViolet);
      locked = TRUE;
     }
   if(Ordertype == OP_SELL)
     {
      OrderSend(Symbol(), OP_SELL, GetbuyLots()-GetsellLots(), Bid, 3, 0, 0, 0, 0, 0, BlueViolet);
      locked = TRUE;
     }
   return (0);
  }
//+------------------------------------------------------------------+/
//+-------------------------计算开单数-------------------------------+
int GetOrdersTotal(int intOrderType)
  {
   int buy=0,sell=0,total=0;
   for(int i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)
         continue;
      if(OrderSymbol()!=Symbol())
         continue;
      //---- check order type
      if(OrderType()==OP_BUY)
        {
         buy++;
        }
      if(OrderType()==OP_SELL)
        {
         sell++;
        }
      total++;
     }
   if(intOrderType==OP_BUY)
      return(buy);
   if(intOrderType==OP_SELL)
      return(sell);
   if(intOrderType==6)
      return(total);
   return(99999);
  }
//+------------------------------------------------------------------+
//+-------------------------计算buy下单量---------------------------+
double GetbuyLots()
  {
   datetime lasttime=Time[Bars-1];
   double buylots,selllots;
   for(int  i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)
         continue;
      if(OrderSymbol()!=Symbol())
         continue;
      if(OrderType()==OP_BUY)
        {
         buylots=OrderLots()+buylots;
        }
     }

   return(buylots);
  }
//+------------------------------------------------------------------+
//+-------------------------计算sell下单量---------------------------+
double GetsellLots()
  {
   datetime lasttime=Time[Bars-1];
   double selllots;
   for(int  i=0; i<OrdersTotal(); i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false)
         continue;
      if(OrderSymbol()!=Symbol())
         continue;
      if(OrderType()==OP_SELL)
        {
         selllots=OrderLots()+selllots;
        }
     }

   return(selllots);
  }
//+--------------------------------------------------------------
//+------------------------------------------------------------------+
举报

评论 使用道具

精彩评论4

hq2808
DD
| 发表于 2024-3-21 08:24:59 | 显示全部楼层
没有总体代码,看不出你想表达啥条件
先要找到锁仓单子的订单编号,再用OrderCloseBy函数执行平仓即可
怎么找到锁仓单子才是重点,你的下单代码里面没有注记或特定的标识码,很难找到相对应的单子的
举报

点赞 评论 使用道具

天下有道
DD
 楼主 | 发表于 2024-3-21 08:45:41 | 显示全部楼层
hq2808 发表于 2024-3-21 08:24
没有总体代码,看不出你想表达啥条件
先要找到锁仓单子的订单编号,再用OrderCloseBy函数执行平仓即可
怎么 ...

可以直接加个代码进行标注吧,然后通过检索,在执行平仓操作
举报

点赞 评论 使用道具

hq2808
DD
| 发表于 2024-3-21 09:24:10 | 显示全部楼层
天下有道 发表于 2024-3-21 08:45
可以直接加个代码进行标注吧,然后通过检索,在执行平仓操作

OrderSend的comment或者magic都可以指定,或者下对冲单的时候,直接把要对冲的单子的订单编号写到对冲单的comment或者magic,这样到达条件的时候就可以直接检索出来了
举报

点赞 评论 使用道具

westwuwei
DDD
| 发表于 2024-3-28 14:28:51 | 显示全部楼层
对于任何一个已知的单子,你可以查找以下锁仓配对:在所有“方向相反、手数一样的单子"中,开仓时间最早的单子,如果存在,作为锁仓单。
举报

点赞 评论 使用道具

发新帖
EA交易
您需要登录后才可以评论 登录 | 立即注册

简体中文
繁體中文
English(英语)
日本語(日语)
Deutsch(德语)
Русский язык(俄语)
بالعربية(阿拉伯语)
Türkçe(土耳其语)
Português(葡萄牙语)
ภาษาไทย(泰国语)
한어(朝鲜语/韩语)
Français(法语)