Ваши вопросы по языку MQL4

11bish

Активный участник
Ну хоть и не совсем
Хотел быстренько оформить сеты, но вдруг понял, что не совсем готов к этому: проверки доскональной не мог же сделать.
Поэтому скажу только о наработках на сегодняшний день:
- торговля с 4мск до 12, потом, как правило, часто сливал;
- пары йеновые и долларовые (луни и франк не брал) + серебро, на золоте льет;
- тф 1м.

Недельку-другую поезжу, скину то, что получится.

Пока писал сов еще закрыл

2020-07-30_153058.jpg

Алексей, еще раз сердечно благодарю за быструю работу, крепко жму руку.

С уважением
Игорь

------------------------------------------
Прошло 6мин, добавлю

2020-07-30_153549.jpg
 
Последнее редактирование:

AlexeyVik

Программист mql4 mql5
Я допустил ошибку в коде по невнимательности.
Строка 151 stTime < stTime

Код:
Expand Collapse Copy
  bool isInTime = stTime < stTime ? (chTime >= stTime && chTime < enTime) :
                  (chTime  >= stTime || chTime < enTime);
Должна быть такая stTime < enTime
Код:
Expand Collapse Copy
  bool isInTime = stTime < enTime ? (chTime >= stTime && chTime < enTime) :
                  (chTime  >= stTime || chTime < enTime);
 

Ugar

Гуру форума
Спасибо что помогаете сейчас дам весь расклад!!!
Платформа MT4. Условие такое if ( iCustom( NULL, 0, "Test", 1, 1) != EMPTY_VALUE && iCustom( NULL, 0, "Test", 1, 1) != 0 ) тогда значение в буфере (цена) появилось!
Для новичка пойдёт.
Условие срабатывает когда в буфере появляется цена, но стрелка в этот момент может не появиться или в буфере появляется цена и стрелка появляется!!! Так вот проблема как программно мне понять что в буфер не пустой и стрелка нарисована???
Я уже писал что если в буфере непустое значение, значит и стрелка нарисована. А где она нарисована можно узнать по значению в буфере.
Так и узнать
if ( iCustom( NULL, 0, "Test", 1, 1) != EMPTY_VALUE && iCustom( NULL, 0, "Test", 1, 1) != 0 )
Но это будет работать только если пустое значение EMPTY_VALUE или 0.
Узнать непустое значение конкретного индикатора можно так
Comment( iCustom( NULL, 0, "Test", 1, 1));
Посмотреть что пишет коммент когда нет стрелки.
 

forexOrx

Новичок форума
Друзья подскажите пожалуйста, как мне округлить цену, приведя к нулю полседние два или три знака после точки.
К примеру цена 1.12345 как мне указать боту цену 1.12000

спасибо.
 

AlexeNP

Гуру форума
Друзья подскажите пожалуйста, как мне округлить цену, приведя к нулю полседние два или три знака после точки.
К примеру цена 1.12345 как мне указать боту цену 1.12000

спасибо.
спасибо на хлеб не намажешь)
1) нормализация с нужным количеством знаков (но это может и не подходить - пример
NormalizeDouble(1.12345, 2) = 1.12000
NormalizeDouble(1.12645, 2) = 1.13000
2) преобразуем цену сначала в string, потом по новой собираем в double
3) делим цену на Point(), отбрасываем лишнее, снова умножаем на Point()
 

AlexeyVik

Программист mql4 mql5
Друзья подскажите пожалуйста, как мне округлить цену, приведя к нулю полседние два или три знака после точки.
К примеру цена 1.12345 как мне указать боту цену 1.12000

спасибо.
Вот два самых простых решения
Код:
Expand Collapse Copy
  double  a = 1.12345;
//---
  double  b = fmod(a, 0.01);
  double  c = a-b;
//---
  int x = int(a*100.0);
  double  y = x/100.0;
Записать конечно можно в одну строку………

Кроме того второй вариант может округлить с указанной точностью.
Код:
Expand Collapse Copy
  double  a = 1.12545;
  double  z = round(a/0.05)*0.05;
// Результат 1.15
Код:
Expand Collapse Copy
  double  a = 1.12345;
  double  z = round(a/0.05)*0.05;
// Результат 1.1
 
Последнее редактирование:

snakesoft

Интересующийся
Для новичка пойдёт.

Я уже писал что если в буфере непустое значение, значит и стрелка нарисована. А где она нарисована можно узнать по значению в буфере.
Так и узнать
if ( iCustom( NULL, 0, "Test", 1, 1) != EMPTY_VALUE && iCustom( NULL, 0, "Test", 1, 1) != 0 )
Но это будет работать только если пустое значение EMPTY_VALUE или 0.
Узнать непустое значение конкретного индикатора можно так
Comment( iCustom( NULL, 0, "Test", 1, 1));
Посмотреть что пишет коммент когда нет стрелки.

Я так и делаю как Вы говорите! И Comment( iCustom( NULL, 0, "Test", 1, 1)); использую! Соответственно когда в буфере пусто, то там EMPTY_VALUE, а когда не пусто то там цена на которой рисуется стрелка. Я наверно неправильно выражаюсь!!! Смотрите ситуация следующая!!! Индикатор работает, наступает момент, появляется цветная стрелка, в этот момент в буфере появляется цена на которой рисуется стрелка! В этом случае мне все понятно! Но бывают случаи когда в буфере появляется цена но стрелки нет! Цена не выходит за границы экрана, цена на том же месте где должна была быть стрелка, но ее нет! Вот как мне распознать этот случай если в буфере цена есть, то есть буфер не EMPTY_VALUE и не 0 и вроде бы должна быть и стрелка но ее нет? Ну по простому появилась стрела - это сигнал на вход, нет стрелы то нет сигнала на вход! То есть в моем случае что получается, что когда срабатывает условие "if ( iCustom( NULL, 0, "Test", 1, 1) != EMPTY_VALUE && iCustom( NULL, 0, "Test", 1, 1) != 0 )" и есть на графике стрела, то это сигнал на покупку или продажу, а когда стрелка не рисуется на экране то это не сигнал!! А поскольку в буфере в это момент не EMPTY_VALUE и не 0 то у меня получается сигнал!!
 

MrGreen86

Гуру форума
Я так и делаю как Вы говорите! И Comment( iCustom( NULL, 0, "Test", 1, 1)); использую! Соответственно когда в буфере пусто, то там EMPTY_VALUE, а когда не пусто то там цена на которой рисуется стрелка. Я наверно неправильно выражаюсь!!! Смотрите ситуация следующая!!! Индикатор работает, наступает момент, появляется цветная стрелка, в этот момент в буфере появляется цена на которой рисуется стрелка! В этом случае мне все понятно! Но бывают случаи когда в буфере появляется цена но стрелки нет! Цена не выходит за границы экрана, цена на том же месте где должна была быть стрелка, но ее нет! Вот как мне распознать этот случай если в буфере цена есть, то есть буфер не EMPTY_VALUE и не 0 и вроде бы должна быть и стрелка но ее нет? Ну по простому появилась стрела - это сигнал на вход, нет стрелы то нет сигнала на вход! То есть в моем случае что получается, что когда срабатывает условие "if ( iCustom( NULL, 0, "Test", 1, 1) != EMPTY_VALUE && iCustom( NULL, 0, "Test", 1, 1) != 0 )" и есть на графике стрела, то это сигнал на покупку или продажу, а когда стрелка не рисуется на экране то это не сигнал!! А поскольку в буфере в это момент не EMPTY_VALUE и не 0 то у меня получается сигнал!!
Если есть значение, значит должна быть стрелка. нет стрелки - он дает разные значения на графике и вам через iCustom. Такое бывает, сталкивался. Проблемы в самом индикаторе, в нем ошибка.
Но для начала убедитесь что вы передаете индикатору те же самые входные параметры как и те которые у вас в нем на графике.

Прикрепите ваш код и код индикатора целиком что бы я или @Ugar вам помогли.
 

Ugar

Гуру форума
Но бывают случаи когда в буфере появляется цена но стрелки нет!
Да, бывают индикаторы, которые на графике работают не так как при вызове по iCustom. Чаще всего это перерисовываемые индикаторы. На графике они накапливают поправку для красоты сигнала или убирают стрелку из за перерисовки. При iCustom никакая поправка не копится.
Ну и как уже написал MrGreen86 надо убедиться что передаваемые параметры индикаторы совпадают с параметрами индикатора на графике.
 
Последнее редактирование:

mobidik

-----
Но бывают случаи когда в буфере появляется цена но стрелки нет! Цена не выходит за границы экрана, цена на том же месте где должна была быть стрелка, но ее нет! Вот как мне распознать этот случай если в буфере цена есть, то есть буфер не EMPTY_VALUE и не 0 и вроде бы должна быть и стрелка но ее нет?
Если это сказано именно по работе индикатора, а не о вызове индюка из советника, то Вы, скорее всего, ошиблись с буфером или сами стрелки отображаются как объекты, а тот буфер, о котором Вы пишите, участвует в формировании сигнала для стрелки. А так, индюк в студию, разберемся, что не так.
 

snakesoft

Интересующийся
Если есть значение, значит должна быть стрелка. нет стрелки - он дает разные значения на графике и вам через iCustom. Такое бывает, сталкивался. Проблемы в самом индикаторе, в нем ошибка.
Но для начала убедитесь что вы передаете индикатору те же самые входные параметры как и те которые у вас в нем на графике.

Прикрепите ваш код и код индикатора целиком что бы я или @Ugar вам помогли.
Индикатор платный, привязан с счету и IP, буферный 100%, не рисует!, *.ex4 входных параметров нет!!! При накидывании индикатора на график происходит проверка на привязку в случае запуска на другой машине индикатор выдает сообщение "Ошибка, обратитесь в поддержку!!!"
Еще раз Вам огромное спасибо!!! Очень Вам благодарен за помощь!!! Видимо не получится до конца разобраться с ним!!! А еще тогда вопрос! А можно алерты анализировать (перехватывать?)? Если да, то ведь по алертам можно сигнал хватать?
 

AlexeyVik

Программист mql4 mql5
Индикатор платный, привязан с счету и IP, буферный 100%, не рисует!, *.ex4 входных параметров нет!!! При накидывании индикатора на график происходит проверка на привязку в случае запуска на другой машине индикатор выдает сообщение "Ошибка, обратитесь в поддержку!!!"
Еще раз Вам огромное спасибо!!! Очень Вам благодарен за помощь!!! Видимо не получится до конца разобраться с ним!!! А еще тогда вопрос! А можно алерты анализировать (перехватывать?)? Если да, то ведь по алертам можно сигнал хватать?
Ну так дай сцильку на него. Посмотрим демо версию.
 

vladradon

Программист
Индикатор платный, привязан с счету и IP, буферный 100%, не рисует!
А когда в тестере с визуализацией запускаешь сова и на график визуализации закидываешь индюка с теми же параметрами, что в сове, то после остановки тестирования и появления на графике индюка, работающего из сова, его стрелки совпадают со стрелками отдельно закинутого на график индюка?
 

mobidik

-----
Подскажите каким образом? Куда-нибудь меня пошлите!!! :) Я вам уже надоел наверное!!! Где можно почитать инфу про алерты? Или пример обработки скиньте я сам разберусь!!! Спасибо!
Начну с интересного, "Куда-нибудь меня пошлите!!!" - таки да, в гугл. Там же можно и почитать. В свое время был такой же заказ, искал такую инфу, тогда ничего рабочего не нашел. Быть может Вам больше повезет. Но решил таки вопрос с перехватом алертов от индюка. Нужно воспользоваться виндовскими функциями, входящих в состав user32.dll. Алерт, по сути, то же окно виндовса, имеющие свой заголовок. Осталось отловить появление самого окна, прочитать его заголовок, мало ли, может появилось окно алерта от другого индюка, т.е., как говориться, проверить: свой - чужой. Как правило, содержание самого текста алерта на бай и селл разные, предстоит сверить содержание текста с образцом, который будет прописан в самом коде. Если сигнал наш - что-то делаем и нажимаем на кнопочку "Ок", тем самым закрываем окно алерта и ожидаем нового алерта. Вообщем, как-то так...
Но, тут вопрос: насколько Вам все это будет под силу, раз с буферной стрелкой имеете проблемы...
Кстати, хочу заметить, что порой индикатор имеет гораздо больше буферов, чем мы можем наблюдать их как в закладке "Цвета", так и в окне "Окно данных" - следует перебрать как минимум, первых 8 буферов, хотя встречал индюка и с 38 буферами, быть может ваша стрелка в "скрытом" буфере, мало ли...

PS.
Быть может, автором индюка задумано, что руководство к действию служит не появление стрелки, а сам алерт, появление которого еще проходит через фильтр..? Но, раз индюк платный и Вы его купили, то автор должен был Вас предупредить об этом.
 
Последнее редактирование:

snakesoft

Интересующийся
Я благодарю Вас за то, что помогаете!!! Я это очень ценю, так как много форумов, где сразу отсылают куда подальше типа "Иди учись"!!! Так на самом деле я и учусь!!! А подсказки экономят много времени!!! Понятно, что кто хочет тот добьется, но времени мало для того, чтобы разобраться! А теперь к делу! На счет "Насколько мне будет под силу!!" Я много индикаторов разных переделал, но этот особенный попался вот и возникают с ним трудности!!! Да, я рассматривал вариант с user32.dll, но думал что можно как то проще, видимо придется с этим разбираться! А про остальные буфера спасибо! Учту и проверю, что там хранится!!! Ребята еще раз хочу Вас поблагодарить!! Респект Вам и Уважуха тем кто не устает помогать!!! Сам такой и всегда помогаю другим кто нуждается в моей помощи!!! Спасибо ребята!
 
Последнее редактирование:

Maxut

Новичок форума
Подскажите формулу стоп-лосса,

для ордеров BUY:

SL= локальному минимуму прошлых N - дней - delta пунктов , где N задается в настройках

для ордеров SELL:

SL = локальному максимум прошлых N дней + delta пунктов, где N задается в настройках
 

AlexeNP

Гуру форума
Подскажите формулу стоп-лосса,

для ордеров BUY:

SL= локальному минимуму прошлых N - дней - delta пунктов , где N задается в настройках

для ордеров SELL:

SL = локальному максимум прошлых N дней + delta пунктов, где N задается в настройках
iLowest(NULL,PERIOD_D1,MODE_LOW,N,0) - номер бара с минимумом за N последних дней
iHighest(NULL,PERIOD_D1,MODE_HIGH,N,0) - номер бара у которого был максимум
 

Maxut

Новичок форума
iLowest(NULL,PERIOD_D1,MODE_LOW,N,0) - номер бара с минимумом за N последних дней
iHighest(NULL,PERIOD_D1,MODE_HIGH,N,0) - номер бара у которого был максимум

Я попробовал, не работает.

Может вы покажете, как это выглядело бы у вас в советнике, вместо стоп-лосса
 
Верх