Новая версия платформы MetaTrader 5 build 1870: Добавление символов в Обзор рынка по ISIN - страница 8

 
alex2andr:
У меня на кастомном символе была такая проблема в апреле 2018. График моргал, переключался с М5 на Н1 на мгновение. Тогда мне удалось разобраться с такой проблемой. Дело в том что данные кастомного символа могут быть не готовы для вывода. В таком случае у меня на графике М5 выводились бары Н1. График выводился каждые 50 мсек по таймеру. Данные могут быть не готовы, например, из-за того что отсутствует история за этот период. Запрос этих данных вызывает подгрузку, кастомный символ формируется и в следующие 50 мсек выводится уже по нормальному. Из-за этого возникало такое моргание.
 Для решения проблемы во первых загрузил всю историю необходимую для расчета кастомного символа, чтоб она хранилась локально, во вторых перед выводом кастомного графика поставил условие - график выводится только если данные кастомного символа готовы для вывода.
Думаю сейчас проблема схожая - график моргает когда данные котировок не готовы для вывода и выскакивает Н1, через мгновение они уже готовы и вы снова видите свой таймфрейм. Это проблема терминала плюс особенности некоторых советников.

Хотя сейчас у меня другая проблема, я вообще не могу увидеть свой кастомный символ. После выхода 1870 билда -
ChartSetSymbolPeriod - функция не работает никак. Хотя возвращает true-выполнение успешно, но кастомного графика нет.

Только один робот работает на EURUSD, не кастомний символ. VPS рестартировал, мигания остались. Загрузка процесора меньше 1%, 12GB RAM свободная эсть. 


Для меня ChartSetSymbolPeriod() работает (билд 1870), проблеми не увидел. Сделал так: Ручной способом создал кастомний Custom1 на базе EURUSD. Открил новая графика Custom1 (на Н1), история конечно нет. Потом следующий код (Експерта) запустил на этот Custom1 и TF переключилься нормално из Н1 на М1, потом тики начали загружаться. Но невозможно поменят больше TF ручной способом если Експерт работает, не знаю это так надо было. Но Експерт нормально "увидель" котировки EURUSD из кастомний Custom1.


MqlTick tick[1];

int OnInit() 
{ 
   EventSetTimer(1); 
   ChartSetSymbolPeriod(0,"Custom1",PERIOD_M1); 
   return(INIT_SUCCEEDED); 
}

void OnTimer()
{
   SymbolInfoTick("EURUSD",tick[0]);
   CustomTicksAdd("Custom1",tick);  
}

void OnDeinit(const int reason) { EventKillTimer(); }
 
Ilia Gontmakher:

Добрый день!

Нет ли данных, когда ожидается новый билд? (после 1870)
Там должен быть апдейт для функции WebRequest()

От этого зависит, ждать или менять свои советники/скрипты

Я тоже ожидаю что бы добавили POST/ DELETE (http метод) на WebRequest()

 
Комментарии, не относящиеся к этой теме, были перенесены в "В одном индикаторе появилась ошибка деления на ноль".
 
Dimitar Petkov:

Только один робот работает на EURUSD, не кастомний символ. VPS рестартировал, мигания остались. Загрузка процесора меньше 1%, 12GB RAM свободная эсть. 


Для меня ChartSetSymbolPeriod() работает (билд 1870), проблеми не увидел. Сделал так: Ручной способом создал кастомний Custom1 на базе EURUSD. Открил новая графика Custom1 (на Н1), история конечно нет. Потом следующий код (Експерта) запустил на этот Custom1 и TF переключилься нормално из Н1 на М1, потом тики начали загружаться. Но невозможно поменят больше TF ручной способом если Експерт работает, не знаю это так надо было. Но Експерт нормально "увидель" котировки EURUSD из кастомний Custom1.


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

 
Vladimir Karputov:

Проблема с заменой по "Ctrl"+"H":

При попытке повторного вызова по "Ctrl"+"H" выпадающий список предыдущих замен пустой.

Build 1874.

Теперь замена по "Ctrl"+"H" работает - выпадающий список теперь помнит предыдущие замены:


Спасибо!

 

Билд 1874

 В индикаторе (часть кода)

//+------------------------------------------------------------------+
//|  OnCalculate function                                            |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {

   ArraySetAsSeries(time,true);

   datetime Fp=0,Ep=0,pFp=0,pEp=0,Arr[];
   int Count=0,bars=0,dt=0;

   int limit;
   if(prev_calculated==0 || prev_calculated<0 || prev_calculated>rates_total)
      limit=_Nbar;
   else
      limit=rates_total-prev_calculated;

   for(int i=limit;i>=0;i--)
     {

      if(CopyTime(NULL,TimeFrame,time[i],1,Arr)>0)Ep=Arr[0]-1*PeriodSeconds(PERIOD_CURRENT);
      else return(0);

      if(CopyTime(NULL,TimeFrame,time[i],1+Bar,Arr)>0)Fp=Arr[0];
      else return(0);


      if(delta==false && ptime!=Fp)
        {
         Coef=SKO(_Symbol,_Period,Fp,Ep,degre,kstd,HL,ML,LL);
         ptime=Fp;
        }

      if(delta==false)
        {

         if(CopyTime(NULL,0,time[i],Ep,Arr)>0)bars=ArraySize(Arr)-1;
         else return(0);

         sqh_buffer[i+shift]=HL+Coef*bars;
         fx_buffer[i+shift]=ML+Coef*bars;
         sql_buffer[i+shift]=LL+Coef*bars;
        }

      if(delta==true)
        {

         Coef=SKO(_Symbol,_Period,Fp,time[i],degre,kstd,HL,ML,LL);

         sqh_buffer[i]=HL;
         fx_buffer[i]=ML;
         sql_buffer[i]=LL;
        }

     }

   for(int i=shift;i>=0;i--)
     {
      sqh_buffer[i]=sqh_buffer[shift]+Coef*(shift-i);
      fx_buffer[i]=fx_buffer[shift]+Coef*(shift-i);
      sql_buffer[i]=sql_buffer[shift]+Coef*(shift-i);
     }

   return(rates_total);

  }

получаю ошибку

2018.07.06 14:08:14.205 i-Regr4_05 (Si-9.18,H4) array out of range in 'i-Regr4_05.mq5' (119,38)

в этой строке

 if(CopyTime(NULL,TimeFrame,time[i],1,Arr)>0)Ep=Arr[0]-1*PeriodSeconds(PERIOD_CURRENT);

В массиве time[i] .

Ошибка не стабильная. В коде ошибка или в билде? Ранее всё работало корректно.

 
Aleksey Vyazmikin:

Билд 1874

 В индикаторе (часть кода)

получаю ошибку

в этой строке

В массиве time[i] .

Ошибка не стабильная. В коде ошибка или в билде? Ранее всё работало корректно.

Какое значение у переменной _Nbar?

Оно не может быть >=rates_total?

 

1874 на чартах кастомного символа BITMAP_LABEL-объекты не всегда удаляются после успешного ObjectDelete - объект полностью доступен любое время, пока не сделаешь принудительный ChartRedraw.

С чартами обычных символов такого не происходит.

 
fxsaber:

1874 на чартах кастомного символа BITMAP_LABEL-объекты не всегда удаляются после успешного ObjectDelete - объект полностью доступен любое время, пока не сделаешь принудительный ChartRedraw.

С чартами обычных символов такого не происходит.

На обычных чартах ChartRedraw() принудительно происходит каждый тик.

Получается, на кастомных - тик не приводит к принудительному обновлению чарта!?

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

 
Slava:

Какое значение у переменной _Nbar?

Оно не может быть >=rates_total?

Вот код... даже и не знаю, может ли, не должно вроде как

#property version   "1.001"
#property indicator_chart_window
#property indicator_buffers   3
#property indicator_plots     3
#property indicator_type1     DRAW_LINE
#property indicator_type2     DRAW_LINE
#property indicator_type3     DRAW_LINE
#property indicator_color1    clrLimeGreen
#property indicator_color2    clrGold
#property indicator_color3    clrGold
#property indicator_label1    "top"   
#property indicator_label2    "middle"  
#property indicator_label3    "bottom"  
//+------------------------------------------------------------------+
//| Type of Regression Channel                                       |
//+------------------------------------------------------------------+
enum ENUM_Polynomial
  {
   linear=1,      // linear 
   parabolic=2,   // parabolic 
   Third_power=3, // third-power 
   linear2=4,// linear СКО 
  };

input ENUM_TIMEFRAMES TimeFrame=PERIOD_D1;// Тайм фрейм 
input int Bar=3; //Цикл расчета с TF
input ENUM_Polynomial degre=linear;//Метод расчета
input double kstd=2.0;//Коэффициент СКО
input int Nbar=2000;//Колличество баров для отображения индикатора.
input bool delta=false;
input int shift=5;//Прогноз, баров

//--- indicator buffers
double sqh_buffer[];
double fx_buffer[];
double sql_buffer[];

double HL,ML,LL,Coef;
double HL0,ML0,LL0;
datetime ptime=0;

string F_Symbol;
ENUM_TIMEFRAMES F_Period;
datetime F_Fp,F_Ep;
ENUM_Polynomial F_degre;
double F_kstd;
double F_HL,F_ML,F_LL,F_HL0,F_ML0,F_LL0,F_Coef;
int _Nbar;
//+------------------degre------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,sqh_buffer,INDICATOR_DATA);
   SetIndexBuffer(1,fx_buffer,INDICATOR_DATA);
   SetIndexBuffer(2,sql_buffer,INDICATOR_DATA);
//--- setting values of the indicator that won't be visible on a chart
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE);
   PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,EMPTY_VALUE);

   PlotIndexSetInteger(0,PLOT_SHIFT,shift);
   PlotIndexSetInteger(1,PLOT_SHIFT,shift);
   PlotIndexSetInteger(2,PLOT_SHIFT,shift);

//---
   ArraySetAsSeries(fx_buffer,true);
   ArraySetAsSeries(sqh_buffer,true);
   ArraySetAsSeries(sql_buffer,true);
//---
_Nbar=Nbar;
int _Bars=Bars(Symbol(),PERIOD_CURRENT)-1000;
if (Nbar==-1)_Nbar=_Bars;

   return(INIT_SUCCEEDED);
  }
Причина обращения: