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

 
STARIJ:

    пересечение МА происходит между барами - поймал наглядный пример

МА на барах левее и правее пересечения отличается от цены в точке пересечения. Как понял, вопрошающему нужно значение точно в точке пересечения вместо значения на одном из соседних баров. Точно это значение можно получить использованием линейной интерполяции - ведь МА между барами строится отрезками прямой. Или взять координаты каждой МА на соседних барах. Построить аналитически 2 прямые линии и рассчитать точку их пересечения. Можно произвести расчет рассматривая 2 подобных треугольника. Возникает встречный вопрос - зачем это нужно? Сопоставимы ли затраты с ценностью результата? Ведь при минимальном изменении параметров МА точки пересечения сдвинутся. Скорее всего, это требует руководитель курсового проекта

спасибо за разьяснение понял что сделать это не просто
 
missha32:

Не могу найти где ошибся в расчетах может кто поможет
Нужно найти максимум и минимум прошлого дня , но почему то минимум находит аж в позапрошлом дне

Вместо всего этого лучше использовать CopyHigh и CopyLow с указанием периода PERIOD_D1 и соответствующего бара или времени.

CopyHigh - Доступ к таймсериям и индикаторам - Справочник MQL4
CopyHigh - Доступ к таймсериям и индикаторам - Справочник MQL4
  • docs.mql4.com
CopyHigh - Доступ к таймсериям и индикаторам - Справочник MQL4
 
missha32:  Нужно найти максимум и минимум прошлого дня , но почему то минимум находит аж в позапрошлом дне
  // iHigh и iLow дают макс и мин цены указанного бара. Если PERIOD_D1, то целых суток  если 1 то вчерашних последних завершенных суток

   Alert("Максимум вчерашнего дня = ", iHigh(_Symbol, PERIOD_D1, 1));
   Alert("Минимум  вчерашнего дня = ", iLow(_Symbol,  PERIOD_D1, 1));
Любой бар любого ТаймФрейма содержит обобщенную информацию соответствующего интервала баров младших Таймфреймов: Максимум; Минимум; время открытия, равное времени открытия первого бара в интервале; время закрытия, равное времени закрытия последнего бара в интервале;  объем, равный сумме объемов баров интервала. Вернее эта информация содержится в соответствующих массивах
 
STARIJ:
Любой бар любого ТаймФрейма содержит обобщенную информацию соответствующего интервала баров младших Таймфреймов: Максимум, Минимум, время открытия и закрытия, и объем, равный сумме объемов с младших баров. Вернее эта информация содержится в соответствующих массивах

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

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

 
missha32:

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

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

Вы там столько нагородили, что даже разбираться руки опускаются. Гора преобразований из одного в другое...

И всё для того, чтобы найти максимум и минимум дня?

А так что не подходит вам?

//+------------------------------------------------------------------+
double GetPriceMaximum(const string symbol_name,const ENUM_TIMEFRAMES timeframe,int shift){
   double array[1];
   ResetLastError();
   if(CopyHigh(symbol_name,timeframe,shift,1,array)==1) return(array[0]);
   Print(__FUNCTION__," > Ошибка копирования цены High: ",GetLastError());
   return(WRONG_VALUE);
}
//+------------------------------------------------------------------+
double GetPriceMinimum(const string symbol_name,const ENUM_TIMEFRAMES timeframe,int shift){
   double array[1];
   ResetLastError();
   if(CopyLow(symbol_name,timeframe,shift,1,array)==1) return(array[0]);
   Print(__FUNCTION__," > Ошибка копирования цены Low: ",GetLastError());
   return(WRONG_VALUE);
}
//+------------------------------------------------------------------+

Нужно узнать максимум сегодняшнего дня? Пожалуйста:

double max_price=GetPriceMaximum(Symbol(),PERIOD_D1,0);

Нужно узнать максимум вчерашнего дня? Легко:

double max_price=GetPriceMaximum(Symbol(),PERIOD_D1,1);

Нужно узнать минимум позавчерашнего дня? Не вопрос:

double min_price=GetPriceMinimum(Symbol(),PERIOD_D1,2);

Ну можно пойти лёгким путём, и использовать чисто четвёрошные функции:

double price_max=iHigh(Symbol(),PERIOD_D1,1);

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

 
Artyom Trishkin:

Вы там столько нагородили, что даже разбираться руки опускаются. Гора преобразований из одного в другое...

И всё для того, чтобы найти максимум и минимум дня?

А так что не подходит вам?

Нужно узнать максимум сегодняшнего дня? Пожалуйста:

Нужно узнать максимум вчерашнего дня? Легко:

Нужно узнать минимум позавчерашнего дня? Не вопрос:

Ну можно пойти лёгким путём, и использовать чисто четвёрошные функции:

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

Сам нашел ошибку ( все невнимательность неверно прочитал параметры iHighest ,iLowest).

Так не подходит так как будут нужны другие расчеты со вчерашнего дня

 
missha32:

Сам нашел ошибку ( все невнимательность неверно прочитал параметры iHighest ,iLowest).

Так не подходит так как будут нужны другие расчеты со вчерашнего дня

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

if(Красный) OrderSend( ... Покупка ...) ;         if( Синий )  OrderSend( ... Продажа ...) ;

Только вроде наоборот, вверху продавай, внизу покупай...

Функция OnInit (по старому просит init) выполняется при запуске индикатора (ну еще при смене таймфрейма, перекомпиляции, ...). Все используемые переменные должны иметь присвоенное им значение. В функции OnInit есть строка   SetIndexDrawBegin(0,i-1);  Надо бы переменной i присвоить значение или использовать константу

 
STARIJ:

if(Красный) OrderSend( ... Покупка ...) ;         if( Синий )  OrderSend( ... Продажа ...) ;

Только вроде наоборот, вверху продавай, внизу покупай...

Функция OnInit (по старому просит init) выполняется при запуске индикатора (ну еще при смене таймфрейма, перекомпиляции, ...). Все используемые переменные должны иметь присвоенное им значение. В функции OnInit есть строка   SetIndexDrawBegin(0,i-1);  Надо бы переменной i присвоить значение или использовать константу

Если честно то ничего не понял я новичек в программировании Mql4 если не тяжело можете помочь с кодом
 
missha32:
Если честно то ничего не понял я новичек в программировании Mql4 если не тяжело можете помочь с кодом

Кодом обычно во фрилансе помогают.

Здесь - либо алгоритм, либо поправить ваши ошибки. Но не переписать за вас по-новой.

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