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

 
Fast235:

это для меня,

будет лишний лаг пока по графику все точки расставятся при компиляции

при необходимости (например перекомпил.) создать в OnDeinit переменную терминала expetname.deinitreason.ChartId()  и дать её флаг temporary, поместить код причины туда. Так-же с сопутсвующими данными (мало-ли чё понадобиться)

в OnInit - смотреть если переменная есть, то действовать от её значения.

и там-же в любом случае такую переменную удалять..

---

hint - нештатные завершения ловятся примерно так-же, но наоборот :-) В OnInit переменная проверяется и создаётся, в OnDeinit удаляется. Если произошла критическая ошибка и советник/терминал просто свалился, то переменная останется. 

 
Maxim Kuznetsov:

при необходимости (например перекомпил.) создать в OnDeinit переменную терминала expetname.deinitreason.ChartId()  и дать её флаг temporary, поместить код причины туда. Так-же с сопутсвующими данными (мало-ли чё понадобиться)

в OnInit - смотреть если переменная есть, то действовать от её значения.

и там-же в любом случае такую переменную удалять..

---

hint - нештатные завершения ловятся примерно так-же, но наоборот :-) В OnInit переменная проверяется и создаётся, в OnDeinit удаляется. Если произошла критическая ошибка и советник/терминал просто свалился, то переменная останется. 

с файлами и глобальными переменными знаком, не стоит того, городить это, может разработчики уберут с компиляции - 0, или вообще добавят состояние, что Терминал стартовал, я туда например может еще подгрузку истории добавлю для мультисимвола, вместо input

 

Всем привет! Идея была сделать свечи, объема, разным цветом, в зависимости от направления свечей(вверх или вниз). Однако последняя свеча получается разноцветная из-за изменений во времени направления свечи. А со временем получаются и все разноцветные. Вопрос как изменить цвет последней свечи, а остальные не трогать. Или может другая какая идея.



//+------------------------------------------------------------------+
//|                                      VSA_Volume_Color            |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
#property indicator_separate_window
#property indicator_buffers 3

//////////////
datetime PrevTime = 0;
double iVolume_UP[];
double iVolume_DWN[];
double iVolume_NULL[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   IndicatorDigits(5);
//--- indicator buffers mapping
   SetIndexBuffer(0, iVolume_UP);
   SetIndexBuffer(1, iVolume_DWN);
   SetIndexBuffer(2, iVolume_NULL);
//---
   SetIndexStyle(0, DRAW_HISTOGRAM,EMPTY,2,clrGreen);
   SetIndexStyle(1, DRAW_HISTOGRAM,EMPTY,2,clrWhite);
   SetIndexStyle(2, DRAW_HISTOGRAM,EMPTY,2,clrRed);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 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 i = 0, counted_bars = IndicatorCounted();
   i = Bars - counted_bars - 1;
   if(counted_bars < 0)
      return(-1);
//---
   if(counted_bars > 0)
      counted_bars--;
//--- return value of prev_calculated for next call
///////////
   while(i >= 0)
     {
      if(Close[i] > Open[i])
         iVolume_UP[i] =  iVolume(NULL, 0, i) * 1.0;
      if(Close[i] < Open[i])
         iVolume_DWN[i] =  iVolume(NULL, 0, i) * 1.0;
      if(Close[i] == Open[i])
         iVolume_NULL[i] =  iVolume(NULL, 0, i) * 1.0;
      i--;
     }

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
   return(rates_total);
  }
//+------------------------------------------------------------------+
Спасибо!
 

Обнулять ненужные буферы

iVolume_UP[i]=EMPTY_VALUE;
 

ссылка на отдельную тему - https://www.mql5.com/ru/forum/365021

такая проблема у меня:

Известный индикатор шпион в OnChartEvent, 7 символов, новый бар через  SERIES_LASTBAR_DATE

принт показал, что пропуск сигнала из-за того что - пришел сигнал от индикатора через кастом событие, прошла проверка на новый бар с помощью  SERIES_LASTBAR_DATE и

в принте данные прошлого бара, а не нового..., примерно на 50 сделок в общем по 7 символам, проскакивает такая, что можно посмотреть, есть идеи? пинг 150.

процессор Ryzen 3700x 16 потоков

----

кто использует подобную схему мультисимвола, замеряли подобное на 2-3 терминалах в реалтайме, демо например, на М1 ждать от пару часов до пол дня такой пропуск, при 40-50 сделок в сутки

загрузка процессора несколько % роботом, почти спит.

В моих ТС пропуск сигнала
В моих ТС пропуск сигнала
  • 2021.03.16
  • www.mql5.com
Не люблю создавать новые темы, Небольшие исходные данные: Советник работает в OnChatEvent, 7 символов, циклов нет, прямая передача номера за минусо...
 

одна сделка на 30-50, ладно, может закрыться и в плюс и в минус, но

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

можно и глубже копнуть на 5 лет назад.

если событийная модель кривая, прошу разработчиков сообщить, чтобы от нее отказаться, судя по начальным постам по шпиону, где тестировали разные варианты, был тоже разброс и пропуски?
 
Aleksei Stepanenko:

Обнулять ненужные буферы

Отлично. Все работает ). Спасибо!
 
Ребят подскажите, что то я запутался с индексацией в буферах индикатора mql5.
Если применяется функция ArraySetAsSeries(Buffer, true)
то разворачивается только индексация? Или значения буфера тоже разворачиваются?
 
Roman:
Ребят подскажите, что то я запутался с индексацией в буферах индикатора mql5.
Если применяется функция ArraySetAsSeries(Buffer, true)
то разворачивается только индексация? Или значения буфера тоже разворачиваются?
При true нулевой бар буфера индикатора - это крайний правый на графике. При false - крайний левый.
Больше ничего.
 
Artyom Trishkin:
При true нулевой бар буфера индикатора - это крайний правый на графике. При false - крайний левый.
Больше ничего.

Спасибо.
Артём подскажи пожалуйста ещё момент.
Функция 

ChartSetInteger(ChartID(), CHART_SHOW, false)
скрывает основное окно графика, и подокна установленного индикатора.
Как то можно скрыть только основное окно графика? При этом, чтоб осталось видимым подокно индикатора.
Причина обращения: