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

ansol

Местный знаток

Эта фишка есть не у всех брокеров/ДЦ. Если не найдете такого пункта, то не удивляйтесь.
А еще есть фишка (тоже не у всех) - "закрыть перекрытые ордеры" - тогда рубит все ордеры по данной паре. Иногда удобно
 

eevviill

Заблокирован
Гуру программирования, вопросик один.
В коде есть такая строка

int Ma_Bid_Diff = MathAbs(iMA_Signal - Bid)/Point;

Видимо, при 5-значных котировках платформа мт4 считает величину Point пренебрежимо малой и при делении приравнивает к нулю.
И возникает ошибка "zero divide".
Как бы это исправить?
Подскажите кусочек кода.

Не int Ma_Bid_Diff
а double
 

ansol

Местный знаток
Не int Ma_Bid_Diff
а double

Разве от этого пропадет ошибка деления на ноль?
Результат деления Bid на Point всяко целым должен быть.
Я делаю
PHP:
dPoint = MarketInfo(Symbol(), MODE_POINT)
И потом спокойно делю на эту величину, где необходимо, у меня в проге это несколько раз делается.
А вот конкретно с переменной Point такой косяк обсуждался на форуме mql4.com, только я не помню, чем там дело кончилось, надо искать.
 

eevviill

Заблокирован
Разве от этого пропадет ошибка деления на ноль?
Результат деления Bid на Point всяко целым должен быть.
Я делаю
PHP:
dPoint = MarketInfo(Symbol(), MODE_POINT)
И потом спокойно делю на эту величину, где необходимо, у меня в проге это несколько раз делается.
А вот конкретно с переменной Point такой косяк обсуждался на форуме mql4.com, только я не помню, чем там дело кончилось, надо искать.
А что Поинт уже 0 выдаёт?

Я думаю что в его коде деление на 0 не там. Указал на ошибку в показаном куске кода.
 

ansol

Местный знаток
А что Поинт уже 0 выдаёт?

Я думаю что в его коде деление на 0 не там. Указал на ошибку в показаном куске кода.

Я не знаю, что выдает Point, но при делении на него такая ошибка возникает. А в варианте как у меня не возникает. И главное, если переменная должна быть целой, зачем ее объявлять double? Чтобы памяти под нее больше выделилось?
В смысле, неправильно это, даже если и поможет. Косяк!
 

eevviill

Заблокирован
Я не знаю, что выдает Point, но при делении на него такая ошибка возникает. А в варианте как у меня не возникает. И главное, если переменная должна быть целой, зачем ее объявлять double? Чтобы памяти под нее больше выделилось?
В смысле, неправильно это, даже если и поможет. Косяк!
А ну да.
Но сомневаюсь что Point ноль может выдать.
Или у тебя такое случалось?

Самое непонятное что было у меня. Это когда в советнике(не мной написаный) меджик был double. Нигде в коде переприсвоения данных не было. И -239234987 выдавал.
 

ansol

Местный знаток
А ну да.
Но сомневаюсь что Point ноль может выдать.
Или у тебя такое случалось?
Да нет же! Я просто читал на форуме mql4 (знаешь такой?), что есть проблема с делением на Point, там и пример чувак аналогичный приводил.
А у меня сделано как я написал выше и никаких косяков.
Вот и всё.
 

eevviill

Заблокирован
Да нет же! Я просто читал на форуме mql4 (знаешь такой?), что есть проблема с делением на Point, там и пример чувак аналогичный приводил.
А у меня сделано как я написал выше и никаких косяков.
Вот и всё.
Дай ссылку темы.
 

volodymyr67

Гуру форума
подскажите пожалоста как мне правильно вписать сигналы индикатора есди вот такая ситуацыя
SetIndexBuffer(1, hlobda_224);
SetIndexBuffer(2, hlobda_228);
SetIndexBuffer(3, hlobda_232);
SetIndexStyle(0, DRAW_ARROW);
SetIndexStyle(1, DRAW_ARROW);
SetIndexStyle(2, DRAW_ARROW);
SetIndexStyle(3, DRAW_ARROW);
SetIndexArrow(0, 234);
SetIndexArrow(1, 233);
SetIndexArrow(2, 234);
SetIndexArrow(3, 233);

SetIndexEmptyValue(0, 0.0);
SetIndexEmptyValue(1, 0.0);
SetIndexEmptyValue(2, 0.0);
SetIndexEmptyValue(3, 0.0);

вто к примеру так будит правильно или нет !?

double UpArr(int bar){ return( iCustom(NULL, timeframe, "RSI_M", RsiPrice1, Interpolate, 0, 2, bar ) ); }
double DnArr(int bar){ return( iCustom(NULL, timeframe, "RSI_M", RsiPrice1, Interpolate, 1, 3, bar ) ); }
 

eevviill

Заблокирован
подскажите пожалоста как мне правильно вписать сигналы индикатора есди вот такая ситуацыя
SetIndexBuffer(1, hlobda_224);
SetIndexBuffer(2, hlobda_228);
SetIndexBuffer(3, hlobda_232);
SetIndexStyle(0, DRAW_ARROW);
SetIndexStyle(1, DRAW_ARROW);
SetIndexStyle(2, DRAW_ARROW);
SetIndexStyle(3, DRAW_ARROW);
SetIndexArrow(0, 234);
SetIndexArrow(1, 233);
SetIndexArrow(2, 234);
SetIndexArrow(3, 233);

SetIndexEmptyValue(0, 0.0);
SetIndexEmptyValue(1, 0.0);
SetIndexEmptyValue(2, 0.0);
SetIndexEmptyValue(3, 0.0);

вто к примеру так будит правильно или нет !?

double UpArr(int bar){ return( iCustom(NULL, timeframe, "RSI_M", RsiPrice1, Interpolate, 0, 2, bar ) ); }
double DnArr(int bar){ return( iCustom(NULL, timeframe, "RSI_M", RsiPrice1, Interpolate, 1, 3, bar ) ); }
Точно не правильно. Скинь индикатор и скрин какие тебе нужно стрелки.
там где 0 И 2 надо 0 ИЛИ 2
в другой строке аналогично
 
Последнее редактирование:

_SERG_

Активный участник
НАРОД!
Давно обхожу тему углов в MQL.
Причина банальная, не понимаю как это :

Пример:
double pi=3.1415926535;
double x, y;
x=pi/2;
y=MathSin(x);
Print("MathSin(",x,") = ",y);
y=MathCos(x);
Print("MathCos(",x,") = ",y);
// Вывод: MathSin(1.5708)=1
// MathCos(1.5708)=0

Что такое тригонометрия, знаю.

Смущает, "double x, y;" Оба операнда даблы, а координаты графика цена/время?

Какие мнения?
 
Последнее редактирование:

Ugar

Гуру форума
НАРОД!
Давно обхожу тему углов в MQL.
Причина банальная, не понимаю как это :

Пример:
double pi=3.1415926535;
double x, y;
x=pi/2;
y=MathSin(x);
Print("MathSin(",x,") = ",y);
y=MathCos(x);
Print("MathCos(",x,") = ",y);
// Вывод: MathSin(1.5708)=1
// MathCos(1.5708)=0

Что такое тригонометрия, знаю.

Смущает, "double x, y;" Оба операнда даблы, а координаты графика цена/время?

Какие мнения?
Именно по этому углы на графике весьма относительны. Есть в инструментарии трендовая линия по углу. Она хорошо демонстрирует что с графиком она связана только одной точкой.
Можно построить линию с углом например 45 градусов. Меняя маштаб или период графика. График пересекает линию в разных точках. Только точка привязки линии неизменна.
 

ansol

Местный знаток
Именно по этому углы на графике весьма относительны. Есть в инструментарии трендовая линия по углу. Она хорошо демонстрирует что с графиком она связана только одной точкой.
Можно построить линию с углом например 45 градусов. Меняя маштаб или период графика. График пересекает линию в разных точках. Только точка привязки линии неизменна.

Он вроде не про это спросил, а про то, что время - целая координата, а задаются две double ;)
 

eevviill

Заблокирован
_http://forum.mql4.com/ru/25966
Спасибо, но автор у автора темы проблема с
PHP:
double marginreq=MarketInfo( Symbol(), MODE_MARGINREQUIRED);
double vol=(bal*0.1)/marginreq;

У другого в теме как бы с Point, но весь его код не видно. Вдруг у него где то в коде есть на 0 деление?
Если нету, значит терминал в Альпари очень "хороший."
 
Последнее редактирование модератором:

ansol

Местный знаток
Спасибо, но автор у автора темы проблема с
PHP:
double marginreq=MarketInfo( Symbol(), MODE_MARGINREQUIRED);
double vol=(bal*0.1)/marginreq;

У другого в теме как бы с Point, но весь его код не видно. Вдруг у него где то в коде есть на 0 деление?
Если нету, значит терминал в Альпари очень "хороший."

За что купил... :)
Попробуй поделить какой-нибудь ненормализванный double на Point в пятизнаке. А нормализуешь - все ОК, типа.
 

eevviill

Заблокирован
За что купил... :)
Попробуй поделить какой-нибудь ненормализванный double на Point в пятизнаке. А нормализуешь - все ОК, типа.
PHP:
int poi=MarketInfo(Symbol(),MODE_MARGINREQUIRED)/Point;
Alert(poi);

poi=Bid/Point;
Alert(poi);

poi=(Bid-234*Point)/Point;
Alert(poi);
zero divide нету.
 
Последнее редактирование:

ansol

Местный знаток
PHP:
int poi=MarketInfo(Symbol(),MODE_MARGINREQUIRED)/Point;
Alert(poi);

poi=Bid/Point;
Alert(poi);

poi=(Bid-234*Point)/Point;
Alert(poi);
zero divide нету.
Да ХЗ я!
Ну могу занаяться измышлениями, как тут один пользователь выше - он вам надо?
У тебя в примере все переменные нормализованные используются. Напиши не 234, а 3.1415926... подлиннее че-нибудь, а лучше результат деления какой-нибудь мутный, где реально 15 знаков после запятой будут.

В приципе, баги искать, наверно, интересное занятие? :)
 

ansol

Местный знаток
Вот, кстати, интересный вопрос, хотя и не имеющий (вроде бы особого значения для программирования).
Я исправил сову в одном терминале, скачанном с метаквотов, получил исходник длиной 31733 байт, откомпилировал, получил ех4 длиной 20442 байт.
Копирую исходник и компилирую там (без модификаций и т.п.) - имею ех4 диной 20690
Это чего они там прибавляют, защиту от декомпила что-ли? :(
 

eevviill

Заблокирован
Вот, кстати, интересный вопрос, хотя и не имеющий (вроде бы особого значения для программирования).
Я исправил сову в одном терминале, скачанном с метаквотов, получил исходник длиной 31733 байт, откомпилировал, получил ех4 длиной 20442 байт.
Копирую исходник и компилирую там (без модификаций и т.п.) - имею ех4 диной 20690
Это чего они там прибавляют, защиту от декомпила что-ли? :(
Может через то что разными версиями(билдами) копилятора скопилировано?
 
Верх