[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 236

 
solnce600:
Не совсем понимаю,что значит двоичный поиск. Это поиск в двухмерном массиве? Но у меня одномерный.

Проведите сортировку массива, если Вы до сих пор ее не сделали и для контроля правильной подготовки в init() распринтуйте его содержание, можно не весь а 20-50 первых элементов.

P.S. Вы видите идентичность двоичности и двухмерности??? Терминал видит Ваши циферки в "двоичном" коде и для правильной работы функции ArrayBsearch() требует предварительной сортировки массива.

 
TarasBY:

Вы ничего там не увидели???

Я вижу, что функция ArrayBsearch() ВЕЗДЕ возвращает 0 (как индекс элемента). В 0-ой ячейке Вашего массива находится число 1.0408. Возвращаемся к коду:

Теперь подставляем в это условие полученные значения переменных (на каритинке Bid находится в пределах 0.8-0.9, возьмём максимум этого диапазона - 0.9): if (0.9000 - 1.0408 <= 0) OrderSend(). Условие выполняется ПРАВИЛЬНО!!! Ищите ошибки в заполнении своего массива. Предположительно Вы не обратили внимание на этот пункт работы функции ArrayBsearch():

Замечание: двоичный поиск обрабатывает только сортированные массивы. Для сортировки числового массива используется функция ArraySort().  

P.S. Print желательно предоставлять не в виде картинки, а путём одновременного выделения нескольких строк (с использованием SHIFT - если не знаете ка это делается) этого самого принта (достаточно 10-20 строк) в окне терминала, затем копирования выделенного и вставки в свой пост в виде кода с использованием кнопочки SRC.

Я понял что проблема в функции ArrayBsearch()

Но я так и не понял почему эта функция не должна сразу возвращать один единственный   N элемента массива со значением  наиболее близким по значению к значению value

Почему еще участвуют в  вычислениях  massiv[S-1]  и massiv[S+1] ?

 
solnce600:

Я понял что проблема в функции ArrayBsearch()

Но я так и не понял почему эта функция не должна сразу возвращать один единственный   N элемента массива со значением  наиболее близким по значению к значению value

Почему еще участвуют в  вычислениях  massiv[S-1]  и massiv[S+1] ?

Проблема не в функции ArrayBsearch(), а в подготовке передаваемого в эту функцию массива!!!

А дальше пошёл просто "полёт фантазии"... Вашей фантазии...

Функция ArrayBsearch() возвращает ЕДИНСТВЕННОЕ значение, а для того, чтобы найти причину кривости кода, я в принт вывел значения: (по порядку) значение ячейки массива с индексом S (его вернула функция ArrayBsearch()), ближайшее слева значение в заданном массиве (massive[]) с индексом S-1, ближайшее справа значение с индексом S+1, цену на момент открытия ордера.

Вы пришли в 1-ый класс, а пытаетесь подсматривать в класс к выпускникам... Вернитесь в свой класс!!! - аналогия. :))

 
TarasBY:

Проблема не в функции ArrayBsearch(), а в подготовке передаваемого в эту функцию массива!!!

А дальше пошёл просто "полёт фантазии"... Вашей фантазии...

Функция ArrayBsearch() возвращает ЕДИНСТВЕННОЕ значение, а для того, чтобы найти причину кривости кода, я в принт вывел значения: (по порядку) значение ячейки массива с индексом S (его вернула функция ArrayBsearch()), ближайшее слева значение в заданном массиве (massive[]) с индексом S-1, ближайшее справа значение с индексом S+1, цену на момент открытия ордера.

Вы пришли в 1-ый класс, а пытаетесь подсматривать в класс к выпускникам... Вернитесь в свой класс!!! - аналогия. :))

Все понял.Большое спасибо за помощь....я всегда немного тороплюсь и забегаю вперед....мне кажется в целом в этом больше плюсов чем минусов.

Единственное что еще не понимаю....

Вот мне нужно проинициализировать массив 3000 значениями.И я делал это при помощи EXCEL.

Мне показалось это долгим, многошаговым и нудным процессом.

А есть какие-то более оптимальные алгоритмы этого процесса?

Спасибо.

 
solnce600:

я делал это при помощи EXCEL.


Через DDE или через Лодырь?

Макрос напишите автоматизируете, если с истории. Открываете в Ворде со включенной записью макроса, там конвертируете и в эксель, там сохраняете макросом в csv и через DDE. По формату файлов данных метатрейдера и метастока не ко мне, некогда разбираться, сами. А так если double array[3000] нулями, то через for, но нулями и так инициализируются, если не ошибаюсь. 

 
solnce600:
Все понял.Большое спасибо за помощь....я всегда немного тороплюсь и забегаю вперед....мне кажется в целом в этом больше плюсов чем минусов.

Единственное что еще не понимаю....

Вот мне нужно проинициализировать массив 3000 значениями.И я делал это при помощи EXCEL.

Мне показалось это долгим, многошаговым и нудным процессом.

А есть какие-то более оптимальные алгоритмы этого процесса?

Спасибо.


Выложите файл, в котором записаны значения инициализации..
 
gyfto:


Через DDE или через Лодырь?

Макрос напишите автоматизируете, если с истории. Открываете в Ворде со включенной записью макроса, там конвертируете и в эксель, там сохраняете макросом в csv и через DDE. По формату файлов данных метатрейдера и метастока не ко мне, некогда разбираться. А так если нулями, то через for, но нулями и так инициализируются, если не ошибаюсь. 

Спасибо буду изучать.А я просто заходил в Сервис - сохранял в файл EXCEL историю по паре.

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

включаемые файл mqh.

Если есть ссылочки  на инф. о DDE или  Лодырь - дайте пожалуйста.

Спасибо.

 
solnce600:

Спасибо буду изучать.А я просто заходил в Сервис - сохранял в файл EXCEL историю по паре.

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

включаемые файл mqh.

Если есть ссылочки  на инф. о DDE или  Лодырь - дайте пожалуйста.

Спасибо.



Да не нужен вам ни DDE ни Лодырь. Нужна функция (10 строчек кода). кидаете файл в дирректорию терминала и массив будет проинициализирован.. Файл давайте.
 
Dima.A.:

Да не нужен вам ни DDE ни Лодырь. Нужна функция (10 строчек кода). кидаете файл в дирректорию терминала и массив будет проинициализирован.. Файл давайте.

Мне нужно инициализировать 2 массива

1.double

2.datetime

В первом массиве некоторые значения после 1120 строки почему - то преобразовались в другой формат после того как я поменял разделительный знак запятую на точку.(у меня там была запятая)

Если не сложно киньте мне пожалуйста и эти 10 строк кода ......я буду их изучать....мне хочется научится делать в дальнейшем это самому.

Большое спасибо за помощь.

 
solnce600:
Странно.Файл 140 кило.Я его заархивировал и прикрепил к сообщению.....а его нет.


Урежьте файл, мне достаточно пары строк в нем..
Причина обращения: