Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 560

 
Leo59:
У меня эксперт, в deinit() записывает в log файл 98496 строк в *.csv
Почему при завершении работы эксперта в тестере он выгружается по-разному:
- в случае выгрузки по окончанию даты тестирования всё нормально ( 98496 строк)
- в случае выгрузки по кнопке "Стоп", только около 10 % данных.
Кто знает, в чём может быть проблема?


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

лучше данные записывать непосредственно в старте.

 
Roman.:

Пацаны, как трактовать это предупреждение?

Благодарю.


функция должна задаваться переменное

например bool closee=OrderClose...........

  • return value of 'OrderSelect' should be checked
  • return value of 'OrderDelete' should be checked
  • return value of 'OrderSend' should be checked
  • return value of 'OrderClose' should be checked
  • return value of 'OrderModify' should be checked


для того, чтобы не было таких предупреждений нужно явно указать возврат в переменную
например так:
  • bool select1=OrderSelect..........
  • bool delete1=OrderDelete..........
  • bool close1=OrderClose..........
  • bool modify1=OrderModify..........
  • int send1=OrderSend..........
 
Добрый день. Подскажите, можно ли как то программно определить или рассчитать ширину/высоту на графике графического объекта OBJ_TEXT?
 
alxm:
Добрый день. Подскажите, можно ли как то программно определить или рассчитать ширину/высоту на графике графического объекта OBJ_TEXT?

посчитать количество символов, + размер шрифта, как то так?
 
cipsi:

Как найти OrderOpenPrice самого первого открытого ордера если известно:

1.Symbol

2.ордер BUY могут быть открыты от одного до множество

3.Magic

4.Различия между ордерами, наверное по тикету -найти наименьший тикет.


double PriceOpenFirstPos(string sy="", int op=-1, int mn=-1) {
  datetime t==0;
  double   r=0;
  int      i, k=OrdersTotal();

  if (sy=="0") sy=Symbol();
  for (i=0; i<k; i++) {
    if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
      if (OrderSymbol()==sy || sy=="") {
        if (OrderType()==OP_BUY || OrderType()==OP_SELL) {
          if (op<0 || OrderType()==op) {
            if (mn<0 || OrderMagicNumber()==mn) {
              if (t>OrderOpenTime() || t==0) {
                t=OrderOpenTime();
                r=OrderOpenPrice();
              }
            }
          }
        }
      }
    }
  }
  return(r);
}
 
psdmaster:
Прочитал статью про создание эксперта: https://book.mql4.com/ru/samples/expert

Подскажите как можно открыть сделку на одном баре а закрыть при появлении следующего.


1. При открытии сделки запоминаешь время бара

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

за пределами старта:

 int timeopen;

в старте там где у тебя открывается сделка:

 timeopen=Time[0];

Закрытие так:

if(timeopen!= Time[0]) OrderClose............
 
Zolotai:
Скажите пожалуйста. Как можно узнать количество открытых ордеров по данному символу, без циклов...


без цикла никак.

 

Уважаемые, нужна Ваша помощь.

Оптимизирую советника по индикатору, код индикатора ниже.

Оптимизация происходит медленно, в советнике сделал код, чтобы индикатор пересчитывался на новом баре, что не совсем подходит.

Просьба, посмотреть код индикатора, что в нем можно сделать, чтобы пересчет происходил быстрее.

#property indicator_separate_window
#property indicator_buffers 4
#property indicator_color1 Lime
#property indicator_color2 Yellow
#property indicator_color3 Red
#property indicator_color4 Aqua

//--- input parameters
extern int       Period_MA_1=14;
extern int       p2          =7;
extern int       p3          =5;
extern int       p4          =3;
extern int Limit=70;
//--- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_NONE);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexStyle(2,DRAW_LINE);
   SetIndexBuffer(2,ExtMapBuffer3);
   SetIndexStyle(3,DRAW_LINE);
   SetIndexBuffer(3,ExtMapBuffer4);
   IndicatorDigits(Digits+1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   int counted_bars=IndicatorCounted(),
   i,limit1,limit2,limit3,limit4;
   double impuls;
   if(counted_bars<0) return(-1);
   if(counted_bars>0) counted_bars--;
 
   limit1=Bars-counted_bars-1;
   if (limit1>Limit && Limit>0) limit1=Limit;
   limit2=limit1;
   limit3=limit2;
   limit4=limit3;
   if(limit1>0) 
     {
      limit1=500-Period_MA_1-1;
      limit2=limit1-p2;
      limit3=limit2-p3;
      limit4=limit3-p4;
     }
   for(i=limit1;i>=0;i--) {ExtMapBuffer1[i]=Close[i]-Close[i+Period_MA_1];}
   for(i=limit2;i>=0;i--) {ExtMapBuffer2[i]=iMAOnArray(ExtMapBuffer1, 0, p2, 0, MODE_EMA,i);}
   for(i=limit3;i>=0;i--) {ExtMapBuffer3[i]=iMAOnArray(ExtMapBuffer2, 0, p3, 0, MODE_EMA,i);}
   for(i=limit4;i>=0;i--) {ExtMapBuffer4[i]=iMAOnArray(ExtMapBuffer3, 0, p4, 0, MODE_EMA,i);}

   return(0);
  }
 

подскажите где почитать про классы в mt4?

почитал в справке, но там не объясняеться что значит такие строчки

CArray::CArray(void) : m_step_resize(16),
                       m_data_total(0),
                       m_data_max(0),
                       m_sort_mode(-1)
  {
  }

где читать про инициализацию переменных...

 
Vladon:


функция должна задаваться переменное

например bool closee=OrderClose...........

  • return value of 'OrderSelect' should be checked
  • return value of 'OrderDelete' should be checked
  • return value of 'OrderSend' should be checked
  • return value of 'OrderClose' should be checked
  • return value of 'OrderModify' should be checked


для того, чтобы не было таких предупреждений нужно явно указать возврат в переменную
например так:
  • bool select1=OrderSelect..........
  • bool delete1=OrderDelete..........
  • bool close1=OrderClose..........
  • bool modify1=OrderModify..........
  • int send1=OrderSend..........


Благодарю. Заработала без предупреждений:


Руководствовался примером из справочника :-)


OrderDelete

Осуществляет удаление ранее установленного отложенного ордера.

bool OrderDelete(
int ticket, // номер ордера
color arrow_color // цвет
);

Параметры

ticket

[in] Уникальный порядковый номер ордера.

arrow_color

[in] Цвет стрелки на графике. Если параметр отсутствует, или его значение равно CLR_NONE, то стрелка на графике не отображается.

Возвращаемое значение

Возвращает true при успешном завершении функции или false в случае ошибки. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().

Пример:

if(Ask>var1)
{
OrderDelete(order_ticket);
return(0);
}

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