Ошибки, баги, вопросы - страница 32

 
Теперь и у меня заглючило ... Пока не перекомпилируешь, отрисовываются последние бары.
 
Interesting:

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

Пишется 100% работающий индикатор, причем он делается классически без параметра "Символ", т.е. расчитывается по текущему символу и периоду.

После чего такой БАЗОВЫЙ калькулятор вызывается в эксперте (если предусмотрена механическая работа) или калькуляторе (если необходимо отображать инфу на графике НЕ РАСЧЕТНОГО ИНСТРУМЕНТА).

PS

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

Предложение заслуживающее внимания,

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

зачем тогда возможность вызвать данные неродного инструмента ?

если всё равно нужно создавать пользовательские индикаторы и вызывать уже их с нужного инструмента, в общем вывод думай башка шапку куплю.

Хотя опять же ну вызову я готовый индикатор на EURе с данными по JPY (истории по йене например не хватает)

а нет там на эту длинну данных и что он мне скажет ??? таже сакмая песня.

Переход на новые рельсы: пользовательские индикаторы в MQL5
Переход на новые рельсы: пользовательские индикаторы в MQL5
  • 2009.11.23
  • Андрей
  • www.mql5.com
Я не буду перечислять все новые возможности и особенности нового терминала и языка. Их действительно много, и некоторые новинки вполне достойны освещения в отдельной статье. Вы не увидите здесь кода, написанного по принципам объектно-ориентированного программирования — это слишком серьезная тема для того, чтобы просто быть упомянутой в контексте как дополнительная вкусность для кодописателей. В этой статье остановимся подробней на индикаторах, их строении, отображении, видах, а также особенностях их написания по сравнению с MQL4.
 

Вот работающий вариант:

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//--- plot LRma
#property indicator_label1  "LRma"
#property indicator_type1   DRAW_LINE
#property indicator_color1  Red
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
input string             symbol      ="EURJPY";
input int                MA_Period   =25;          // период MA
input int                MA_shift    =0;           // сдвиг индикатора
input ENUM_APPLIED_PRICE price       =PRICE_OPEN;  // тип цены 
//--- indicator buffers
double  LRma[],L[],S[],iPoint,iiMA;

int Lwma,Sma;// Хендлы машек
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,LRma,INDICATOR_DATA);
   Lwma=iMA(symbol,0,MA_Period+1,MA_shift,MODE_LWMA,price);
   Sma=iMA(symbol,0,MA_Period+1,MA_shift,MODE_SMA,price);
   iPoint=1.0/SymbolInfoDouble(symbol,SYMBOL_POINT);
   iiMA=1.0/MA_Period;
   IndicatorSetString(INDICATOR_SHORTNAME,"LRma_symbol_"+symbol);
//---
   int count=(int)SeriesInfoInteger(symbol,0,SERIES_BARS_COUNT);
   while(BarsCalculated(Lwma)<count){}
   while(BarsCalculated(Sma)<count){}
   ArraySetAsSeries(L,true);
   ArraySetAsSeries(S,true);
   ArraySetAsSeries(LRma,true);
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration 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[])
  {
//---
   int count=rates_total-prev_calculated;
   if(count>1)count=(int)SeriesInfoInteger(symbol,0,SERIES_BARS_COUNT);
   if(count==0)count=1;
   while(BarsCalculated(Lwma)<count){}
   while(BarsCalculated(Sma)<count){}
   if(CopyBuffer(Lwma,0,0,count,L)!=-1)
     {
      if(CopyBuffer(Sma,0,0,count,S)!=-1)
        {
         for(int i=0;i<MathMin(ArraySize(LRma),ArraySize(L));i++)
            LRma[i]=(L[i]-S[i])*6*iPoint*iiMA;
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
 

Могу добавить еще головной боли. Если индикатор висит на каком то одном графике, а  показывает с другого, то нужно учитывать:

  1. Что количество баров может быть разное. Вроде  уже учли.
  2. учесть, что могут быть дыры в истории по инструменту, и 25 бар в истории по одному инструменту, это может быть понедельник, а по другому пятница…
  3. даже если решили первые две проблемы, остается синхронизация по времени, по одному инструменту уже идет новый бар, по другому он еще не начался…
  4. индикатор работает  только с приходом нового тика, т.е. если будет висеть на графике где  мало тиков, общитывать 0 бар другого графика проблематично…
  5. если бросите считать 0 бар, фиг с ним, только завершенные, то там появиться еще парочка подводных камней…
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
  • www.mql5.com
Доступ к таймсериям и индикаторам / Bars - Документация по MQL5
 
Prival:

Могу добавить еще головной боли. Если индикатор висит на каком то одном графике, а  показывает с другого, то нужно учитывать:

  1. Что количество баров может быть разное. Вроде  уже учли.
  2. учесть, что могут быть дыры в истории по инструменту, и 25 бар в истории по одному инструменту, это может быть понедельник, а по другому пятница…
  3. даже если решили первые две проблемы, остается синхронизация по времени, по одному инструменту уже идет новый бар, по другому он еще не начался…
  4. индикатор работает  только с приходом нового тика, т.е. если будет висеть на графике где  мало тиков, общитывать 0 бар другого графика проблематично…
  5. если бросите считать 0 бар, фиг с ним, только завершенные, то там появиться еще парочка подводных камней…

Спасибо на добром слове :о)
 

Баг. Описание. АТС всегда в рынке (переворот удвоенным лотом 0.2)

Режим тестирования все тики. Все нормально.

 

режим тестирования, по ценам открытия. этот же кусок. 

 

почему то разбивается на 2 сделки. может это просто так отображается, но это не правильно. не должно так быть. 

 
Alexandr2385:

Здравствуйте! У меня возникла серьезная проблемма с работой Терминала МТ5. Дело в том, что когда я запускаю терминал, то в процессе его работы движется только сама линия цены( бид), а сами свечи(бары) не рисуются/не изменяются. Следовательно происходит движение цены без изменения самого графика. У меня вопрос: Как это проблемму устранить? Ведь в МТ4 все работает нормально!!?! При этом я пробывал переустанавливать терминал, но и это не помогло! Причем такая беда с несколькими брокерами...подскажите что делать в этой ситуации?
Кто-нибудь из разработчиков может ответить на вопрос? Или нужно в другую ветку его задавать?
Файлы:
1.png  31 kb
 
Alexandr2385:
Кто-нибудь из разработчиков может ответить на вопрос? Или нужно в другую ветку его задавать?
+1 Наблюдал у себя такую же картину, но сейчас вроде все работает правильно, наверное устранили
 
SHOOTER777:

+1 Наблюдал у себя такую же картину, но сейчас вроде все работает правильно, наверное устранили

Да как нистранно, но только что сейчас пошло, не знаю надолголи...

 
Prival:

Могу добавить еще головной боли. Если индикатор висит на каком то одном графике, а  показывает с другого, то нужно учитывать:

  1. Что количество баров может быть разное. Вроде  уже учли.
  2. учесть, что могут быть дыры в истории по инструменту, и 25 бар в истории по одному инструменту, это может быть понедельник, а по другому пятница…
  3. даже если решили первые две проблемы, остается синхронизация по времени, по одному инструменту уже идет новый бар, по другому он еще не начался…
  4. индикатор работает  только с приходом нового тика, т.е. если будет висеть на графике где  мало тиков, общитывать 0 бар другого графика проблематично…
  5. если бросите считать 0 бар, фиг с ним, только завершенные, то там появиться еще парочка подводных камней…

На счет дыр  и проблем с историей согласен.

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

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