Подскажите, пожалуйста, - страница 4

 
ToLik_SRGV:

В ОЗУ.

Разбейте процесс записи и чтения, например так

Файл успеет записаться на жесткий диск и вы его найдете.


Не помогло. :-(

Я даже добавил функцию выгрузки буфера везде, где можно, но файл так и не появился.

------------------------

string FileName = "MyFile.csv"; int handle;
handle = FileOpen(FileName, FILE_CSV|FILE_WRITE,';');
FileFlush(handle);

FileWrite(handle, " Proba");

FileFlush(handle);

FileClose(handle);
FileFlush(handle);

-----------------------

Я работаю под лицензионной Vista SP1. Может в ней дело?

 

Может и в ней, я точно не знаю у меня Windows XP SP3. После разброса чтения и записи, все работает.

 

 
ToLik_SRGV:

Может и в ней, я точно не знаю у меня Windows XP SP3. После разброса чтения и записи, все работает.


Спасибо!

Получилось, но только тогда, когда я установил терминал в папку по умолчанию.

Но тогда это глюк МТ4 - хотелось бы, чтобы файлы сохранялись при произвольной установке терминала.

 
МТ4 здесь ни при чем. Просто права доступа файловой системы правильно настроить нужно (читай статью http://www.oszone.net/5003/Windows_Vista_ACL). А ещё можно попытаться запустить терминал от имени Администратора (см. свойства ярлыка).
 
EvgeTrofi:
МТ4 здесь ни при чем. Просто права доступа файловой системы правильно настроить нужно (читай статью https://www.mql5.com/go?link=http://www.oszone.net/5003/Windows_Vista_ACL). А ещё можно попытаться запустить терминал от имени Администратора (см. свойства ярлыка).


Я на ноуте единственный и администратор.

С глюком определился. Он появлялся тогда, когда при инсталляции терминала происходит онлайн-обновление билда 225 до 226. Когда я скачал терминал прямо с сайта Метаквоты и подставил конфигурацию и значок своего ДЦ - всё стало работать даже на диске D: и, кажется, шустрее.

 

Подскажите, пожалуйста, а то, что-то совсем запуталась, есть ли какая возможность решить проблему:

на чарте Н1 индикатором формирую массив из Open[1],High[1],Low[1],Close[1], и с помощью функции iOpen(NULL,PERIOD_M15,1), iOpen(NULL,PERIOD_M15,2), iOpen(NULL,PERIOD_M15,3), iOpen(NULL,PERIOD_M15,4) и по аналогии для High,Low,Close, пытаюсь вызвать значения, которые формируются внутри предыдущего часа (т.е. 16 значений), но для PERIOD_M15. Но у меня получаются значения, например, для iHigh с PERIOD_M15 одинаковые для соответствующего shift с чарта Н1. Хотя, теоретически, в тестере значения должны читаться для ниже стоящего таймфрейма, или проблема в shift, когда для PERIOD_M15 нужно формировать соответствующее время? Кто-нибудь решал такую задачу?

 
Angela:

Подскажите, пожалуйста, а то, что-то совсем запуталась, есть ли какая возможность решить проблему:

на чарте Н1 индикатором формирую массив из Open[1],High[1],Low[1],Close[1], и с помощью функции iOpen(NULL,PERIOD_M15,1), iOpen(NULL,PERIOD_M15,2), iOpen(NULL,PERIOD_M15,3), iOpen(NULL,PERIOD_M15,4) и по аналогии для High,Low,Close, пытаюсь вызвать значения, которые формируются внутри предыдущего часа (т.е. 16 значений), но для PERIOD_M15. Но у меня получаются значения, например, для iHigh с PERIOD_M15 одинаковые для соответствующего shift с чарта Н1. Хотя, теоретически, в тестере значения должны читаться для ниже стоящего таймфрейма, или проблема в shift, когда для PERIOD_M15 нужно формировать соответствующее время? Кто-нибудь решал такую задачу?


Анжела, как я уже писал, это недочет в работе тестера. Простой пример 

//+------------------------------------------------------------------+
int start(){
   Alert("-------------------------------------");
   for(int loop = 0; loop < 25; loop++){
      Alert("iOpen from ", TimeToStr(iTime(NULL,PERIOD_M15,loop))," - ",iOpen(NULL,PERIOD_M15,loop));
   }
}
//+------------------------------------------------------------------+

получающий последние 25 значений цен открытия с М15, включенный на Н1 в тестере выдает последние 25 цен с конца вообще всей истории (то есть считает с самых свежих данных), хотя на самом деле должен симулировать сдвиг и считать с последнего тестового бара.

 

 

Как вариант, решения:

//+------------------------------------------------------------------+
int getShift(int timeframe, int shift){
      return(iBarShift(NULL, timeframe, Time[shift]));
}
//+------------------------------------------------------------------+

Передаете период для поиска (в вашем случае PERIOD_M15), и текущий сдвиг старшего таймфрейма( в вашем случае PERIOD_H1 и сдвиг 1).

В итоге для получения OHLC четырех М15 составляющих предыдущий час нужно сделать следующее:

//+------------------------------------------------------------------+
int start(){

   int M15_shift = getShift(PERIOD_M15, 1);
   
   Alert(" ", 
   
   iHigh(Symbol(), PERIOD_M15, M15_shift)," ",  //
   iLow(Symbol(), PERIOD_M15, M15_shift)," ",   // ДЛЯ ПЕРВОГО СОСТАВНОГО БАРА ПРЕДЫДУЩЕГО ЧАСА
   iOpen(Symbol(), PERIOD_M15, M15_shift)," ",  //
   iClose(Symbol(), PERIOD_M15, M15_shift),     //
   
   "\n",
   
   iHigh(Symbol(), PERIOD_M15, M15_shift - 1)," ",  //
   iLow(Symbol(), PERIOD_M15, M15_shift - 1)," ",   // ДЛЯ ВТОРОГО СОСТАВНОГО БАРА ПРЕДЫДУЩЕГО ЧАСА
   iOpen(Symbol(), PERIOD_M15, M15_shift - 1)," ",  //
   iClose(Symbol(), PERIOD_M15, M15_shift - 1), //
   
   "\n",
   
   iHigh(Symbol(), PERIOD_M15, M15_shift - 2)," ",  //
   iLow(Symbol(), PERIOD_M15, M15_shift - 2)," ",   // ДЛЯ ТРЕТЬЕГО СОСТАВНОГО БАРА ПРЕДЫДУЩЕГО ЧАСА
   iOpen(Symbol(), PERIOD_M15, M15_shift - 2)," ",  //
   iClose(Symbol(), PERIOD_M15, M15_shift - 2), //
   
   "\n",
   
   iHigh(Symbol(), PERIOD_M15, M15_shift - 3)," ",  //
   iLow(Symbol(), PERIOD_M15, M15_shift - 3)," ",  // ДЛЯ ЧЕТВЕРТОГО, ПОСЛЕДНЕГО СОСТАВНОГО БАРА ПРЕДЫДУЩЕГО ЧАСА
   iOpen(Symbol(), PERIOD_M15, M15_shift - 3)," ",  //
   iClose(Symbol(), PERIOD_M15, M15_shift - 3), //
   
   "\n"
   );
   
   
}
//+------------------------------------------------------------------+

Надеюсь вам подойдет.

 
ToLik_SRGV:

Анжела, как я уже писал, это недочет в работе тестера. Простой пример

получающий последние 25 значений цен открытия с М15, включенный на Н1 в тестере выдает последние 25 цен с конца вообще всей истории (то есть считает с самых свежих данных), хотя на самом деле должен симулировать сдвиг и считать с последнего тестового бара.

Как вариант, решения:

Передаете период для поиска (в вашем случае PERIOD_M15), и текущий сдвиг старшего таймфрейма( в вашем случае PERIOD_H1 и сдвиг 1).

В итоге для получения OHLC четырех М15 составляющих предыдущий час нужно сделать следующее:

Надеюсь вам подойдет.


Спасибо, попробую.
 
ToLik_SRGV:


А что за функция getShift? При компиляции выдается ошибка:'getShift' - function is not defined C:\MetaTrader - Demo\experts\indicators\COLH.mq4 (130, 24)
 
Angela:

А что за функция getShift?

Так вот же она:

//+------------------------------------------------------------------+
int getShift(int timeframe, int shift){
      return(iBarShift(NULL, timeframe, Time[shift]));
}
//+------------------------------------------------------------------+
Причина обращения: