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

 

на M1 не возможно сходство в принципе, на остальных можно

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

даже не знаю, разработчиком быть, или лучше скопировать 

 
Vladislav Andruschenko:
Спасибо. 
Какой еще вариант кроме таймера по сути ? Цикл?
Знаю, что таймер не идеальное решение. Знаю, что есть нюансы глюки и отключение таймера. 

Меня устраивает вариант шпионов. Сейчас использую несколько другой подход, но суть та же. Часто, если есть возможность, то шпионы сразу шлют сигналы на закрытие/открытие/модификацию или какую-то ключевую инфу для формирования сигналов уже в самом советнике. Это распараллеливает расчеты, а советнику в основном достаются только торговые функции.

Реализация мультивалютного режима в MetaTrader 5
Реализация мультивалютного режима в MetaTrader 5
  • www.mql5.com
В настоящее время мультивалютных торговых систем, индикаторов и экспертов разработано огромное количество. Тем не менее, до сих пор создатели этого "огромного количества" сталкивались со специфическими для мультивалютных систем трудностями. С выпуском в свет терминала MetaTrader 5 и языка программирования MQL5 появилась возможность  реализации...
 
Konstantin Gruzdev:

Меня устраивает вариант шпионов. Сейчас использую несколько другой подход, но суть та же. Часто, если есть возможность, то шпионы сразу шлют сигналы на закрытие/открытие/модификацию или какую-то ключевую инфу для формирования сигналов уже в самом советнике. Это распараллеливает расчеты, а советнику в основном достаются только торговые функции.


Спасибо. Когда то читал эту статью. 
Шпионы эту гуд. А как же тестер ? 
Да и события графика также иногда тормозят. Иногда весь терминал висит ( недавно столкнулся с багом при работе с copybuffer ) при копировании данных, графи подвисает на неопределённое время. В том числе события графика. 
 
Vladislav Andruschenko:

Спасибо. Когда то читал эту статью. 
Шпионы эту гуд. А как же тестер ? 
Да и события графика также иногда тормозят.

А что тестер? Шпионы там работают по тикам того торгового инструмента, на котором запущены. События шлют исправно.

Что значит "события графика также иногда тормозят"? Нужны примеры. Например, я не шлю тики, а шлю в основном сигналы - очередь событий при этом не загромождается и тормозов никаких нет. 

Vladislav Andruschenko:
 Иногда весь терминал висит ( недавно столкнулся с багом при работе с copybuffer ) при копировании данных, графи подвисает на неопределённое время. В том числе события графика. 

Ну, баги, конечно, к теме ветки, но мы же про сам принцип работы мультивалютника. Для разбора багов нужны примеры.

 
Konstantin Gruzdev:

А что тестер? Шпионы там работают по тикам того торгового инструмента, на котором запущены. События шлют исправно.

Что значит "события графика также иногда тормозят"? Нужны примеры. Например, я не шлю тики, а шлю в основном сигналы - очередь событий при этом не загромождается и тормозов никаких нет. 

Ну, баги, конечно, к теме ветки, но мы же про сам принцип работы мультивалютника. Для разбора багов нужны примеры.

Спасибо. Попробую разобрать и проверить варианты событиями графика. 
 
fxsaber:

Так если реализовано безусловное подхватывание инклудников, то макросы+шаблоны не создадут проблем с этим, верно?

Че бодаетесь? Сделали бы вместе что-нибудь полезное. 

 
Алексей Тарабанов:

Че бодаетесь? Сделали бы вместе что-нибудь полезное. 

Станислав выложил фантастический по полезности скрипт в КБ. С легкостью создает архивы с MQL-работами, куда включаются mq?-файлы и ресурсы.

У меня советник из сотни mqh-файлов. С помощью скрипта теперь могу запросто переносить в исходниках советник, контролировать версии и делиться с другими.

MQL5 Program Packer
MQL5 Program Packer
  • www.mql5.com
This script allows you to assemble a zip-file of your MQL5-program with all dependencies automatically. The dependencies are: included source files via #include directive (both modes of absolute () and relative ("") references are supported); icons linked by #property icon directive; resources (images, sounds, and other types) embedded by...
 
Комментарии, не относящиеся к этой теме, были перенесены в "Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам".
 
Vladislav Andruschenko:
Спасибо. Попробую разобрать и проверить варианты событиями графика. 

Загляните в веточку, недавно как раз разбирал вопрос подробно - https://www.mql5.com/ru/forum/327888

EventChartCustom => indicator is too slow
EventChartCustom => indicator is too slow
  • 2019.12.06
  • www.mql5.com
Использую в советнике для получения тиков с других инструментов "индикатор-шпион": Периодически в журнале появляются записи "indicator is too slow...
 
Anton Shpilyuk:

2) Циклом-перебором до тех пор пока дата не будет совпадать(минус - скорость работы)

 это так?

По теме "получить индекс бара по времени copyrates"

Ужас, реально так! Стояла задача в индикаторе получить бары М1 таймфрейма, хотя сам индикатор работает на М5 таймфрейме.

1. пришлось инициализировать нужный таймфрейм в OnCalculate(), чтобы он подгрузился до старта индикатора (после инициализации флаг FirstStartFlag = false;). Помним, что в индикаторах, если не подгружено, выдаст -1 или загрузит не полностью, поэтому проверяем сколько загружено, если не достаточно, идем в начало return(0);

объявляем массив MqlRates rates[]; в начале, где cnt_bars*5; - пересчитываем количество баров М5 в М1

//--- загрузка данных М1 таймфрейма для поминутной экспирации в оптимизаторе   
   if(FirstStartFlag) 
      {
         int count = cnt_bars*5;
         int copied=CopyRates(_Symbol,PERIOD_M1,0,count,rates);
         if(copied>0) 
            {
               if(debug) Print("Скопировано баров: "+IntegerToString(copied)+", надо было "+IntegerToString(count)); 
               if(copied<count)
                  {
                      Print("Не удалось получить достаточно исторических данных, ждем");
                      return(0);
                  }
                
            }
         else  
            {
               Print("Не удалось получить исторические данные, ждем");
               return(0);
            } 
         ArraySetAsSeries(rates,true);  
      }

После этого уже в теле нужной функции каждый раз при расчетах обновляем исторические данные по М1:

//--- загрузка актуальных данных М1 таймфрейма для поминутной экспирации в оптимизаторе    
   int count = cnt_bars*5;
   copied=CopyRates(_Symbol,PERIOD_M1,0,count,rates);
   if(copied>0) 
      {
         Print("cnt_Statist() Скопировано баров: "+IntegerToString(copied)+", надо было "+IntegerToString(count)); 
         if(copied<count)
            {
                Print("cnt_Statist() Не удалось получить достаточно исторических данных");
            }
          
      }
   else  
      {
         Print("cnt_Statist() Не удалось получить исторические данные"); 
      } 
   ArraySetAsSeries(rates,true);  

Далее, в цикле перебора М5 баров делаем вложенный цикл поиска индекса соответствующего М1 бара, time[s] - текущий обрабатываемый бар М5 таймфрейма:

                          for(h=copied-1;h>0;h--)
                              {
                                 if(rates[h].time == time[s])
                                    {
                                       IndexRates = h;
                                       break;
                                    }
                              }

Ну и далее используем этот индекс для нахождения нужных данных М1 баров, в моём случае rates[IndexRates-5].time и rates[IndexRates-k-4].close 

Слава богу этот вложенный цикл быстро перебирает бары. даже на истории 90 дней. А так бы хотелось, чтобы можно было искать индекс бара в массиве rates[].time по типу двоичного поиска функцией ArrayBsearch

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Информация об исторических данных по инструменту
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Информация об исторических данных по инструменту
  • www.mql5.com
Константы, перечисления и структуры / Торговые константы / Информация об исторических данных по инструменту - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5