Нужно в мт4 с помощью mql получить данные тех индикатора,например МА5 с таймфреймом 1 d, на момент 14.30 позавчерашнего дня.
т.е. если бы я позавчера в 14.30 запустил скрипт с iMA, то вопросов бы не возникло, но как сегодня их получить.
хотя бы подскажите куда копать
Это очень просто. Для расчета iMA нужно задать 7 параметров. Первый параметр, имя символа, очевиден. В качестве второго, таймфрейм, задайте М1. Третий параметр - период - задайте во столько раз больше требуемого Вам, во сколько день больше минуты. Четвертый параметр - сдвиг = 0. Следующие два параметра - метод усреднения и тип цены - Вы знаете. Последний параметр - номер бара - вычислите, зная требуемое Вам время. Вот и все! Перепроверьте это, сделав расчеты для таймфреймов М5 и М15. Может быть даже для М30.
Это очень просто. Для расчета iMA нужно задать 7 параметров. Первый параметр, имя символа, очевиден. В качестве второго, таймфрейм, задайте М1. Третий параметр - период - задайте во столько раз больше требуемого Вам, во сколько день больше минуты. Четвертый параметр - сдвиг = 0. Следующие два параметра - метод усреднения и тип цены - Вы знаете. Последний параметр - номер бара - вычислите, зная требуемое Вам время. Вот и все! Перепроверьте это, сделав расчеты для таймфреймов М5 и М15. Может быть даже для М30.
К сожалению это как раз то и не просто. Во всяком случае мне это не очевидно. Если мы возьмем МА5, таймфрейм 1440 (1 день), выберем бар номер 2 (позавчерашний день), то мы получим показатель МА5 для открытия или закрытия последней свечи, но не момент 14.30. А нужно указать именно его. Еще раз. Тех индикаторы вычисляются из нескольких свечей открываются они в 00.00 (если мы говорим о дне), закрываются 23.59, но последняя свеча (если это 0 бар), не закрыта, а берется для ее вычисления последняя цена 0 бара. Если вы вычисляете МА находясь на нулевом баре, то сложностей не возникнет, а если это не нулевой бар, а середина предыдущего дня, тогда что делать? Как вычеслить для середины предыдущего дня МА с ТФ 1440?
К сожалению это как раз то и не просто. Во всяком случае мне это не очевидно. Если мы возьмем МА5, таймфрейм 1440 (1 день), выберем бар номер 2 (позавчерашний день), то мы получим показатель МА5 для открытия или закрытия последней свечи, но не момент 14.30. А нужно указать именно его. Еще раз. Тех индикаторы вычисляются из нескольких свечей открываются они в 00.00 (если мы говорим о дне), закрываются 23.59, но последняя свеча (если это 0 бар), не закрыта, а берется для ее вычисления последняя цена 0 бара. Если вы вычисляете МА находясь на нулевом баре, то сложностей не возникнет, а если это не нулевой бар, а середина предыдущего дня, тогда что делать? Как вычеслить для середины предыдущего дня МА с ТФ 1440?
Все просто
voidOnStart()
{
// Формируем время Alert("14.30 позавчерашнего дня = ",StrToTime(TimeToStr(iTime(NULL,1440,2),TIME_DATE)+" "+"14:30"));
//14.30 позавчерашнего дняdatetime time=StrToTime(TimeToStr(iTime(NULL,1440,2),TIME_DATE)+" "+"14:30");
//Бар 14.30 позавчерашнего дняint shift=iBarShift(NULL,0,time);
//Машка 14.30 позавчерашнего дня double ma=iMA(NULL,0,13,0,MODE_SMMA,PRICE_MEDIAN,shift);
Alert("Машка 14.30 позавчерашнего дня = ",DoubleToString(ma,Digits));
}
К сожалению это как раз то и не просто. Во всяком случае мне это не очевидно. Если мы возьмем МА5, таймфрейм 1440 (1 день), выберем бар номер 2 (позавчерашний день), то мы получим показатель МА5 для открытия или закрытия последней свечи, но не момент 14.30. А нужно указать именно его. Еще раз. Тех индикаторы вычисляются из нескольких свечей открываются они в 00.00 (если мы говорим о дне), закрываются 23.59, но последняя свеча (если это 0 бар), не закрыта, а берется для ее вычисления последняя цена 0 бара. Если вы вычисляете МА находясь на нулевом баре, то сложностей не возникнет, а если это не нулевой бар, а середина предыдущего дня, тогда что делать? Как вычеслить для середины предыдущего дня МА с ТФ 1440?
Это очень просто. Для расчета iMA нужно задать 7 параметров. Первый параметр, имя символа, очевиден. В качестве второго, таймфрейм, задайте М1. Третий параметр - период - задайте во столько раз больше требуемого Вам, во сколько день больше минуты. Четвертый параметр - сдвиг = 0. Следующие два параметра - метод усреднения и тип цены - Вы знаете. Последний параметр - номер бара - вычислите, зная требуемое Вам время. Вот и все! Перепроверьте это, сделав расчеты для таймфреймов М5 и М15. Может быть даже для М30.
Здравствуйте. Спасибо STARIJ и Artyom Trishkin за прошлую консультацию. Но так как я всё ещё остаюсь новичком, возникают другие вопросы. Например, следующий. Для открытия в одном баре только одной позиции я использую следующую функцию:
void Fun_New_Bar() // Ф-ия обнаружения нового бара
{
staticdatetime New_Time=0; // Время текущего бара
New_Bar=false; // Нового бара нет if(New_Time!=Time[0]) // Сравниваем время
{
New_Time=Time[0]; // Теперь время такое
New_Bar=true; // Поймался новый бар
}
}
И сразу же возникает вопрос: зачем при каждом обращении к функции статическую переменную отправлять "в начало времён" ? Ведь она при первом обращении и так самостоятельно принимает нулевое значение, а потом пусть себе хранит значение прошлого нулевого бара до следующего обращения, а не сбрасывается до нуля. Наверное можно было бы ещё упростить эту и так простую функцию. Правда сам я опасаюсь её испортить. И ещё вопрос по этой же функции: а не может такого случиться, что выражение New_Time=Time[0]; не поймает ту миллисекунду, когда открылся новый бар? что тогда произойдет? Спасибо.
Здравствуйте. Спасибо STARIJ и за прошлую консультацию. Но так как я всё ещё остаюсь новичком, возникают другие вопросы. Например, следующий. Для открытия в одном баре только одной позиции я использую следующую функцию:
И сразу же возникает вопрос: зачем при каждом обращении к функции статическую переменную отправлять "в начало времён" ? Ведь она при первом обращении и так самостоятельно принимает нулевое значение, а потом пусть себе хранит значение прошлого нулевого бара до следующего обращения, а не сбрасывается до нуля. Наверное можно было бы ещё упростить эту и так простую функцию. Правда сам я опасаюсь её испортить. И ещё вопрос по этой же функции: а не может такого случиться, что выражение New_Time=Time[0]; не поймает ту миллисекунду, когда открылся новый бар? что тогда произойдет? Спасибо.
А вы почитайте сколько раз инициализируется статическая переменная. И вопрос сам отпадёт за его несуразностью ;)
Здравствуйте. Спасибо STARIJ и Artyom Trishkin за прошлую консультацию. Но так как я всё ещё остаюсь новичком, возникают другие вопросы. Например, следующий. Для открытия в одном баре только одной позиции я использую следующую функцию:
И сразу же возникает вопрос: зачем при каждом обращении к функции статическую переменную отправлять "в начало времён" ? Ведь она при первом обращении и так самостоятельно принимает нулевое значение, а потом пусть себе хранит значение прошлого нулевого бара до следующего обращения, а не сбрасывается до нуля. Наверное можно было бы ещё упростить эту и так простую функцию. Правда сам я опасаюсь её испортить. И ещё вопрос по этой же функции: а не может такого случиться, что выражение New_Time=Time[0]; не поймает ту миллисекунду, когда открылся новый бар? что тогда произойдет? Спасибо.
Доброго времени суток уважаемые форумчане.
Помогите решить следующую задачу:
Нужно в мт4 с помощью mql получить данные тех индикатора,например МА5 с таймфреймом 1 d, на момент 14.30 позавчерашнего дня.
т.е. если бы я позавчера в 14.30 запустил скрипт с iMA, то вопросов бы не возникло, но как сегодня их получить.
хотя бы подскажите куда копать
Это очень просто. Для расчета iMA нужно задать 7 параметров. Первый параметр, имя символа, очевиден. В качестве второго, таймфрейм, задайте М1. Третий параметр - период - задайте во столько раз больше требуемого Вам, во сколько день больше минуты. Четвертый параметр - сдвиг = 0. Следующие два параметра - метод усреднения и тип цены - Вы знаете. Последний параметр - номер бара - вычислите, зная требуемое Вам время. Вот и все! Перепроверьте это, сделав расчеты для таймфреймов М5 и М15. Может быть даже для М30.
Это очень просто. Для расчета iMA нужно задать 7 параметров. Первый параметр, имя символа, очевиден. В качестве второго, таймфрейм, задайте М1. Третий параметр - период - задайте во столько раз больше требуемого Вам, во сколько день больше минуты. Четвертый параметр - сдвиг = 0. Следующие два параметра - метод усреднения и тип цены - Вы знаете. Последний параметр - номер бара - вычислите, зная требуемое Вам время. Вот и все! Перепроверьте это, сделав расчеты для таймфреймов М5 и М15. Может быть даже для М30.
К сожалению это как раз то и не просто. Во всяком случае мне это не очевидно. Если мы возьмем МА5, таймфрейм 1440 (1 день), выберем бар номер 2 (позавчерашний день), то мы получим показатель МА5 для открытия или закрытия последней свечи, но не момент 14.30. А нужно указать именно его. Еще раз. Тех индикаторы вычисляются из нескольких свечей открываются они в 00.00 (если мы говорим о дне), закрываются 23.59, но последняя свеча (если это 0 бар), не закрыта, а берется для ее вычисления последняя цена 0 бара. Если вы вычисляете МА находясь на нулевом баре, то сложностей не возникнет, а если это не нулевой бар, а середина предыдущего дня, тогда что делать? Как вычеслить для середины предыдущего дня МА с ТФ 1440?
Огромное спасибо! Буду приступать к написанию кода :) О результатах отпишусь.
К сожалению это как раз то и не просто. Во всяком случае мне это не очевидно. Если мы возьмем МА5, таймфрейм 1440 (1 день), выберем бар номер 2 (позавчерашний день), то мы получим показатель МА5 для открытия или закрытия последней свечи, но не момент 14.30. А нужно указать именно его. Еще раз. Тех индикаторы вычисляются из нескольких свечей открываются они в 00.00 (если мы говорим о дне), закрываются 23.59, но последняя свеча (если это 0 бар), не закрыта, а берется для ее вычисления последняя цена 0 бара. Если вы вычисляете МА находясь на нулевом баре, то сложностей не возникнет, а если это не нулевой бар, а середина предыдущего дня, тогда что делать? Как вычеслить для середины предыдущего дня МА с ТФ 1440?
Все просто
Как то так
Есть идеи как организовать отправку сигналов по скрипту?
нужна помощь знащих
короч проблема вот в чем, есть исходник советника раньше в 2014 году компилировался и все было хорошо
решил на днях запилить новый счет и скомпилировать советника на него, а оно не хотит компилироваться
выдает 23 вот такие ошибки ( } )
куда копать и что изменилось с 2014 года ?
К сожалению это как раз то и не просто. Во всяком случае мне это не очевидно. Если мы возьмем МА5, таймфрейм 1440 (1 день), выберем бар номер 2 (позавчерашний день), то мы получим показатель МА5 для открытия или закрытия последней свечи, но не момент 14.30. А нужно указать именно его. Еще раз. Тех индикаторы вычисляются из нескольких свечей открываются они в 00.00 (если мы говорим о дне), закрываются 23.59, но последняя свеча (если это 0 бар), не закрыта, а берется для ее вычисления последняя цена 0 бара. Если вы вычисляете МА находясь на нулевом баре, то сложностей не возникнет, а если это не нулевой бар, а середина предыдущего дня, тогда что делать? Как вычеслить для середины предыдущего дня МА с ТФ 1440?
Здравствуйте. Спасибо STARIJ и Artyom Trishkin за прошлую консультацию. Но так как я всё ещё остаюсь новичком, возникают другие вопросы. Например, следующий. Для открытия в одном баре только одной позиции я использую следующую функцию:
И сразу же возникает вопрос: зачем при каждом обращении к функции статическую переменную отправлять "в начало времён" ? Ведь она при первом обращении и так самостоятельно принимает нулевое значение, а потом пусть себе хранит значение прошлого нулевого бара до следующего обращения, а не сбрасывается до нуля. Наверное можно было бы ещё упростить эту и так простую функцию. Правда сам я опасаюсь её испортить. И ещё вопрос по этой же функции: а не может такого случиться, что выражение New_Time=Time[0]; не поймает ту миллисекунду, когда открылся новый бар? что тогда произойдет? Спасибо.
Здравствуйте. Спасибо STARIJ и за прошлую консультацию. Но так как я всё ещё остаюсь новичком, возникают другие вопросы. Например, следующий. Для открытия в одном баре только одной позиции я использую следующую функцию:
И сразу же возникает вопрос: зачем при каждом обращении к функции статическую переменную отправлять "в начало времён" ? Ведь она при первом обращении и так самостоятельно принимает нулевое значение, а потом пусть себе хранит значение прошлого нулевого бара до следующего обращения, а не сбрасывается до нуля. Наверное можно было бы ещё упростить эту и так простую функцию. Правда сам я опасаюсь её испортить. И ещё вопрос по этой же функции: а не может такого случиться, что выражение New_Time=Time[0]; не поймает ту миллисекунду, когда открылся новый бар? что тогда произойдет? Спасибо.
Здравствуйте. Спасибо STARIJ и Artyom Trishkin за прошлую консультацию. Но так как я всё ещё остаюсь новичком, возникают другие вопросы. Например, следующий. Для открытия в одном баре только одной позиции я использую следующую функцию:
И сразу же возникает вопрос: зачем при каждом обращении к функции статическую переменную отправлять "в начало времён" ? Ведь она при первом обращении и так самостоятельно принимает нулевое значение, а потом пусть себе хранит значение прошлого нулевого бара до следующего обращения, а не сбрасывается до нуля. Наверное можно было бы ещё упростить эту и так простую функцию. Правда сам я опасаюсь её испортить. И ещё вопрос по этой же функции: а не может такого случиться, что выражение New_Time=Time[0]; не поймает ту миллисекунду, когда открылся новый бар? что тогда произойдет? Спасибо.
По второму вопросу,
если первый тик не поймает,поймает второй.