[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 165

 
Где ж тут прячется неисправность ')' - wrong parameters count причем 4 раза? Может это не так надо писать?
//-----------------------------------------------------------------------------+ 
//  Удаление объекта OBJ_HLINE горизонтальная линия  /Blue/Red          |  
//-----------------------------------------------------------------------------+   
 void DelHLine(color cl, string nm="", double p1=0, int st=0, int wd=1)  
  { 
     int    obj_total= ObjectsTotal(OBJ_HLINE); 
   
  for(int i=0;i<obj_total;i++) 
   {
     if(ObjectType(OBJ_HLINE)==true) 
     {
        if(ObjectGet(OBJPROP_COLOR)==Red)
         { 
           if(ObjectGet(OBJPROP_PRICE1)>Ask) ObjectDelete(FrDnNam);
         } 
     }
  }
    
    for(i=0;i<obj_total;i++) 
       {
         if(ObjectType(OBJ_HLINE)==true)
         {
          if(ObjectGet(OBJPROP_COLOR)==Blue) 
         { 
          if(ObjectGet(OBJPROP_PRICE1)<Bid) ObjectDelete(FrApNam); 
       }
       
    } 
   }

    return; 
  }
 
Проверь ObjectGet(), должно быть два параметра.
 
Roger:

Используйте функцию NormalizeDouble(lot,2)

Благодарю. Подозреваю, что это то, что я искал.

splxgf:

Спасибо за обсуждение. Ваша информация так же пригодится.

 
Operr:
Где ж тут прячется неисправность ')' - wrong parameters count причем 4 раза? Может это не так надо писать?
В функциях ObjectType() и ObjectGet() пропущены имена объектов
 
Operr:
Где ж тут прячется неисправность ')' - wrong parameters count причем 4 раза? Может это не так надо писать?

//------------------------------------------------------------+ 
//  Удаление объекта OBJ_HLINE горизонтальная линия  /Blue/Red|  
//------------------------------------------------------------+   
void DelHLine(string nm="")  
{int obj_total=ObjectsTotal();
  for(int i=0;i<obj_total;i++) 
  {if(nm==ObjectName(i)&&ObjectType(nm)==OBJ_HLINE)
   {color cl=ObjectGet(nm,OBJPROP_COLOR);double pr=ObjectGet(nm,OBJPROP_PRICE1);
    if((cl==Red&&pr>Ask)||(cl==Blue&&pr<Bid))ObjectDelete(nm);}}}
 
Уважаемые, подскажите, можно ли принудительно обновить билд в МТ4? А то при перезапуске терминала не обновляет.
 

Господа профессионалы, оптять нуждаюсь в Вашей помощи!

Ниже приведен отрывок кода, отвечающий за закрытие сделок, но дело в том, что при неисполнении отложенных ордеров он их не удаляет, не могу понять почему. Но когда нужно закрыть исполненный отложенный ордер, то все проходит правильно, а если ордер не исполнен, то он так и висит, до тех пор пока не исполнится...

OrderSelect(0, SELECT_BY_POS, MODE_TRADES);
Magic = OrderMagicNumber();
orderticket = OrderTicket();

if (OrdersTotal() == 1 && Magic == 111 && OrderType( ) == 0)
{
if (H1_BUY_5 == 0 || H1_BUY_1 == 0)
{
OrderClose(orderticket, lots, Bid, 5, Yellow);
if (OrdersTotal() == 1) OrderDelete(orderticket, Brown);
}

}

 

Xaoss1990:

Ниже приведен отрывок кода, отвечающий за закрытие сделок, но дело в том, что при неисполнении отложенных ордеров он их не удаляет, не могу понять почему.


if (OrdersTotal() == 1 && Magic == 111 && OrderType( ) == 0)


это мешает
 

Вставляю в советник функции, чтобы при срабатывании стоплосса в безубытке закрывал 1/3 открытого лота, но почему-то не работает.

Уважаемые, подскажите, что неправильно ?

//=======================================================================================     
void BuyCloseOneThird(string sy="", int op=-1, int mn=-1) {
  double pr=0;
  int    i, k=OrdersTotal(), np=-1;

  if (sy=="0") sy=Symbol();
  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && OrderType()==OP_BUY) {
        if (mn<0 || OrderMagicNumber()==mn) {
          if (Bid>OrderOpenPrice() && Bid==OrderStopLoss()) {
    if (OrderSelect(np, SELECT_BY_POS, MODE_TRADES)) {
      ClosePosBySelect();}
    }
  }
}
}
}
}
//=======================================================================================     
void SellCloseOneThird(string sy="", int op=-1, int mn=-1) {
  double pr=0;
  int    i, k=OrdersTotal(), np=-1;

  if (sy=="0") sy=Symbol();
  for (i=k-1; i>=0; i--) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if ((OrderSymbol()==sy || sy=="") && OrderType()==OP_BUY) {
        if (mn<0 || OrderMagicNumber()==mn) {
          if (Ask<OrderOpenPrice() && Ask==OrderStopLoss()) {
    if (OrderSelect(np, SELECT_BY_POS, MODE_TRADES)) {
      ClosePosBySelect();}
    }
  }
}
}
}
}

//+------------------------------------------------------------------+
void ClosePosBySelect() {
  bool   fc;
  color  clClose;
  double pa, pb, pp;
  int    err, it;
double ll = MathCeil(OrderLots() / 3.0 * 10.0) / 10.0;

  if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
    for (it=1; it<=5; it++) {
      if (!IsTesting() && (!IsExpertEnabled() || IsStopped())) break;
      while (!IsTradeAllowed()) Sleep(5000);
      RefreshRates();
      pa=MarketInfo(OrderSymbol(), MODE_ASK);
      pb=MarketInfo(OrderSymbol(), MODE_BID);
      if (OrderType()==OP_BUY) {
        pp=pb; clClose=Red;
      } else {
        pp=pa; clClose=Blue;
      }
      ll=OrderLots();
      fc=OrderClose(OrderTicket(), ll, pp, Slippage, clClose);
      if (fc) {
        PlaySound("wave"); break;
      } else {
        err=GetLastError();
        if (err==146) while (IsTradeContextBusy()) Sleep(1000*11);
        Print(OrderTicket(),"  Ask=",pa,"  Bid=",pb,"  pp=",pp);
        Print("sy=",OrderSymbol(),"  ll=",ll,"  sl=",OrderStopLoss(),
              "  tp=",OrderTakeProfit(),"  mn=",OrderMagicNumber());
        Sleep(1000*5);
      }
    }
  } 
}
 
Sancho77:

Вставляю в советник функции, чтобы при срабатывании стоплосса в безубытке закрывал 1/3 открытого лота, но почему-то не работает.

Уважаемые, подскажите, что неправильно ?


Наверное, потоу, что сначала вычисляете лот, а потом

ll=OrderLots();
fc=OrderClose(OrderTicket(), ll, pp, Slippage, clClose);
Причина обращения: