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

 
makssub #:
Добрый день. Подскажите как найти цену открытия ближайшего ордера к текущей цене. MQL4. Может есть примеры?

перебираем все открытые позиции и сравниваем количество пунктов от текущей цены до открытия сделки.

пример берем любой, чуть выше есть код - перебор ордеров в цикле.

 
MakarFX #:

Что такое OrdersClose ?

Смотри здесь

догнал, спасибо

 
PapaYozh #:


Не надо фантазировать. Суть того, что происходит - вызов метода, который является конструктрором с другим набором параметров. Никакой объект при это не создаётся.

Вам бы разобрались чем вызов конструктора от вызова метода/функции отличается

PapaYozh #:

Аналогичный вызов конструктора, который тоже не приведёт к желяемому результату:

 по сабжу - в сигнатуру метода ( конструктора ? который вызывается как метод? ) добавьте передачу указателя по ссылке

 
Taras Slobodyanik #:

перебираем все открытые позиции и сравниваем количество пунктов от текущей цены до открытия сделки.

пример берем любой, чуть выше есть код - перебор ордеров в цикле.

Сорри, опять пишу криво. Попробую еще раз)

Есть сетка открытых ордеров. Мне нужно найти цену открытия (OrderOpenPrice) самого ближайший ордера к текущей цены. Чтобы дальше строить сетку, а то они у меня в чуть ли не в хаотичном порядке строятся.

Как писать перебор я понимаю, но выразить грамотно в языке, чтобы это корректно работало не могу ( как собака, все понимаю))

Если есть примеры или ссылка на примеры, напишите плз. MQL4

 
Igor Makanu #:

Вам бы разобрались чем вызов конструктора от вызова метода/функции отличается

 по сабжу - в сигнатуру метода ( конструктора ? который вызывается как метод? ) добавьте передачу указателя по ссылке

В Java с этим, вроде, все Ок.

Можно и конструктор родителя вызвать из конструктора потомка, единственное требование - конструктор родителя вызывается первой командой в конструкторе потомка.

В MQL проблема, если нет пустого конструктора для родителя, т.к. при создании потомка именно он вызывается неявно.

--

PS.

И если у родителя есть конструктор без параметров и конструктор с параметрами, то какой вызовется неявно из конструктора потомка с параметрами?

 
Igor Makanu #:


 по сабжу - в сигнатуру метода ( конструктора ? который вызывается как метод? ) добавьте передачу указателя по ссылке


Это на костыль похоже.

Не правда ли?

 

Всем привет. НАверно задам глупый вопрос, но решения пока не нашел.

Создал индикатор. У него есть кнопки на графике, по нажатию кнопки рисуется линия и кнопка становиться активной.

Как сделать так, чтобы при переключении ТФ сохранялась активность кнопки и местоположении самой линии ?

Ведь при переключении ТФ у нас срабатывает функция Deinit, а в ней стоит удаление всех обьектов. Как бы это обязательное условие, чистить за собой все с графика.

Я пробовал запоминать статус кнопки в переменную, но как заметил в индикаторах они обнуляются, если переключить ТФ.

В советнике такого нет, там значение внутренних переменных не обнуляется. Получается если индикатор расчитал какие то значения и сохранил во внутренние переменные, то при переключении ТФ их сбросит. Почему так и как это обойти.

 
makssub #:

Сорри, опять пишу криво. Попробую еще раз)

Есть сетка открытых ордеров. Мне нужно найти цену открытия (OrderOpenPrice) самого ближайший ордера к текущей цены. Чтобы дальше строить сетку, а то они у меня в чуть ли не в хаотичном порядке строятся.

Как писать перебор я понимаю, но выразить грамотно в языке, чтобы это корректно работало не могу ( как собака, все понимаю))

Если есть примеры или ссылка на примеры, напишите плз. MQL4

Сперва разница равно 1000 перед циклом. В цикле если цена открытия минус текущая цена по модулю меньше разницы то разница равна полученному значению и тикет запоминаем в переменную.
 
Igor Makanu #:

Вам бы разобрались чем вызов конструктора от вызова метода/функции отличается


А чем он, кстати, отличается кроме того, что его вызов происходит неявно при создании объекта?

 
void ClosseAll()
{
  for(int i = OrdersTotal()-1; i>=0; i--)
  {
     if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
     {
       if (OrderType() == OP_BUY)
         { 
         if (!OrderClose(OrderTicket(), OrderLots(), Bid, slip))
             Print("Не удалось закрыть ордера на покупку!");
         }
       if (OrderType() == OP_SELL)
         { 
         if (!OrderClose(OrderTicket(), OrderLots(), Ask, slip))
             Print("Не удалось закрыть ордер на продажу!");
         }
     }
  }
}

Доброго времени суток !!!

Прошу помочь  в написании кода для закрытия мин и макс ордеров в сеточном советнике при достижении определенного уровня просадки 

Написал две функции для расчета профита мин и макс ордеров

//+----------------------------------------------------------------------------+
//| Расчет профита максимального ордера в сетке                                |
//+----------------------------------------------------------------------------+
double GetProfitMaxOrder()
{
  int max_ticket = 0;
  double max_ticket_profit = 0 ;
  {
   for (int cnt = OrdersTotal() - 1; cnt >= 0; cnt--) 
    {
    if(OrderSelect(ticket, SELECT_BY_TICKET, MODE_TRADES)) 
     {
      if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic)
       {
        if(OrderType() == OP_BUY || OrderType() == OP_SELL)
        {
          if(OrderTicket() > max_ticket) max_ticket = ticket;
          {
           max_ticket_profit =  OrderProfit();
          }
        }
       }
     }
    }
  }
  return( max_ticket_profit);
}
//+----------------------------------------------------------------------------+
//| Расчет профита минимального ордера в сетке                                 |
//+----------------------------------------------------------------------------+
double GetProfitMinOrder()
{
  int min_ticket=INT_MAX;
  double min_ticket_profit = 0;
  {
   for (int cnt = OrdersTotal() - 1; cnt >= 0; cnt--) 
    {
     if(OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES))
     {
       if(OrderSymbol() == Symbol() && OrderMagicNumber() == Magic) 
        {
          if (OrderType() == OP_BUY || OrderType() == OP_SELL)
           {
            if(OrderTicket() < min_ticket)
              min_ticket = OrderTicket();
              {
               min_ticket_profit = OrderProfit(); 
              }
           }
        }
      }
    }
  }
  return(min_ticket_profit);
}

Написал функцию которая калькулирует сумму этих ордеров. Вроде бы  здесь проблем нет.

Вопрос в том как закрыть только эти два ордера вот какую функцию я нашел ClosseAll(). 

Вопрос в том как вместо функции OrderTicket() которая закрывает все ордера 

прикрутить переменные  max_ticket и min_ticket которые определяют тикеты  только мин и макс ордеров в сетке

Или у ВАС есть ВАШЕ решение этого вопроса

Причина обращения: