Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 770

 
Igor Zakharov:

Используйте индикатор ATR

Спасибо, но я пока не понял как его можно использовать в моём случае.

Кто-то кинул ссылку на CopyRates (Спасибо, к сожалению комент удален), вот пытаюсь понять iVolume() это разница между High и Low цены или что-то другое ?

т.е. в моём случае (как я понял) можно создать массив данных за месяц и неделю и потом усреднить значения и т.д.

 
Alexander Layzerevich:

 вот пытаюсь понять iVolume() это разница между High и Low цены или что-то другое ?

это тиковые объемы, кликните правой мышей на график в МТ и выберите показывать объемы - появятся гистограммы внизу графика - это они

https://docs.mql4.com/ru/series/ivolume

iVolume - Доступ к таймсериям и индикаторам - Справочник MQL4
iVolume - Доступ к таймсериям и индикаторам - Справочник MQL4
  • docs.mql4.com
Значение тикового объема бара (указанного параметром shift) соответствующего графика или 0 в случае ошибки. Для получения дополнительной информации об ошибке необходимо вызвать функцию GetLastError().
 
Igor Makanu:

это тиковые объемы, кликните правой мышей на график в МТ и выберите показывать объемы - появятся гистограммы внизу графика - это они

https://docs.mql4.com/ru/series/ivolume

Огромное спасибо за разъяснение.

Значит остаётся следующее: Создаются 2 массива High и Low для расчёта данных за месяц и 2 массива High и Low для расчётов за неделю.

Далее всё усредняется  и т.д.

Попробую воплотить всё в коде...

Вот еще вопрос возник: Как лучше считать последний месяц и последнюю неделю ?

судя по примеру :

Обращение по начальной позиции и количеству требуемых элементов

int  CopyHigh( 
   string           symbol_name,      // имя символа 
   ENUM_TIMEFRAMES  timeframe,        // период 
   int              start_pos,        // откуда начнем  
   int              count,            // сколько копируем 
   double           high_array[]      // массив для копирования максимальных цен 
   );

timeframe = PERIOD_D1;

start_pos = 1; // Предыдущий бар

count = 30; // 30 дней (месяц)

 
Alexander Layzerevich:

Вот еще вопрос возник: Как лучше считать последний месяц и последнюю неделю ?

лучше к дате привязываться, т.к. бывают пропуски (котировок) баров и выходные дни когда не бывает баров, вот это поможет:

Обращение по начальной и конечной датам требуемого интервала времени

int  CopyHigh(
   string           symbol_name,      // имя символа
   ENUM_TIMEFRAMES  timeframe,        // период
   datetime         start_time,       // с какой даты
   datetime         stop_time,        // по какую дату
   double           high_array[]      // массив для копирования максимальных цен
   );

https://docs.mql4.com/ru/series/copyhigh

CopyHigh - Доступ к таймсериям и индикаторам - Справочник MQL4
CopyHigh - Доступ к таймсериям и индикаторам - Справочник MQL4
  • docs.mql4.com
Функция получает в массив high_array исторические данные максимальных цен баров для указанной пары символ-период в указанном количестве. Необходимо отметить, что отсчет элементов от стартовой позиции ведется от настоящего к прошлому, то есть стартовая позиция, равная 0, означает текущий бар. При копировании заранее неизвестного количества...
 
Igor Makanu:

лучше к дате привязываться, т.к. бывают пропуски (котировок) баров и выходные дни когда не бывает баров, вот это поможет:

https://docs.mql4.com/ru/series/copyhigh

Спасибо, только как дать понять Советнику (Роботу) с какой даты начинать и где остановиться.

Мне проще посчитать 30 свечей (30 дней) от 1-й.(от вчера). Ну или 7 свечей (дней).

Получился такой код:

//************************************************************************************************/
double iPointOrderStep()
{
double Awerage30 = 0, SummAwerage30 = 0;
double Awerage7 = 0, SummAwerage7 = 0;

double High30[], Low30[], High7[], Low7[];
//----------------Для месяца---------------------------
int iHigh30 = CopyHigh(Symbol(),PERIOD_D1,1,30,High30);
int iLow30 = CopyLow(Symbol(),PERIOD_D1,1,30,Low30);
//----------------Для недели---------------------------
int iHigh7 = CopyHigh(Symbol(),PERIOD_D1,1,7,High7);
int iLow7 = CopyLow(Symbol(),PERIOD_D1,1,7,Low7);

for(int i=0;i<30;i++) 
   {
      SummAwerage30 += (High30[i]-Low30[i]);
   }
for(int i=0;i<7;i++) 
   {
      SummAwerage7 += (High7[i]-Low7[i]);
   }

   Awerage30 = SummAwerage30/30;
   Awerage7 = SummAwerage7/7;
   
   double iPointOrderStep = NormalizeDouble(((Awerage30+Awerage7)/2),0);
   return (iPointOrderStep/6);
}
//************************************************************************************************/

 Но к сожалению, значение выдаёт = 0.

Подскажите, где ошибка..

И ещё...

Как сделать чтоб расчёт делался раз в неделю в начале сессии или если был перезапуск терминала ?

 
Alexander Layzerevich:

Спасибо, но я пока не понял как его можно использовать в моём случае.

Суть ATR - средняя высота баров за период. С таким же успехом можно использовать MA(high)-MA(low). Это проще, чем разворачивать перебор

 
Igor Zakharov:

Суть ATR - средняя высота баров за период. С таким же успехом можно использовать MA(high)-MA(low). Это проще, чем разворачивать перебор

т.е. судя по Примеру 

int  iATR(
   string           symbol,        // имя символа
   ENUM_TIMEFRAMES  period,        // период
   int              ma_period      // период усреднения
   );

double Awerage30 = iATR (Symbol(),PERIOD_D1, 30); это будет усредненное числовое значение за 30 дней ?

 
Alexander Layzerevich:

т.е. судя по Примеру 

int  iATR(
   string           symbol,        // имя символа
   ENUM_TIMEFRAMES  period,        // период
   int              ma_period      // период усреднения
   );

double Awerage30 = iATR (Symbol(),PERIOD_D1, 30); это будет усредненное числовое значение за 30 дней ?

только не календарных. 30 дневных баров назад (воскресенья, субботы)

Судя по функции без параметра shift вы в 5ке делаете, а вопрос в четвёрошной ветке задали :)

 
Igor Zakharov:

только не календарных. 30 дневных баров назад (воскресенья, субботы)

Судя по функции без параметра shift вы в 5ке делаете, а вопрос в четвёрошной ветке задали :)

Эта ветка по обоим терминалам. Особенно при одинаковых функциях. 

 
Artyom Trishkin:
Эта ветка по обоим терминалам. Особенно при одинаковых функциях. 

Может тогда заголовок поправить?

Причина обращения: