Тестирование Систем прогнозирования в реальном времени - страница 52

 
grasn >>:

все же меньше 1.55 :о) Посмотрим

Очень похоже на то ^_^, по крайней мере если смотреть по опционам

Visual CME Options

 
grasn писал(а) >>

(1) Как правильно иницализировать многомерный массив (все его измерения). Вот такой код, как я понимаю, будет корректен для одномерного массива и первого найденного измерений в многомерном:

double memRow[];

ArrayResize(memRow, N);
ArrayInitialize(memRow, 0.0);

А как поступать с большим количеством измерений?

(2) Как динамически расширять одномерный и многомерный массивы?

В этом случае, массив memRow[] должен увеличиваться на какую то величину при каждой итерации, не важно какую, пусть для простоты это будет 1. Аналогично, для 2D массива, расти он должен в двух направлениях по i и j - memRow[i][j]

(1) Все правильно и для нескольких измерений точно так же. Инициализация прописывает одно значение во все элементы массива независимо от размерности.

(2) Увы, ничего не выйдет. В МКЛ4 можно изменять размерность только первого измерения многомерного массива. Может быть это поправят в МКЛ5.

 
NEKSUS_ >>:

Очень похоже на то ^_^, по крайней мере если смотреть по опционам

Visual CME Options

Откуда такие красивые данные?

 
dentraf >>:

Откуда такие красивые данные?

  Данные самые обыкновенные, а красивые или нет, это от автора зависит ^_^

 

grasn, если программирование на MQL4 не является самоцелью, то наиболее важные части проекта, особенно если им требуются для нормальной реализации многомерные массивы, не правильнее написать на Си и прицепить в виде DLL? Будет и быстрее работать, и отлаживаться удобнее, и исходник более читабельный получится (без наворотов с кучей массивов, косвенной индексацией и пр. фигней, которую прийдется изобратеть на MQL, чтобы обойти его ограничения).

 
grasn >>:

прогнозирую реализации (траектории), но при принятии торговых решений ориентируюсь на "частотные" харктеристики, например, среднее значение +/- ско наиболее вероятных тракторий на горизонте прогнозирования. Они более надежны с точки зрения достижения целей, но путь цены к таким уровням может быть весьма витиеватым. Второй подход к оценке локальных зон разворота я конечно же прорабатываю. Что касается MM, как такового - то тут не так все просто, это видимо - отдельная, серьезная задача.

ровно по этой причине, а именно предметности разговора, сейчас перевожу код с MathCAD на MT. Статистический смысл будет иметь период тестирования не менее 6 месяцев (на глаз). Так, что выложу стейт немного позже.


Кстати, есть вопрос по программированию, а то застрял (из меня еще тот программист):

(1) Как правильно иницализировать многомерный массив (все его измерения). Вот такой код, как я понимаю, будет корректен для одномерного массива и первого найденного измерений в многомерном:

double memRow[];

ArrayResize(memRow, N);
ArrayInitialize(memRow, 0.0);


А как поступать с большим количеством измерений?


(2) Как динамически расширять одномерный и многомерный массивы?



for(i=0; i<=N-1; i++)

{

...

memRow[];

...

}


В этом случае, массив memRow[] должен увеличиваться на какую то величину при каждой итерации, не важно какую, пусть для простоты это будет 1. Аналогично, для 2D массива, расти он должен в двух направлениях по i и j - memRow[i][j]


Видимо обращение к многомерному массиву придется реализовать в виде функции.


Например, у Вас есть одномерный массив a[n]


тогда, предположим, что мы хотим его использовать, как трехмерный массив i,k,j


тогда элемент (i,k,j) будет адресоваться в массиве a, как a[i*3+k*2+j]


Ну и так далее...

 

to Yurixx

(1) Все правильно и для нескольких измерений точно так же. Инициализация прописывает одно значение во все элементы массива независимо от размерности.

(2) Увы, ничего не выйдет. В МКЛ4 можно изменять размерность только первого измерения многомерного массива. Может быть это поправят в МКЛ5.

Рад видеть в нашей тихой гавани :о) И хорошо, что она тихая в отличии от соседних веточек, где бушуют страсти человеческие, на ровном месте. Небольшое резюме для более ясного понимания. Допустим есть такая конструкция:

double memRow[];

...

<какая то первая инициализация массива>

j=1

for(int i=0; i<=N-1; i++)

{

if(<какое то условие>)

{

ArrayResize(memRow, j+1);

<запись значений в расширенный массив>

...

}

}


Как я понял она обеспечит динамическое увеличение массива memRow[] при срабатывании какого то условия. Т.е. наперед длину массива я не знаю. Я все правильно понял?


to marketeer

grasn, если программирование на MQL4 не является самоцелью, то наиболее важные части проекта, особенно если им требуются для нормальной реализации многомерные массивы, не правильнее написать на Си и прицепить в виде DLL? Будет и быстрее работать, и отлаживаться удобнее, и исходник более читабельный получится (без наворотов с кучей массивов, косвенной индексацией и пр. фигней, которую прийдется изобратеть на MQL, чтобы обойти его ограничения).

На C/C++ я программирую еще хуже, чем на MQL. А в целом уже лет как 15 не программирую или около того. Сейчас хочу получить первый результат, на базе которого буду делать какие то выводы. Конечно, я не получу быстродействие, но система как то начнет работать в режиме автомата. По крайне мере я на это надеюсь. :о)


А так Вы конечно правы, в перспективе некоторые функции заменю dll, а возможно и всю систему.


to sol

Видимо обращение к многомерному массиву придется реализовать в виде функции.

Например, у Вас есть одномерный массив a[n]

тогда, предположим, что мы хотим его использовать, как трехмерный массив i,k,j

тогда элемент (i,k,j) будет адресоваться в массиве a, как a[i*3+k*2+j]

Ну и так далее...

Интересная идея, но на каждой итерации приводящей к изменению размерности матрицы фактически потребует переборку (или пересборку) всего массива. Хотя, вероятно, это вполне осуществимо. Спасибо за идею.

 
grasn писал(а) >>

Допустим есть такая конструкция:

double memRow[];

...

<какая то первая инициализация массива>

j=1

for(int i=0; i<=N-1; i++)

{

if(<какое то условие>)

{

ArrayResize(memRow, j+1);

<запись значений в расширенный массив>

...

}

}

Как я понял она обеспечит динамическое увеличение массива memRow[] при срабатывании какого то условия. Т.е. наперед длину массива я не знаю. Я все правильно понял?

Небольшой совет. Не стоит в цикле увеличивать массив на 1 элемент. Храните количество используемых (заполненных) элементов в дополнительной переменной и увеличивайте массив на десяток-другой элементов (прикидывайте сами для своей задачи) при нехватке места. Таким образом можно получить значительный прирост производительности. // Хотя я не в курсе как осуществляется выделение памяти под массивы в терминале. Если память выделяется с некоторым резервом на случай увеличения массива, то ArrayResize(memRow, j+1) будет выполняться весьма быстро.

 
lea >>:

Небольшой совет. Не стоит в цикле увеличивать массив на 1 элемент. Храните количество используемых (заполненных) элементов в дополнительной переменной и увеличивайте массив на десяток-другой элементов (прикидывайте сами для своей задачи) при нехватке места. Таким образом можно получить значительный прирост производительности. // Хотя я не в курсе как осуществляется выделение памяти под массивы в терминале. Если память выделяется с некоторым резервом на случай увеличения массива, то ArrayResize(memRow, j+1) будет выполняться весьма быстро.

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

 

to Yurixx

Предлагаю сыграть в старые, добрые наперстки, можно использовать любые стратегии и куда угодно подсматривать :о) Прогноз по EURUSD M15 на 300 отсчетов (с понедельника по среду включительно):

Вариант 1:



Энтропия процесса: 13.84



Вариант 2:


Энтропия процесса: 13.01



Вариант 3:


Энтропия процесса: 14.36


Какой наперсток поднимаешь? :о)

Файлы:
process_2.rar  5 kb
Причина обращения: