[АРХИВ]Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 5. - страница 235
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Чтобы понять что происходит, нужно вывести расчёты на принт:
и проанализируйте полученные результаты.Я ПОНЯЛ ,ЧТО Я ЧТО-ТО НЕДОПОНЯЛ.
Как я себе представлял исполнение условия в заголовке if
-программа получает значение переменной Bid (0.86084)
-вычитает из значение переменной Bid (0.86084) значение переменной massiv[S] (0.85375)
-получившуюся разницу 0.00709 сопоставляет с константой 0
-если разница > 0 - управление в тело оператора if не поступает и ордер не открывается
-если разница <= 0 - управление в тело оператора if поступает и ордер открывается
Как я себе представлял исполнение функции ArrayBsearch( massiv, value, WHOLE_ARRAY, 0, MODE_ASCEND)
СПРАВКА:Возвращает индекс первого найденного элемента в первом измерении массива.
Если элемент с указанным значением в массиве отсутствует, функция вернет индекс ближайшего меньшего по значению из элементов, между которыми расположено искомое значение.
-функция получает значение value равное значению цены последнего тика (Bid -0.86084)
-функция перебирает значения массива от меньшего к большему - не находит полного совпадения между каким бы то ни было значением массива и значением value
- поскольку значение 0.86084 в массиве отсутствует, функция возвращает ближайшее меньшее значение массива.Т.е. 0.820864(перв.),0.81074,0.85375,0.80084,0.81084,0.86088(посл.) Т.е. 0.85375 значение ближайшее к 0.86084 меньшее значение. Между 0.85375 и 0.86088 расположено искомое значение=0.86084
=====================================================================================================
У Вас в качестве параметров в функции print кроме значения элемента massiv[S] фигурируют еще massiv[S-1] и massiv[S+1] Т.е от значения massiv[S]( 0.85375) сначала вычитается 1,а затем прибавляется 1.
Вот о том что в заголовке if (или в ArrayBsearch() ) от значения massiv[S] сначала вычитается 1,а затем прибавляется 1 я не читал ни в одном учебнике по MQL.
Буду Вам признателен,если объясните мне этот момент или дадите ссылочку.
Спасибо.
У Вас в качестве параметров в функции print кроме значения элемента massiv[S] фигурируют еще massiv[S-1] и massiv[S+1] Т.е от значения massiv[S]( 0.85375) сначала вычитается 1,а затем прибавляется 1.
Вот о том что в заголовке if (или в ArrayBsearch() ) от значения massiv[S] сначала вычитается 1,а затем прибавляется 1 я не читал ни в одном учебнике по MQL.
Буду Вам признателен,если объясните мне этот момент или дадите ссылочку.
Спасибо.
Принт в этой ссылке.
http://clip2net.com/s/4MRjJe
Обратил внимание на то что
- значение massiv[0](вероятно [S]) - это первое значение с которого начинается массив
- значение massiv [1](Вероятно [S+1] ) - это второе значение массива,т.е. следует за значением с которого начинается массив
-эти значения повторяются при каждом срабатывании PRINT
=============================================
- в 2000 году значение цены было еще 4 знаками после точ
- в тестере на графике - 5 знаков
-в тестере в результатах - 5 знаков
-в тестере в журнале в принте- 4 знака
А у меня в массиве - 5 знаков.
ВОПРОС - Какое количество знаков читает программа?
Принт в этой ссылке.
https://www.mql5.com/go?link=http://clip2net.com/s/4MRjJe
Вы ничего там не увидели???
Я вижу, что функция 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.
P.P.S. Только что обратил внимание на очевидную синтакситескую ошибку - эту строчку нужно вынести за пределы (перед) функции start():
#include <MASSIV.mqh>
Обратил внимание на то что
-в тестере в журнале в принте- 4 знака
Читайте документацию https://docs.mql4.com/ru/common/print
Массивы нельзя передать в функцию Print(). Массивы должны быть напечатаны поэлементно.
Данные типа double выводятся с 4 десятичными цифрами после точки. Чтобы получить большую точность, следует использовать функцию DoubleToStr().
Вы ничего там не увидели???
Я вижу, что функция ArrayBsearch() ВЕЗДЕ возвращает 0 (как индекс элемента). В 0-ой ячейке Вашего массива находится число 1.0408. Возвращаемся к коду:
Теперь подставляем в это условие полученные значения переменных (на каритинке Bid находится в пределах 0.8-0.9, возьмём максимум этого диапазона - 0.9): if (0.9000 - 1.0408 <= 0) OrderSend(). Условие выполняется ПРАВИЛЬНО!!! Ищите ошибки в заполнении своего массива. Предположительно Вы не обратили внимание на этот пункт работы функции ArrayBsearch():
Замечание: двоичный поиск обрабатывает только сортированные массивы. Для сортировки числового массива используется функция ArraySort().