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

gravity

Местный знаток
Товарищи программисты, что тут за косяк, не подскажете? Индикатор на золоте не корректно отображается.
 

AlexeNP

Гуру форума
Товарищи программисты, что тут за косяк, не подскажете? Индикатор на золоте не корректно отображается.
честно говоря, не знаю в чем стратегический замысел всех этих расчетов, но... с точки зрения математики - в них серьезный косяк (очень серьезный... недопустимый... ужасный)
с точки зрения чистого разума под знаком синуса может стоять только безразмерное значение, смотрим что у нас:

MathSin(koef * (High - Low))

koef - норм, безразмерный
а вот High - Low - das ist falsch потому что результат будет в пипсах...
возможно, следует несколько исправить формулу?
например:
buf_1 = Close + MathSin(koef_small * (Close - Low)/(High - Low));
 

gravity

Местный знаток
честно говоря, не знаю в чем стратегический замысел всех этих расчетов, но... с точки зрения математики - в них серьезный косяк (очень серьезный... недопустимый... ужасный)
с точки зрения чистого разума под знаком синуса может стоять только безразмерное значение, смотрим что у нас:

MathSin(koef * (High - Low))

koef - норм, безразмерный
а вот High - Low - das ist falsch потому что результат будет в пипсах...
возможно, следует несколько исправить формулу?
например:
buf_1 = Close + MathSin(koef_small * (Close - Low)/(High - Low));

Screenshot_1.jpg
Сделал так. С такой формулой ничего не отображается ни на каком инструменте.
А может как-то можно этот (High - Low) перевести в нужный формат?
 

AlexeNP

Гуру форума
Посмотреть вложение 408670
Сделал так. С такой формулой ничего не отображается ни на каком инструменте.
А может как-то можно этот (High - Low) перевести в нужный формат?
деление на 0 надо проверять)
а какой формат нужный? я не знаю, какой стратегический замысел лежит в использовании тригонометрических функций... сдается мне, что он просто подгонял коэффициенты под нужный канал...
 

Вложения

  • KAY_Envelops (1).mq4
    8 КБ · Просмотры: 13

gravity

Местный знаток
деление на 0 надо проверять)
а какой формат нужный? я не знаю, какой стратегический замысел лежит в использовании тригонометрических функций... сдается мне, что он просто подгонял коэффициенты под нужный канал...
Спасибо за отклик.
Все равно ерунда какая-то получается. На фунте сейчас так показывает.

Screenshot_2.jpg

А на золоте так же остался, как и был. Буду думать дальше.
 

Leva20

Новичок форума
Элементарная функция Sleep (10000);, а не работает, задержки на 10 секунд нет.
Может подскажете в чем причина?

2020-11-24_194349.png
 

AlexeNP

Гуру форума
Элементарная функция Sleep (10000);, а не работает, задержки на 10 секунд нет.
Может подскажете в чем причина?

Посмотреть вложение 408695
читая справку ты узнаешь, что в индикаторах никакие задержки НЕ работают.... и даже написано почему так сделано

Sleep​

Функция задерживает выполнение текущего эксперта или скрипта на определенный интервал.

void Sleep(
int milliseconds // интервал
);
Параметры

milliseconds

[in] Интервал задержки в миллисекундах.

Возвращаемое значение

Нет возвращаемого значения.

Примечание

Функцию Sleep() нельзя вызывать из пользовательских индикаторов, так как индикаторы выполняются в интерфейсном потоке и не должны его тормозить. В функцию встроена проверка состояния флага остановки эксперта каждую 0.1 секунды.
 

gravity

Местный знаток
честно говоря, не знаю в чем стратегический замысел всех этих расчетов, но... с точки зрения математики - в них серьезный косяк (очень серьезный... недопустимый... ужасный)
с точки зрения чистого разума под знаком синуса может стоять только безразмерное значение, смотрим что у нас:

MathSin(koef * (High - Low))

koef - норм, безразмерный
а вот High - Low - das ist falsch потому что результат будет в пипсах...
возможно, следует несколько исправить формулу?
например:
buf_1 = Close + MathSin(koef_small * (Close - Low)/(High - Low));
vladradon подсказал. Оказывается этот синус вообще на показания индикатора не влияет. Просто закомментил его. Сейчас на всех парах работает.
 

Defort

Новичок форума
Необходима проверка цвета и размера столбца стандартного индикатора Market Facilitation Index. Открыл справку, а там выводится только одно значение:
double iBWMFI(
string symbol, // имя символа
int timeframe, // таймфрейм
int shift // сдвиг
);
Подскажите, плиз, каким образом можно вывести цвет и размер?
 

Defort

Новичок форума
Необходима проверка цвета и размера столбца стандартного индикатора Market Facilitation Index. Открыл справку, а там выводится только одно значение:
double iBWMFI(
string symbol, // имя символа
int timeframe, // таймфрейм
int shift // сдвиг
);
Подскажите, плиз, каким образом можно вывести цвет и размер?
Точнее размер выведется, а как определить цвет
 

AlexeNP

Гуру форума
Необходима проверка цвета и размера столбца стандартного индикатора Market Facilitation Index. Открыл справку, а там выводится только одно значение:
double iBWMFI(
string symbol, // имя символа
int timeframe, // таймфрейм
int shift // сдвиг
);
Подскажите, плиз, каким образом можно вывести цвет и размер?
цвет-размер-стиль можно прописать примерно так

#property indicator_type1 DRAW_LINE
#property indicator_style1 STYLE_SOLID
#property indicator_width1 1
#property indicator_color1 clrBlue
 

AlexeyVik

Программист mql4 mql5
Точнее размер выведется, а как определить цвет
Текущее значение выше значения предыдущего бара, один цвет. Ниже предыдущего — другой цвет. Равно как значение любого бара выше\ниже предыдущего.
 

AlexeNP

Гуру форума
Цвета в индикаторе уже есть, даже буфера под каждый цвет, но как их вывести?
ну, примерно так ... (предположим, что есть два интервала с разными цветами)
value -значение которое мы хотим вывести

if(value>1)
{
bufer1=value;
bufer2=EMPTY_VALUE;//нет ничего в буфере
}
if(value>2)
{
bufer1=EMPTY_VALUE;
bufer2=value;
}
 

Defort

Новичок форума
ну, примерно так ... (предположим, что есть два интервала с разными цветами)
value -значение которое мы хотим вывести

if(value>1)
{
bufer1=value;
bufer2=EMPTY_VALUE;//нет ничего в буфере
}
if(value>2)
{
bufer1=EMPTY_VALUE;
bufer2=value;
}
Понял, нужно сравнивать значение индикатора и объём на нужном баре и на баре предшествующем ему, типа так:
double BWMFI(shift)
{
return(iBWMFI(NULL,0,shift));
}
double VOLUME(shift)
{
return(iVolume(NULL,0,shift));
}
bool LIME(shift)
{
if(BWMFI(shift)>BWMFI(shift+1))
return(VOLUME(shift)>VOLUME(shift+1));
return(false);
}
bool BLUE(shift)
{
if(BWMFI(shift)>BWMFI(shift+1))
return(VOLUME(shift)<VOLUME(shift+1));
return(false);
}
bool BROWN(shift)
{
if(BWMFI(shift)<BWMFI(shift+1))
return(VOLUME(shift)<VOLUME(shift+1));
return(false);
}
bool PINK(shift)
{
if(BWMFI(shift)<BWMFI(shift+1))
return(VOLUME(shift)>VOLUME(shift+1));
return(false);
}
Всем спасибо!
 

gravity

Местный знаток
Всем привет, подскажите пожалуйста, есть ли способ сделать кнопку на графике, чтобы она по щелчку скрывала-показывала подвальный индикатор? Как если бы мы убрали-поставили галочку в свойствах индикатора во вкладке "отображение". Желательно пример. Спасибо! 🤝
 

Вложения

  • Screenshot_1.jpg
    Screenshot_1.jpg
    14,7 КБ · Просмотры: 5
Последнее редактирование:

gravity

Местный знаток
Всем привет, подскажите пожалуйста, есть ли способ сделать кнопку на графике, чтобы она по щелчку скрывала-показывала подвальный индикатор? Как если бы мы убрали-поставили галочку в свойствах индикатора во вкладке "отображение". Желательно пример. Спасибо!🤝
Отвечу сам себе) нашел. Но дополнительный пример не будет лишним.



Понял что индикатор это не объект) но оставлю тут.
 

Вложения

  • Screenshot_1.jpg
    Screenshot_1.jpg
    113,3 КБ · Просмотры: 18
Последнее редактирование:

AlexeNP

Гуру форума
Отвечу сам себе) нашел. Но дополнительный пример бы не будет лишним.
разговоры с самим собой - опасный признак :devilish:
удалить индикатор можно с помощью ChartIndicatorDelete, добавить - ChartIndicatorAdd.
но в 4-ке последняя функция отсутствует, поэтому добавление можно организовать с помощью dll
 

AlexeyVik

Программист mql4 mql5
разговоры с самим собой - опасный признак :devilish:
удалить индикатор можно с помощью ChartIndicatorDelete, добавить - ChartIndicatorAdd.
но в 4-ке последняя функция отсутствует, поэтому добавление можно организовать с помощью dll
Надо смотреть что ещё на графике присутствует. Может лучше через шаблон чем с помощью dll
 

AlexeyVik

Программист mql4 mql5
Отвечу сам себе) нашел. Но дополнительный пример не будет лишним.



Понял что индикатор это не объект) но оставлю тут.
Если-бы это работало вам давно уже дали-бы совет.
К сожалению есть функция только прочесть видимость подокна. А задать нету.
 
Верх