Custom Indicator 'TestIndicator': FileOpen function cannot be called from custom indicator

 
Custom Indicator 'TestIndicator': FileOpen function cannot be called from custom indicator
да бросьте. Вполне логична в индикаторах работа с файлами, хотя бы в init().
В МТ3 была же такая возможность.
Ну не через Dll'ки же файлы грузить.

Вдобавок, какая причина у этого ограничения:
"Note: Files can be opened only from MetaTrader_dir\experts\files directory and it's subdirectories."
Защита от "вирусов"?

Несколько маленьких замечаний:

Хотелось бы более прямую работу с "будущим",
не сдвигать индикатор по SetIndexShift
а что-то вроде Time[-1], Time[-2] ... с установкой значений или что-то аналогичное.
В принципе можно обойти это и с SetIndexShift, просчитав будущее
в самом коде, пропустив выходные и т.д., но если можно что-то придумать,
было бы неплохо.

Очень хорошо что вы сделали Scale Fix в свойствах графика.
Возможно стоит добавить ввод масштаба, предположим 30 пунктов на шаг сетки грида или еще какая-либо привязка, к примеру пикселям экрана.
Если это будет работать еще и на печати графика, но вообще великолепно.

Потом, некоторые терминалы позволяют "заполнять" выходные ценой закрытия пятницы,
в некоторых случаях это было бы полезно увидеть в Metatrader.

Смотрю, в SendOrder, а там нет Comment. Есть magic_number. Если смысл magic тут
как comment, то принципе без разницы string или int, главное чтоб был.
При выставлении сразу указывать хоть какой-то коммент (magic или другой) конечно
очень бы хотелось.
 
у Вас - старый билд (137?). билдов 8 назад мы сняли это ограничение
да, это защита. работайте в "своей песочнице"
обновите, пожалуйста, терминал на более новый
 
Спасибо!

"Песочницу" разрушает и dll. Но в общем то это не критично. Грузить "левые" файлы полезно в экспертах, когда какая-то левая прога загружает предположим определенные новости, а эксперт считывает генерируемые ей файлы.
Сейчас я параллельно пускаю в цикле .bat-ник, который копирует файлы в /experts.

Кстати, раз уж об экспертах. Почему вы отказались от когда-то существовавшей возможности вызова эксперта по времени в миллисекундах?
 
у нас такой возможности не существовало никогда. было ограничение на работу эксперта дольше 1000 миллисекунд - но это всего лишь была защита от бесконечного цикла
 
Бес попутал, не было такого. Было
http://www.alpari-idc.ru/ru/userguide/experts/index.php?part=2
"Update on every tick - использовать эксперт на каждом тике;"

В принципе тиков достаточно. Миллисекунды по ходу тока мне нужны.

С уважением, скальпер.
 
Может кому интересно как я с будущим работаю.
Вот к примеру, бывают в данных субботы, бывает без пятницы...


//+------------------------------------------------------------------+
//| time_DayOfWeek.mq4 |
//| Copyright  2004, MetaQuotes Software Corp. |
//| https://www.metaquotes.net/ |
//+------------------------------------------------------------------+
#property copyright "Copyright  2004, MetaQuotes Software Corp."
#property link "https://www.metaquotes.net/

#property indicator_separate_window
#property indicator_minimum 0
#property indicator_maximum 6
#property indicator_buffers 1
#property indicator_color1 Blue
//---- input parameters
extern int BarNumbers=1000;
extern int FutureBars=100;
//---- buffers
double ExtMapBuffer1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0, DRAW_HISTOGRAM); //
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexShift(0,FutureBars);//
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//---- TODO: add your code here

//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
//---- last counted bar will be recounted
int limit;
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
//---- TODO: add your code here
int shift;
for (shift = limit; shift >=0; shift--)
{
ExtMapBuffer1[shift+FutureBars] = TimeDayOfWeek(Time[shift]);
}
// Draw Future
// now shift = -1;
datetime curr_datetime;
int period_;
curr_datetime = Time[0];
period_ = MathMax( Time[0] - Time[0+1], Time[0+1] - Time[0+2]);
while(shift > -FutureBars)
{
curr_datetime = curr_datetime + period_;
ExtMapBuffer1[shift+FutureBars] = TimeDayOfWeek(curr_datetime);
shift--;
}

// Comment( TimeDayOfWeek( StrToTime("2004.12.31 00:00") ) );
//----
return(0);
}
//+------------------------------------------------------------------+