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

 
Vitya:

Не подскажите как решить проблемму?
После первого прогона эксперта в тестере (Read=false), создаётся csv файл со статистикой.
в int OnInit() такой код:

Созданный файл хранится в директории: tester\Agent\MQL5\Files

Однако, при втором прогоне  (Read=true). Необходимо считывать данные из этого файла, но файл удаляется.

В этом случае Вам нужно создавать файл с флагом FILE_COMMON. Файл будет создаваться в общей папке терминала.
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Состояние клиентского терминала
Документация по MQL5: Стандартные константы, перечисления и структуры / Состояние окружения / Состояние клиентского терминала
  • www.mql5.com
Стандартные константы, перечисления и структуры / Состояние окружения / Состояние клиентского терминала - Документация по MQL5
 
tol64:
В этом случае Вам нужно создавать файл с флагом FILE_COMMON. Файл будет создаваться в общей папке терминала.
filehandle=FileOpen(FileName,FILE_READ|FILE_CSV|FILE_COMMON);
Спасибо.
Разобрался.
[Удален]  
Rosh:
Посмотрите ChartIndicatorAdd
Спасибо!
 
 Сервисдеск, заявка #359447 ощупывается или зря старался?
 
x100intraday:
 Сервисдеск, заявка #359447 ощупывается или зря старался?
Идёт бурное обсуждение. Но пока ответ не готов.
 

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

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
    Print(TimeCurrent());
   
   return(0);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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 &TickVolume[],
                const long &Volume[],
                const int &Spread[])
{
  
  
  
  return(rates_total);
  
}
 
Karlson:

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

Сейчас вычислительная часть индикатора удаляется из mql-пространства с задержкой.  как раз на случай повторного использования.

если закидывать один и то же (с теми же параметрами) индикатор на разные (но с одним символом/таймфреймом) чарты - тоже не будет повторной инициализации.

Если после удаления последней копии сходить покурить - тогда будет повторная инициализация при запуске.

Такой вот побочный эффект оптимизации. :)

зы:  КУРЕНИЕ ВРЕДИТ ВАШЕМУ ЗДОРОВЬЮ ! 

;)

[Удален]  

Уважаемые программисты,

скажите, что больше всего в коде программы на mql5 влияет на скорость? Дело в том, что в процессе создания своей программы и роста объема кода я столкнулся с тем, что скорость существенно уменьшилась. Хотя более объемные по коду стандартные советники из папки Advisors и Examples работают намного быстрее.

В общем,  есть ли на форуме статья или объяснение того, как лучше оформлять структуру кода. Дайте совет начинающему программисту. Спасибо!

 
Alex5757000:

Уважаемые программисты,

скажите, что больше всего в коде программы на mql5 влияет на скорость? Дело в том, что в процессе создания своей программы и роста объема кода я столкнулся с тем, что скорость существенно уменьшилась. Хотя более объемные по коду стандартные советники из папки Advisors и Examples работают намного быстрее.

В общем,  есть ли на форуме статья или объяснение того, как лучше оформлять структуру кода. Дайте совет начинающему программисту. Спасибо!

ИМХО, больше всего на скорость влияют вложенные циклы. Циклы с вложением до третьей глубины это практически предел за которым нужно очень внимательно следить за размерами циклов. Для например возьму свой P4: он работает на частоте 3Гц, на гора выдаёт ~10 лям операций в сек.

Эта цифра означает что циклы с тройной вложенностью 1000х1000х10 будут выполняться 1 сек, сами понимаете если 3-тий цикл увеличить до 100 то получим 10 сек.

 

 Что-то мне заранее взгрустнулось, но вдруг есть надежда?

 В мультитаймфреймовом индикаторе можно ли через окно настроек задавать посредством input'ов количество таймфреймов, а затем и собственно сами таймфреймы в зависимости от ранее выбранного количества, от которых пользователь собрался получить расчёты и индикацию? Ведь в начале кода индикатора есть строчки:

#property indicator_chart_window
#property indicator_buffers 10
#property indicator_plots   10

что предзадаётся в самом коде, что совершенно не соответствует концепции гибкого кода... вернее настроек самого индикатора в конечном счёте.

 Как-то была у меня мысль: зарезервировать в коде максимум indicator_buffers и indicator_plots, задать максимум таймфреймов и нагромоздить столько же bool input'ов, чтобы пользователь в окне сам уже выбрал через true/false, какие таймфреймы задействовать, а какие нет. Но это лишний код, лишние ресурсы, рост объёма настроек в окне (что утомительно для конечных пользователей, которым побыстрее бы набросить индикатор, а не изучать шлейф настроечных параметров на три экрана), а главное - как программист предчувствую возню с устранением графических артефактов false-таймфреймов, которые не будут использоваться, но буферы для которых будут неизбежно отведены в отсутствие гибких настроек.

 Ещё проскочила мысль, что было бы неплохо обуславливать эти таймфреймовые input-параметры по количеству, делая их зависимыми от иерархически более высокого - родительского: количественного - параметра, но ведь не предусмотрено же такое в MQL? Хуже того, if'ы же вообще не работают вне OnInit(), OnCalculate() и т. п. функций, хоть костьми ляг!

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