任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 711

 
LBatters:

大家好)

我试图写一个函数来关闭一部分位置,但当我在测试器中运行时,138号弹出了错误。 我不明白问题出在哪里。 请帮助我。

这里是一个EA,这个功能应该在这里工作)

138 - "要求的价格已经过期,或者出价和要价混在一起"。

开盘/收盘价 不能重新计算,因为它就在那里,问题就在这里(你需要用MarketInfo请求价格 并给它一个值,并把这个 重命名为另一个变量)。

                 PriceCl    = NormalizeDouble((takeprofit + OrderOpenPrice())/t,Digits);  //примерную цену закрытия
                 order = OrderTicket();    //получили ордер
                 if(Bid>PriceCl) //если текущая цена оказалась выше нашей цены ,то закрываем часть ордера
                 {OrderClose(order,NormalizeDouble(lot*percent/100,2),PriceCl,3);}
 
7Konstantin7:

大家好。

我试图通过Kim更新一个简单的拖曳式EA,在关闭所有市场订单后删除挂单,但失败了(

我已添加了删除待处理订单的功能。

我还面临另一个问题,我应该无法解决,因为我不太擅长编码。

我想我应该写一个条件,比如说。

这只是另一个EA的一个例子。


请帮助我。

Kostya,做一个循环,计算所需类型的订单数量,然后随心所欲地删除它,不要耍小聪明。
 
_new-rena:
Kostya,做一个循环来计算所需类型的订单数量,然后按你的意愿删除,不要自作聪明。

我是个代码呆子)我在那里加了更多的停顿,也许会有帮助)

  if (OrderType()==OP_BUY || OrderType()==OP_SELL || OrderType()==OP_BUYSTOP || OrderType()==OP_SELLSTOP) {
 
7Konstantin7:

我是个代码书呆子) 我在上面多加了一些停顿,也许会有帮助)。

突出的不是问题。问题是,在你添加停顿之前,你应该想到,"这对你有什么好处?"它不会做任何事情.........而且添加它有什么意义吗?

我没有理解其余的内容,我喝醉了,不尊重金的代码......对不起......。

 
AlexeyVik:

突出的不是麻烦。问题是,在你添加挂单之前,你应该想到 "你有什么好处?"它没有做任何事情...而且添加它有什么意义吗?

其余的我不明白,我喝醉了,金的代码不尊重...对不起...。

没什么)我是这么想的,我必须写一个条件,现在我在想。

是的,这些代码不是从他那里得到的,至少是免费的,关于付费我不知道。

 
7Konstantin7:

它没有做任何事情)我这样想,我必须写一个条件,我在想。

我不知道如何做到这一点,但我有一个不同的代码,用于真实的。

对于真正的,每个经纪公司都有自己的代码,所以没有一个通用的。

 

问题解决了)想了很久)谢谢大家。

   if (gdProfit>BEGIN_PROFIT) {
    ClosePosFirstProfit();
    if (DeleteOrders) DeleteOrders();
  }
 

大家好!

我正面临着一个问题,即在一个五号标记 上关闭反订单。问题是,我需要在达到总利润时关闭,例如20个买单和33个卖单。我想用函数OrderCloseBy()关闭20个买单和20个卖单,用函数OrderClose()关闭其余13个卖单。

如果我们的固定点差是4位数,我们在关闭点差时就不会有任何问题,在使用函数OrderCloseBy()时也会保存点差。如果我们有一个5位数的点差,点差是浮动的,这就是为什么,我认为,当达到总利润时,订单没有被关闭,OrderCloseBy()函数在日志中争论。同时,如果我们在测试器中运行它,一切都正常关闭。

一个方向的订单,当达到总利润时,会顺利关闭。

谁遇到过这样的问题,解决这个问题的方案有哪些?

这里是关闭订单的功能。

  //-----------------------------------------------------------------------
  // функция подсчета открытых ордеров
  //-----------------------------------------------------------------------

  void OrderOpen()
   {
     Orders_BUY=0; Orders_SELL=0;
     for(int a=0; a<=OrdersTotal(); a++)
     {
      if(OrderSelect(a,SELECT_BY_POS,MODE_TRADES) == true && OrderType()==OP_BUY && OrderMagicNumber() == Magic) Orders_BUY=Orders_BUY+1;
      if(OrderSelect(a,SELECT_BY_POS,MODE_TRADES) == true && OrderType()==OP_SELL && OrderMagicNumber() == Magic) Orders_SELL=Orders_SELL+1;

      //if(OrderSelect(a,SELECT_BY_POS,MODE_TRADES) && OrderType()==OP_BUY) Orders_BUY=Orders_BUY+1;
      //if(OrderSelect(a,SELECT_BY_POS,MODE_TRADES) && OrderType()==OP_SELL) Orders_SELL=Orders_SELL+1;
      ProfitAll=ProfitAll+OrderProfit()+OrderSwap()+OrderCommission();
     }
   }
  
  //-----------------------------------------------------------------------
  // функция закрытия ордеров сначала разнонаправленных
  //-----------------------------------------------------------------------
  void ClosePos()
   {
   int ticket_1=0, ticket_2=0;
    
     for (int a=0; a<=OrdersTotal(); a++)
       {
         if(OrderSelect(a,SELECT_BY_POS,MODE_TRADES) == true) 
            {
            if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) // проверка по символу и магику
               {
                if(OrderType() == OP_BUY) ticket_1 = OrderTicket();
                if(OrderType() == OP_SELL) ticket_2= OrderTicket();   
               } 
            }
        }    
      if(ticket_1 != 0 && ticket_2 != 0) {          // если найдены разнонаправленные ордера
      res = OrderCloseBy(ticket_1,ticket_2,clrRed); }   // закроем их
       
      if(ticket_1 == 0 && ticket_2 != 0) {  CloseOrder_by_type(OP_SELL,Symbol());  }
      if(ticket_1 != 0 && ticket_2 == 0) {  CloseOrder_by_type(OP_BUY,Symbol());  }
    
    }

//---- Закрытие ордера по типу и комментарию ----//
void CloseOrder_by_type(int type, string sym)
{
   for(int k= OrdersTotal()-1;k>=0;k--)
   {
    
      if(OrderSelect(k,SELECT_BY_POS,MODE_TRADES)==true)
       {
           
      if(type == OrderType() && sym==OrderSymbol()&& OrderMagicNumber()==Magic)
         if(OrderType()<=1){ res = OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),350);}
         else { res = OrderDelete(OrderTicket());}
         if(!res)
               Print("Ошибка закрытия ордера. Код ошибки=",GetLastError());
            else
               Print("ордер успешно закрыт.");   
           
       }
   }
}  
 

请告知如何按照开单的顺序关闭订单。

我想重做这个功能。

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   |
//+----------------------------------------------------------------------------+
//|  Версия   : 19.02.2008                                                     |
//|  Описание : Закрытие позиций по рыночной цене сначала прибыльных           |
//+----------------------------------------------------------------------------+
//|  Параметры:                                                                |
//|    sy - наименование инструмента   (""   - любой символ,                   |
//|                                     NULL - текущий символ)                 |
//|    op - операция                   (-1   - любая позиция)                  |
//|    mn - MagicNumber                (-1   - любой магик)                    |
//+----------------------------------------------------------------------------+
void ClosePosFirstProfit(string sy="", int op=-1, int mn=-1) {
  int i, k=OrdersTotal();
  if (sy=="0") sy=Symbol();

  // Сначала закрываем прибыльные позиции
  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
            if (OrderProfit()+OrderSwap()>0) ClosePosBySelect();
          }
        }
      }
    }
  }
  // Потом все остальные
  k=OrdersTotal();
  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) ClosePosBySelect();
        }
      }
    }
  }
}
 
7Konstantin7:

请告知如何按照开单的顺序关闭订单。

我想重做这个功能。

答案是显而易见的。按开放时间对开放职位 进行排序。然后在列表中从排序的数组中关闭它们。