Несколько вопросов и пожеланий к разработчикам

 
Переключился от Wealth-Lab к Метатрадер неделю назад. Хорошая программа, спасибо разработчикам. Особенно нравится использование языка С и более высокая скорость по сравнению с Wealth-Lab. Прочитал всю литературу по MQL4, которую смог найте на инете. Но несколько вопросов остались не отвечены. помогите пожайлуста

1. Пытаюсь создать индикатор, который предсказал бы будующие цены. По логике, эти цены должны иметь отрицательный индекс. Например, PriceCloe[-1], PriceClose[-2] и т.п. Но вот МТ не хочет их рисовать. А нельзя ли? Сам разобрался. Надо сдвигать элементы матриц влево, добавляя необходимое количество будущих баров справа. Делать вычисления и всё получится если использовать SetIndexShift(0,FutureBars).

2. Также пытаюсь создать ЕА, который бы рисовал channel trends. Вот, в Wealth-Lab например, чтобы нарисовать прямую линию, проходящую через бары В1 и В2 с ценами Р1 и Р2, имеется команда DrawLine(B1,P1,B2,P2,pane,color style of line), где Р1 и Р2 могут быть High, Low, Close or Open. Очень просто. А вот в MQL4, я так понял всё рисуется через ObjectCreate, который принимает координаты в виде времени и цены. А как бар перевести во время? Нельзя ли примерчик использования ObjectCreate для наросования прямой проходящей через определённые бары?

3. В одном индикаторе, у меня было так
if (k!=m/2)... где к и m оба целые числа.
Что-то не работало. Потратил уйму времени и нашёл в чём причина. Если m нечётное, то m/2 расчитывалось как целое число. Например, m=21, тогда m/2=10 а не 10.5. Исправил на if (k!=m/2.0)... и всё сработало. Неплохо бы если MQL4 не требовал .0 во всех случаях где выражение использует целые числа, а результат дробный. Например, компилятор мог бы понять что если целою число делится на другое целое число то результат может быть дробным.

4. Скопировал уйму индикаторов с инета в indicator folder. Скомпилировал их все. Только часть показывается в навигаторе. А что, есть какой-то предел на как много индикаторов навигатор может показывать? Сколько? Пришлось половину индикаторов по-удалять чтобы видеть те которые нужны. А нельзя ли их все показывать без ограничения? Неплохо бы в будущих версиях иметь возможность создавать subfоlders в custom indicator окне МТ терминала. Всё таки лучше когда всё организовано и по своим полочкам.

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

Владимир
 
1. это делается через SetIndexShift(int index, int shift) , посмотрите пример исходного кода ichimoku.mq4 в "MQL4: Ichimoku Kinko Hyo, Ishimoku"

2. посмотрите ObjectMove() и остальные функции ObjectXXXX в документации (есть вся помощь, встроенная в MetaEditor) и в онлайне: "MQL4: Графические объекты"

3. с целыми вся математика работает нормально, проверьте еще раз, пожалуйста

4. да, ограничение есть, если не ошибаюсь, то 512 элементов. если часть не показывается - видимо они не скомпилировались. Попробуйте открыть отсутствующие в редакторе и скомпилируйте вручную - посмотрите на ошибки.
 
1. Правильно

2. Time[номер бара]
Посмотрите наш пример создания объектов "MQL4: Вращение текстовых объектов"

3. Почитайте в документации "MQL4: Приведение типов"

4. Есть предел - 512 индикаторов. Подпапки в навигаторе в ближайшее время делать не будем
 
Спасибо за ответ. Некоторые индикаторы не скомпилировались. Времени нет на их исправление. Тем более что они не мои.

Насчёт математики перепроверил несолько раз. Я уверен что прав. Посмотрите на этот код

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red

//Indicator buffers
double PriceClose[];

int init()
{
   IndicatorBuffers(1);
   SetIndexBuffer(0,PriceClose);
   SetIndexStyle(0,DRAW_LINE);
   IndicatorShortName("Prices");
   return(0);
}

int deinit(){return(0);}
   
int start()
{
   int m=21;
   int k=10;
   if(k==m/2)Print("k=",k," m/2=",m/2);
   return(0);
}



Заметьте что if(k==m/2) должен переправить управление на return. Но са самом деле Print срабатывает, выдавая результат

2006.09.07 00:07:28 test EURUSD,Daily: k=10 m/2=10

Если исправить на if(k==m/2.0), то всё работает как положено.

 
Или я не так понял, но:

   int m=21;
   int k=10;
   if(k==m/2) Print("k=",k," m/2=",m/2);


Сработало абсолютно верно. Конечно же условие k==m/2 сработало верно и напечатало результат!

Заметьте что if(k==m/2) должен переправить управление на return

Не должен, почему Вы так решили?

 
Извините за ложную тревогу. Посмотрел здесь

"MQL4: Приведение типов"

и всё понял. Мне надо в будущем ставить точки самому где ответ ожидается дробным, а не ожидать MT делать эти решемия за меня. Так что всё работает. Вы ребята молодцы. Мне ваша программа очень нравится. Спасибо.

Владимир
Причина обращения: