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

 
Подскажите пожалуйста, возможно при тестировании в тестере метатрейдер4 открытие позиций не советником а вручную? Чтобы не рассчитывать пункты на калькуляторе а нажал кнопку - появилось окно открытия ордера, забил данные и жмешь F12 а тестер сам считает как и при открытии советником. Возможно есть какая-то готовая программка для этого, поиском не нашел.
 
всем доброго дня.  ребята тут вопрос появился, точнее несколько, помогите. 
1: вот если у меня есть уровень, и если цена ровна этому уровню то открываем ордер. Вопрос может ли цена проскочить этот уровень, как то быстро пролететь и не быть равной уровню который у меня стоит или если ГЕП то будет открыт ордер там где надо, тоисть на уровне?
2: Журнал выкидывает ошибки, хотелось бы знать что они значат подскажите пожалуйста.  [B]1-Signal-failed parse signals,[/B] [B]2-DataCenter connecting failed [2] и [6][/B] 3-(точно не помню но там при модификаций ордера говорит что полный инвалид)?   Подскажите пожалуйста что делать в тех или других случаях, ещё раз огромное спасибо!
 
TarasBY:

Чтобы понять что происходит, нужно вывести расчёты на принт:

и проанализируйте полученные результаты. 

Я ПОНЯЛ ,ЧТО Я ЧТО-ТО НЕДОПОНЯЛ.

Как я себе представлял исполнение условия в заголовке 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.

Буду Вам признателен,если объясните мне этот момент или дадите ссылочку.

Спасибо.


 
solnce600:

У Вас в качестве параметров в функции  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 знаков.

ВОПРОС - Какое количество знаков читает программа?

 
solnce600:

Принт в этой ссылке.

https://www.mql5.com/go?link=http://clip2net.com/s/4MRjJe

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

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

if( (NormalizeDouble (Bid-massiv[S],Digits) <=0))

Теперь подставляем в это условие полученные значения переменных (на каритинке 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> 
 
solnce600:

Обратил внимание на то что

-в тестере в журнале в принте- 4 знака

Читайте документацию https://docs.mql4.com/ru/common/print

void Print( ...)
Печатает некоторое сообщение в журнал экспертов. Параметры могут иметь любой тип. Количество параметров не может превышать 64.

Массивы нельзя передать в функцию Print(). Массивы должны быть напечатаны поэлементно.

Данные типа double выводятся с 4 десятичными цифрами после точки. Чтобы получить большую точность, следует использовать функцию DoubleToStr().
 
TarasBY:

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

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

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

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

Не совсем понимаю,что значит двоичный поиск. Это поиск в двухмерном массиве? Но у меня одномерный.
 
как настроить  в мт 4 период фибоначи  200 144 89 55 34
Причина обращения: