Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 726

 
Igor Petrov:

Огромное Спасибо !!!

Скажите пожалуйста, а можно ли это использовать (CHARTEVENT_CLICK) при тестировании советника ?
 
Yuriy Vins:
Скажите пожалуйста, а можно ли это использовать (CHARTEVENT_CLICK) при тестировании советника ?

Увы, но нет.

 
ukrop1203:

Я загружал данные с MetaQuotes Software Corp в меню "History Center", причем тут данные брокера.

У кого терминал скачал, оттуда и тянет в МТ4. А точнее, и скорее всего - чьим счётом в момент загрузки залогинен от туда и тянет историю.

 
Vladimir Baskakov:
Вы о чем? 

О том, что таких, как Вы нужно лишать статуса Продавца. Идите в ученики ассенизатора.

 
Andrei Novichkov:

О том, что таких, как Вы нужно лишать статуса Продавца. Идите в ученики ассенизатора.

Удачного дня
 

Всем привет,

Поставил кнопку закрытия ордеров в советник, а она закрывает все ордера в терминале. А надо только на текущем графике. Помогите, плиз

//----------------------------------------------------------------------
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
//---            
   if(sparam== "CloseButton")
      {
      CloseAllOpenPositions(MaxSlippage); 
      ObjectSetInteger(0,"CloseButton",OBJPROP_STATE,false);    
      }   
      if(sparam== "CloseBuy")
      {
      CloseAllBuy(MaxSlippage); 
      ObjectSetInteger(0,"CloseBuy",OBJPROP_STATE,false);    
      }         
         if(sparam== "CloseSell")
      {
      CloseAllSell(MaxSlippage); 
      ObjectSetInteger(0,"CloseSell",OBJPROP_STATE,false);    
      }         
//---      
  }
  
//+------------------------------------------------------------------+
void CloseAllOpenPositions(int intMaxSlippage)
  {
   bool checkOrderClose = true;        
   int index = OrdersTotal()-1;   
   while (index >=0 && OrderSelect (index,SELECT_BY_POS,MODE_TRADES)==true)
      {
         
      if (OrderType()==OP_BUY || OrderType()==OP_SELL)
         {         
         checkOrderClose = OrderClose (OrderTicket(), OrderLots(), OrderClosePrice(), MaxSlippage, CLR_NONE); 
         
         if(checkOrderClose == false)
            {
            int errorCode = GetLastError();
            
            if (errorCode == 1 || errorCode == 2 || errorCode == 5 || errorCode == 6 || errorCode == 64 || errorCode == 65 || errorCode == 132 || errorCode == 133 || errorCode == 139) break;
            else continue;        
            }          
         }           
      index--;
     }     
  }
  //----------------------------------------------------------------------------
 
Carcass77:

Всем привет,

Поставил кнопку закрытия ордеров в советник, а она закрывает все ордера в терминале. А надо только на текущем графике. Помогите, плиз

Замените функцию закрытия

//+------------------------------------------------------------------+
void CloseAllOpenPositions(int intMaxSlippage)
  {
   bool checkOrderClose=true;
   int index=OrdersTotal()-1;
   while(index>=0 && OrderSelect(index,SELECT_BY_POS,MODE_TRADES)==true)
     {
      if(OrderSymbol()==Symbol())   //Добавил  
        {

         if(OrderType()==OP_BUY || OrderType()==OP_SELL)
           {
            checkOrderClose=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),intMaxSlippage,CLR_NONE);

            if(checkOrderClose==false)
              {
               int errorCode=GetLastError();

               if(errorCode==1 || errorCode==2 || errorCode==5 || errorCode==6 || errorCode==64 || errorCode==65 || errorCode==132 || 
                errorCode==133||errorCode==139) break;
               else continue;
              }
           }

        }
      index--;
     }
  }
//+------------------------------------------------------------------+
 
Alekseu Fedotov:

Замените функцию закрытия

Заработало. Благодарю от души

 
Также, хотел добавить функцию множителя для шага с каждой сделкой. Подскажете?
 
Carcass77:
Также, хотел добавить функцию множителя для шага с каждой сделкой. Подскажете?

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

примерно так:

//_______________________________________________________________________
//возвращает суммарное кол-во открытых рыночных ордеров, в переменных
// lotmaxbuy_ и lotmaxsell_ вернет максимальные лоты по типам ордеров
int NumberOfOrders(int magic_,double &lotmaxbuy_,double &lotmaxsell_)
  {
   int i,ot,buy_=0,sell_=0,k=OrdersTotal();
   lotmaxbuy_=0.0; lotmaxsell_=0.0;
   for(i=0; i<k; i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
        {
         ot=OrderType();
         if((OrderMagicNumber()==magic_) && (OrderSymbol()==_Symbol))
           {
            if(ot==OP_BUY) { buy_++;  lotmaxbuy_  = fmax(lotmaxbuy_,OrderLots());  }
            if(ot==OP_SELL){ sell_++; lotmaxsell_ = fmax(lotmaxsell_,OrderLots()); }
           }
        }
     }
   return(buy_+sell_);
  }
//+------------------------------------------------------------------+
Причина обращения: