Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 6. - страница 936

 
AlexeyVik:
Не проверял, но что мешает тебе самому проверить? Просто надо сохранить шаблон со всеми индикаторами под именем советника и тогда при запуске советника в тестере все индикаторы подгрузятся и возможно будут корректно работать. Но не исключено, что будут брать значения из вкладки "Торговля" и "История счёта".
Пробовал. Пока не видит. Буду пробовать ещё.
 
kosmos0975:
Пробовал. Пока не видит. Буду пробовать ещё.
А надо-ли такое извращение с индикаторами? Не проще всё засунуть в советник?
 
AlexeyVik:
А надо-ли такое извращение с индикаторами? Не проще всё засунуть в советник?

Со временем советник обростает дополнительными условиями для корректной работы и становится не гибким.

(Возможно извращение. Мы, Россияне, не ищем легких путей:) 

 
Добрый день!
Как можно в эксперте определить "Market is closed"?
 
abeiks:
Добрый день!
Как можно в эксперте определить "Market is closed"?

Зачем тебе это? Если рынок закрыт, то не будет тиков, соответственно эксперт не будет работать.

Но если тебе все-таки очень надо, то попробуй

MarketInfo(Symbol(), MODE_TRADEALLOWED);

Если рынок открыт, то возвращает 1. Если рынок закрыт, то должен возвращать 0, только как он это сделает, если тики не идут :)

 

Такое дело - нужно определить минимальное и максимальное значение цены за последние, например 100 баров, ну и потом зафиксировать рост/падение при снижении/росте цены, чтобы обрисовать разворотный патерн типа 1 2 3. Не могу понять разницу между функциями ArrayMaximum и iHighest. Если я правильно понимаю, то результатом их вычислений будет только индекс максимального бара на указанном промежутке массива? А для расчётов требуется использование оператора for при работе с массивами, как в задаче 26 из учебника?  Я изменил этот код то такого вида

//--------------------------------------------------------------------
// extremumprice.mq4 
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------------
extern int Quant_Bars=100;                       // Количество баров
//--------------------------------------------------------------------
int start()                                     // Спец. функция start
  {
   int i;                                       // Номер бара 
   double Minimum=Bid,                          // Минимальная цена
          Maximum=Bid;                          // Максимальная цена
         
   for(i=0;i<=Quant_Bars-1;i++)                 // От нуля (!) до..
                                               // ..Quant_Bars-1 (!)
      if (Low[i]< Minimum)                      // Если < известного
         Minimum=Low[i];                        // то оно и будет мин
      if (High[i]> Maximum)                     // Если > известного
         Maximum=High[i];                       // то оно и будет макс
    
   
   double
   Level_1,                                    // Сигнальный уровень 1
   Level_2,                                    // Сигнальный уровень 2
   Price;                                      // Текущая цена
   Level_1=Minimum;                             // Задаём минимальный уровень 
   Level_2=Maximum;                             // Задаём максимальный уровень 
   Price=Bid;                                  // Запрашиваем цену
   
   if (Price<Level_1) 
   {                                           // Проверка сложн услов  
      Alert("Образовался патерн на продажу"); 
      } 
        if (Price<Level_2) 
   {                                           // Проверка сложн услов  
      Alert("Образовался патерн на покупку");  // Сообщение 
  }
   return; 
   }                               
  //--------------------------------------------------------------------


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


 

 
silachara:

Зачем тебе это? Если рынок закрыт, то не будет тиков, соответственно эксперт не будет работать.

Но если тебе все-таки очень надо, то попробуй

Если рынок открыт, то возвращает 1. Если рынок закрыт, то должен возвращать 0, только как он это сделает, если тики не идут :)

Спасибо!
Для получения информации. Надо подсчитать время между тиками.
Использую OnTimer().
 
Deniskaaa:

Такое дело - нужно определить минимальное и максимальное значение цены за последние, например 100 баров, ну и потом зафиксировать рост/падение при снижении/росте цены, чтобы обрисовать разворотный патерн типа 1 2 3. Не могу понять разницу между функциями ArrayMaximum и iHighest. Если я правильно понимаю, то результатом их вычислений будет только индекс максимального бара на указанном промежутке массива? А для расчётов требуется использование оператора for при работе с массивами, как в задаче 26 из учебника?  Я изменил этот код то такого вида


 


Если хочешь торговать по этим сигналам, то не стоит. Если учишься программировать, пиши правильно.

 double

   Level_1,                                    // Сигнальный уровень 1
   Level_2,                                    // Сигнальный уровень 2
   Price;                                      // Текущая цена
сверху.
for(i=0;i<=Quant_Bars-1;i++) замени for(i=0; i<Quant_Bars; i++)
{
	if (Low[i]< Minimum)                      // Если < известного
         	Minimum=Low[i];                   // то оно и будет мин
      	if (High[i]> Maximum)                     // Если > известного
         	Maximum=High[i];                  // то оно и будет макс
}
добавлены фигурные скобки.
if (Price<Level_2) измени знак if (Price > Level_2) выше верхнего
 
kosmos0975:

Если хочешь торговать по этим сигналам, то не стоит. Если учишься программировать, пиши правильно.


Благодарю за ответ.
 

Начал изучать работу с файлами. Встретился с термином хэндл. Вопрос возник после написания кода: 

int filehandle;
filehandle=FileOpen("news.csv",FILE_READ);
Print("Файл открыт успешно. Хендл файла=", filehandle);
filehandle=FileOpen("news150901.csv",FILE_READ);
Print("Файл открыт успешно. Хендл файла=", filehandle);

Открыв первый файл news.csv программа присвоила переменной filehandle значение 1. Далее, программа открыла второй файл news150901.csv и присвоила переменной filehandle значение 2. Получается, что в программе теперь осталось значение хэндла только от открытия второго файла. Иными словами, я убил значение хэндла для первого открытого файла. Т.е. обращаться к данным/контенту и закрыть я смогу только второй файл? Является-ли использование одной переменной для хранения хэндла открытого файла ошибкой? Переменную для хэндла нужно создавать к каждому открываемому файлу свою?