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

 

Всем привет!

1) Скомпилировал советника

2) Запустил в тестере.

3) В журнале три записи:

2020.10.25 20:06:08.484 2020.09.24 00:00:00   ОБЛАКО test started

2020.10.25 20:06:07.015 TestGenerator: current spread 7 used
2020.10.25 20:05:51.296 Expert  ОБЛАКО GBPUSD,M1: loaded successfully


4)Визуализация стоит на месте стоит на месте. 

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

Пробовал запускать несколько других советников- -все работают.

Запускаю этот - все останавливается.

Кто-нибудь сталкивался с такой проблемой? Как исправить?

 
Andrey Ilinykh:

Если записывать  в журнал или файл расчетные значения, то как это поможет?

Найти ошибку, сформировать алгоритм.

 
Alexey Viktorov:

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

тангенс в любом случае привязан  км в час или пункт в милю или тысяча пунктов в день и это скорость . Размерность графика. и тангенс на нем угол привязанный к размерностям ординат и абсцис. С этого надо начинать.

 
Aleksei Stepanenko:

Да, опять же скорость получается, только единицы: пункты в минуту. А по поводу выходных и дырок принял для себя так: какие свечи есть на графике, то и есть интервал времени, а чего нет (дней/часов), то этого и не существует. Потому, что если учитывать выходные, а цена в это время стоит на месте, то скорость здесь будет заметно падать без всякого основания. Но это опять же, каждому своё:)

Зачем боятся скорости. Это лишь условность для приведения типов.
Как вариант функции определения угла:

struct PointPriceTime
  {
   double            price;
   datetime          time;
                     PointPriceTime(double p, datetime t) { price=p; time=t; };
   void              Set(double p, datetime t){ price=p; time=t;};
                     PointPriceTime(PointPriceTime &p){ price=p.price; time=p.time; };
                     PointPriceTime() { price=0.0; time=0; };
  };

double Angle(PointPriceTime &p1,PointPriceTime &p2) // возвращает угол в градусах в приведенной системе координат price-price, где по оси X 
  {                                                 // расстояние между x1 и  x2  = N*_Point, где N - количество минутных баров во временном промежутке отрезка. 
   static int tf[9]= {PERIOD_M1,PERIOD_M5,PERIOD_M15,PERIOD_M30,PERIOD_H1,PERIOD_H4,PERIOD_D1,PERIOD_W1,PERIOD_MN1};
   int i=0;
   while(i<9 && SeriesInfoInteger(_Symbol,tf[i],SERIES_FIRSTDATE)>p1.time)
      i++;
   if(i==9)
     {
      Print("Время левой границы вне диапазона исторических данных");
      return DBL_MAX;
     }
   int bar1 = iBarShift(_Symbol,tf[i],p1.time);
   int bar2 = iBarShift(_Symbol,tf[i],p2.time);
   if(bar1==bar2)
      return 0.0;
   return atan((p2.price-p1.price)/((bar1-bar2)*PeriodSeconds(tf[i])*_Point/60))*180/M_PI;
  }

После MT5 ощущение от работы MT4 просто ужасное. Доступ к истории какой-то кастрированный. О тиках даже молчу.



Файлы:
Angle.mq4  11 kb
iCanvas.mqh  49 kb
 

Пожалуйста, подскажите, существует ли возможность программно управлять отображением описаний торговых уровней на графике? Возможно ли средствами MQL4 отключить их (оставив при этом на графике сами торговые уровни) или изменить?


Мне необходимо визуально выделить некоторые торговые уровни, снабдив их своим описанием. Для этого я создаю горизонтальные линии, совпадающие по стилю с торговыми уровнями, но отличающиеся по цвету, задаю для них описание (OBJPROP_TEXT) и включаю отображение описаний объектов на графике (ChartSetInteger(0,CHART_SHOW_OBJECT_DESCR,true)). При этом созданное мной описание накладывается на то, что показано на скриншоте и в результате невозможно разобрать ни то, ни другое.

Возможно ли как-то отключить или изменить описания торговых уровней, созданные терминалом? Есть ли доступ к этим описаниям из MQL программы?

 
Janis Ozols:

Пожалуйста, подскажите, существует ли возможность программно управлять отображением описаний торговых уровней на графике? Возможно ли средствами MQL4 отключить их (оставив при этом на графике сами торговые уровни) или изменить?


Мне необходимо визуально выделить некоторые торговые уровни, снабдив их своим описанием. Для этого я создаю горизонтальные линии, совпадающие по стилю с торговыми уровнями, но отличающиеся по цвету, задаю для них описание (OBJPROP_TEXT) и включаю отображение описаний объектов на графике (ChartSetInteger(0,CHART_SHOW_OBJECT_DESCR,true)). При этом созданное мной описание накладывается на то, что показано на скриншоте и в результате невозможно разобрать ни то, ни другое.

Возможно ли как-то отключить или изменить описания торговых уровней, созданные терминалом? Есть ли доступ к этим описаниям из MQL программы?

Можно,

снимите галку.

1

 
Alekseu Fedotov:

Можно,
снимите галку.

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

Задавая вопрос, я пытался акцентировать внимание на том, что линии я убирать не хочу, мне нужно только изменить или удалить с графика их описания (показаны стрелками на скриншоте).  

 
Janis Ozols:

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

Задавая вопрос, я пытался акцентировать внимание на том, что линии я убирать не хочу, мне нужно только изменить или удалить с графика их описания (показаны стрелками на скриншоте).  

Они вам и не нужны, вы же создаёте свои линии на тех местах

 
Vitaly Muzichenko:

Они вам и не нужны, вы же создаёте свои линии на тех местах

Я хочу выделить только некоторые из существующих уровней (для примера, приведённого на скриншоте  самый верхний), а остальные оставить как есть. 

Если программно получить доступ ко описаниям этих уровней невозможно, то, вероятно, придётся отключить сами уровни, а затем на каждом тике опрашивать терминал, чтобы нарисовать их самостоятельно, выделив нужные другим цветом и снабдив другим описанием. И там ведь есть не только уровни открытия позиций, а ещё и стоп-лоссы и тейк-профиты, которые тоже придётся рисовать.

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

 

Подскажите, пожалуйста, простым языком в чем разница этих функций?

//+------------------------------------------------------------------+
int    CountOrder(int Order_Type) 
   {
    int Orders=0;
    for(int a=OrdersTotal()-1;a>=0;a--)
    {
     if(OrderSelect(a, SELECT_BY_POS, MODE_TRADES)==false) continue;
     if(OrderSymbol()!=_Symbol) continue;
     if(Order_Type == OrderType() || Order_Type == -1) Orders++;
    }
    return Orders;
   }
//+------------------------------------------------------------------+
int CounterOrderTradeType(ENUM_ORDER_TYPE order_type)
  {
   int cnt=0;
   for(int pos=OrdersTotal()-1;pos>=0;pos--)
      if(OrderSelect(pos,SELECT_BY_POS)==true)
         if(OrderSymbol()==_Symbol)
            if(OrderType()==order_type)
               cnt++;
   return (cnt);
  }
//+------------------------------------------------------------------+
Причина обращения: