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

 
Artyom Trishkin:

Можно читать тикет ордера .

Есть ли аналогичная функция 

OrderGetTicket();

для mql4?

 
Seric29:

Есть ли аналогичная функция 

для mql4?

Есть, только не совсем такая. После выбора ордера надо определить тип ордера и тикет другими функциями.

OrderSelect - Торговые функции - Справочник MQL4
OrderSelect - Торговые функции - Справочник MQL4
  • docs.mql4.com
Чтобы определить, из какого списка выбран ордер, необходимо проанализировать его время закрытия. Если время закрытия ордера равно 0, то ордер является открытым или отложенным и взят из списка открытых ордеров терминала. Отличить открытый ордер от отложенного ордера можно по типу ордера. Если время закрытия ордера не равно 0, то ордер является...
 

Добрый день.

Есть функция для открытия сетки отложек с увеличением лота на i, 

Нужно чтобы сетка (лотов)строилась по мартину, т.е. лот1 =0.01,   лот2=0.02,   лот3 =лот2+лот 1.  ,   

в функции fLots() как это описать? 

 

extern int Count       = 4;      //Количество устанавливаемых ордеров
\\


for(i=1;i<=Count;i++)
    {
     {         
      res=OrderSend(Symbol(),OP_BUYLIMIT,fLots()*i,fND(Ask-(Distance*Point+i*Step*Point)),3,fND(BuyPrice-StopLoss*Point), fND(Ask-(Distance*Point+i*Step*Point))+TakeProfit*Point,"",MAGIC,expiration,Blue);    
  
      Sleep(3000);
      if(res<0) 
         {
            Print("ОШИБКА: ",GetLastError()); 
         } else {
            RefreshRates();
         }    
     }
    }
 

Хочу проверить в onInit есть ли открытые позиции, но почему-то не получается выбрать:


   for(int i=PositionsTotal(); i>0; i--)
      {
      smbol = PositionSelect(PositionGetSymbol(i));
      tickett = PositionGetTicket(i);
      
      Print("ticket(",i,") = ", tickett);
      Print(smbol);

      }
   Print("Position Total = ", PositionsTotal());

Получаю:


2019.05.01 00:11:32.177 breakeven (GBPUSD,H1) ticket(1) = 0

2019.05.01 00:11:32.177 breakeven (GBPUSD,H1) false

2019.05.01 00:11:32.177 breakeven (GBPUSD,H1) Position Total = 1



 
psyman:

Хочу проверить в onInit есть ли открытые позиции, но почему-то не получается выбрать:


Получаю:


2019.05.01 00:11:32.177 breakeven (GBPUSD,H1) ticket(1) = 0

2019.05.01 00:11:32.177 breakeven (GBPUSD,H1) false

2019.05.01 00:11:32.177 breakeven (GBPUSD,H1) Position Total = 1



Сразу, что бросилось в глаза:

for(int i=PositionsTotal(); i>0; i--)

Дальше не глядел, потому, что должно быть так при обратном цикле:

for(int i=PositionsTotal()-1; i>=0; i--)
 
Artyom Trishkin:

Сразу, что бросилось в глаза:

Дальше не глядел, потому, что должно быть так при обратном цикле:

А мне больше нравится такая запись

for(int i = PositionsTotal(); i-- > 0;)
 
Alexey Viktorov:

А мне больше нравится такая запись

Ну... Я показал понятную для начинающих ;)

 

//+----------------------------------------------------------------------------+
//|  Автор    : Ким Игорь В. aka KimIV,  http://www.kimiv.ru                   | //+----------------------------------------------------------------------------+ //|  Версия   : 19.02.2008                                                     | //|  Описание : Возвращает суммарный профит в валюте депозита                  | //|             закрытых с определённой даты позиций                           | //+----------------------------------------------------------------------------+ //|  Параметры:                                                                | //|    sy - наименование инструмента             (""   - любой символ,         | //|                                               NULL - текущий символ)       | //|    op - операция                             (-1   - любая позиция)        | //|    mn - MagicNumber                          (-1   - любой магик)          | //|    dt - Дата и время в секундах с 1970 года  ( 0   - с начала истории)     | //+----------------------------------------------------------------------------+ double GetProfitFromDateInCurrency(string sy="", int op=-1, int mn=-1, datetime dt=0) {   double p=0;   int    i, k=OrdersHistoryTotal();   if (sy=="0") sy=Symbol();   for (i=0; i<k; i++) {     if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {       if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {         if (OrderType()==OP_BUY || OrderType()==OP_SELL) {           if (mn<0 || OrderMagicNumber()==mn) {             if (dt<OrderCloseTime()) {               p+=OrderProfit()+OrderCommission()+OrderSwap();             }           }         }       }     }   }   return(p); } // код Кима изменил на это и теперь от считает профит за сегодня и обнуляется в полночь double GetProfitFromDateInCurrency1(string sy="0", int op=-1, int mn=-1) {   double p=0;   int    i, k=OrdersHistoryTotal();   datetime dt=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));   if (sy=="0") sy=Symbol();   for (i=0; i<k; i++) {     if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {       if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {         if (OrderType()==OP_BUY || OrderType()==OP_SELL) {           if (mn<0 || OrderMagicNumber()==mn) {             if (dt<OrderCloseTime()) {               p+=OrderProfit()+OrderCommission()+OrderSwap();             }           }         }       }     }   }   return(p); }

Здравствуйте. Помогите плиз с функцией подсчета профита от закрытых сделок вчера, позавчера и тд. хочу сделать Профит за сегодня:. профит за вчера, профит за позавчера

Для расчета профит за сегодня скопировал код/

или как сделать так, чтобы значение с профит сегодня переносил ниже в профит вчера, потом в позавчера
Файлы:
 
Lomonosov1991:

Здравствуйте. Помогите плиз с функцией подсчета профита от закрытых сделок вчера, позавчера и тд. хочу сделать Профит за сегодня:. профит за вчера, профит за позавчера

Для расчета профит за сегодня скопировал код/

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

 добавьте еще один параметр в описание ф-ции и измените условие проверки:

double GetProfitFromDateInCurrency(string sy="", int op=-1, int mn=-1, datetime dtstart, datetime dtstop)
....
if (OrderCloseTime()>=dtstart &&  dtstop<=OrderCloseTime()) {
 
Спасибо Игорь Макану. Функцию вчера сделал так
double GetProfitFromDateInCurrency2(string sy="0", int op=-1, int mn=-1)
{
  double p=0;
  int    i, k=OrdersHistoryTotal();
  datetime dt=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE))-24*60*60;
  datetime dtstart=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE));

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
               if (dt<OrderCloseTime() && OrderCloseTime()<=dtstart) {              
                  p+=OrderProfit()+OrderCommission()+OrderSwap();
                 
            }
          }
        }
      }
    }
  }
  return(p);
}
а функцию позавчера сделал так
double GetProfitFromDateInCurrency3(string sy="0", int op=-1, int mn=-1)
{
  double p=0;
  int    i, k=OrdersHistoryTotal();
  datetime dt=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE))-24*60*60*2;
  datetime dtstart=StrToTime(TimeToStr(TimeCurrent(), TIME_DATE))-24*60*60;

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) {
      if ((OrderSymbol()==sy || sy=="") && (op<0 || OrderType()==op)) {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (mn<0 || OrderMagicNumber()==mn) {
               if (dt<OrderCloseTime() && OrderCloseTime()<=dtstart) {              
                  p+=OrderProfit()+OrderCommission()+OrderSwap();
                 
            }
          }
        }
      }
    }
  }
  return(p);
}
А можно сделать чтобы через выходные не обнулялся? ну то есть чтобы в понедельник вчера для него было пятница. то есть как то убрать выходные?
Файлы:
Screenshot_2.png  844 kb