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

eevviill

Заблокирован
Даа. А когда то ансоль был добрым, культурным человеком.
Вот до чего приводит програмирование
 
Последнее редактирование модератором:

hoz

Активный участник
У меня был очень неприятный случай с альпари. Счет был типа NDD с перерасчетом свопов overnight. Вообщем, ночью ордер закрывали и открывали снова по другой цене, но с учетом этого свопа. В результате, вместо нормальной 5-значной цены получалась 6-значная, т.е. за 1 день своп в пунктах был дробным по некоторым парам.
И перестал работать трейлингстоп :nda: А все просто - трейлингстоп прибавлял к цене Х пунктов и отправлял OrderModify с полученным новым стоплосс'ом, который без нормализации оставался 6-значным.
Может, это имелось в виду?
Во всех остальных случаях цена приходит психически нормальная :D

Чё та странно. Почему не нормализовали сразу цены? Какая Вам разница какой разрядности цена пришла ?
 

ansol

Местный знаток
Чё та странно. Почему не нормализовали сразу цены? Какая Вам разница какой разрядности цена пришла ?
1. Это зачем? Я ведь точно знаю, что я не покупал/продавал по 6-значной цене. :) Чей-то я ее нормализовать буду?
2. Мне - никакой! Это ДЦ мне обещает 5-знак, я его за язык не тянул! :)

---------
Вопрос из другой оперы:
Как получить имя переменной путем манипуляции со строками?

Т.е. есть префикс типа "yozhik" и есть цикл от 1 до 10 (к примеру)
Надо последовательно обработать переменные yozhik1, yozhik2,...,yozhik10
(они тоже уже есть со своими значениями)
:)
 

qqmber

Почетный гражданин
Как получить имя переменной путем манипуляции со строками?

Т.е. есть префикс типа "yozhik" и есть цикл от 1 до 10 (к примеру)
Надо последовательно обработать переменные yozhik1, yozhik2,...,yozhik10
(они тоже уже есть со своими значениями)
:)

Никак.
Переписать код с использованием массива yozhik[].
 

qqmber

Почетный гражданин
Это очень печально, потому что ёжики - внешние переменные и написать
extern double ёжик[1] = 0.1
extern double ёжик[2] = 0.15
и т.д. не получится

Зато получится в init() скопировать их один раз в массив и дальше с массивом работать.
 

ansol

Местный знаток
Зато получится в init() скопировать их один раз в массив и дальше с массивом работать.

Счас сделано так:
PHP:
Expand Collapse Copy
switch (flag) {
            case 1:
               SymbolRow = Symbols1;
               break;
            case 2:
               SymbolRow = Symbols2;
               break;
            case 3:
               SymbolRow = Symbols3;
               break;
            case 4:
               SymbolRow = Symbols4;
               break;
            case 5:
               SymbolRow = Symbols5;
               break;
            case 6:
               SymbolRow = Symbols6;
               break;
            case 7:
               SymbolRow = Symbols7;
         }
Довольно коряво выглядит :facepalm: но работает
Это из серии "настоящие программисты не используют goto". оО
 

qqmber

Почетный гражданин
Нормально.
Хотя, если у тебя там строки с названиями пар, то можно задавать одной строкой через запятую и потом разобрать в массив строк.
 

ansol

Местный знаток
Нормально.
Хотя, если у тебя там строки с названиями пар, то можно задавать одной строкой через запятую и потом разобрать в массив строк.

НЕ нормально, конечно. Впервые пришлось такую кривизну в коде терпеть и не знаю как избавиться :nda:
Дальше обрабатывается переменная SymbolRow, которая играет роль буферной/временной переменной в цикле.
Строки в MQL4 ограничены по длине, там много через запятую не напишешь.
Это раз.
А два - "дырка" с выбором параметров не делает RESIZE, т.е. список в дырку не влазит, гад такой, и контроль за списком неудобный. К примеру, хочется глянуть, что там такого поназадавал по быстрому, а список "уезжает" за пределы окна вправо и сразу не видно все данные.
 

qqmber

Почетный гражданин
Я тоже с такой фигней сталкивался.
В итоге пришел к тому что сделал отдельный файл с массивом строк и считывал оттуда.
 

hoz

Активный участник
А причём тут ДЦ? Это не особенность ДЦ, а особенность работы компьютера с дробными числами. Только в разных языках разная погрешность. Значит лажа может случиться в любом ДЦ. И как показывает практика, случается не редко.

Кстати, да. Это не зависит ни от ДЦ ни от языка. Я чутка начал было недавно изучать С++, там такая же ситуация, и, даже больше...:facepalm: Т.к. типов числе гораздо больше. Так что проще научится думать, ежели всё менять постоянно.
А, по сути,чего загонять то? Нормализации нужно, в основном, в торговых функция. Вот в них и нормализуйте значения... Ну или не в них, а перед ними, которые в них поступают. Я думаю так.
 

hoz

Активный участник
Ugar
Есть два числа с 5 знаками после запятой. Их сложили. С чего ради у терминала получится 6 знаков? А вот если тебе вместо 5 знаков в цене подсунул ДЦ 6 злонамеренно, как я выше описал, а потом свою же цену и не принимает, то это виноват только ДЦ!
В С++ есть правило приведения типов. Это значит что значение операции приводится в более точному типу. Если например, в выражении принимает участие int и double, то на выходе будет double.
Тут видать такая же хрень. Если в операции есть 6 и 10-знаковые цены, результат будет в 10-знаковом.
P.S. Это мои мысли в слух.
 

ansol

Местный знаток
Кстати, да. Это не зависит ни от ДЦ ни от языка. Я чутка начал было недавно изучать С++, там такая же ситуация, и, даже больше...:facepalm: Т.к. типов числе гораздо больше. Так что проще научится думать, ежели всё менять постоянно.
А, по сути,чего загонять то? Нормализации нужно, в основном, в торговых функция. Вот в них и нормализуйте значения... Ну или не в них, а перед ними, которые в них поступают. Я думаю так.

Не, ну хорош отвлекаться от темы вопроса! Было же про стопы и тейки и про ценовые параметры!
Итак, есть цена 5 значная - без никаких "но"! ДЦ сказал, что 5 знак, так выполняй свои "сказал", нет?
Отлично!
Есть Point по паре = 0.00001 для этого пятизнака - это параметр, он не может быть другим!
Складываем Point и цену, например, Bid
Ну? С каких хренов-то там знаков больше чем 5 будет? Нет уж, извините, это не я дурак, это тот дурак, который считает иначе!
На этом вся глюкавость винды держится - никто ни за что не отвечает, а в результате два числа складываются по каким-то придуманным законам!

Не, приходится бороться, предотвращать и т.д. Но это - тупость программистов, это они должны не допускать подобного маразма на низком уровне, а не я на MQL4

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

hoz

Активный участник
1. Это зачем? Я ведь точно знаю, что я не покупал/продавал по 6-значной цене. :) Чей-то я ее нормализовать буду?


А потому что это к ДЦ не имеет отношения:D Какие пришли, такие и послали.. (Разумеется с учётом погрешности.) По ходу, им не резонно обрабатывать цены, т.к. это дополнительные расходы ресурсов, а это время.. А время упирается в расходняки.. а это дополнительное оборудование.. А это деньги.. Круговорот..:laugh:

2. Мне - никакой! Это ДЦ мне обещает 5-знак, я его за язык не тянул! :)
:)


Неа. ДЦ обещает точность не ниже 5-знака. 6-знаков, это повышенная точность... Так что радуйтесь
 

ansol

Местный знаток
А потому что это к ДЦ не имеет отношения:D Какие пришли, такие и послали.. (Разумеется с учётом погрешности.) По ходу, им не резонно обрабатывать цены, т.к. это дополнительные расходы ресурсов, а это время.. А время упирается в расходняки.. а это дополнительное оборудование.. А это деньги.. Круговорот..:laugh:




Неа. ДЦ обещает точность не ниже 5-знака. 6-знаков, это повышенная точность... Так что радуйтесь

В принципе, ты прав. С другой стороны, от финансовой организации хочется получить безусловную точность. Поэтому, все решает техподдержка.
В альпари меня послали на три буквы, типа, своп дробный тебе же лучше. Они, типа, мне полпункта съэкономили, ога :D
Для советника это очень плохо, для анализа еще хуже, ибо как понять. что открыл ордер по цене. по которой сов никак не мог открыть ордер - нет сигналов на такую цену.
В результате получается муть примерно аналогичная открытию встречных в МТ5 - кто куда зачем открыл - непонятно, но ты в минусе! :D
 

hoz

Активный участник
Не, ну хорош отвлекаться от темы вопроса! Было же про стопы и тейки и про ценовые параметры!
Итак, есть цена 5 значная - без никаких "но"! ДЦ сказал, что 5 знак, так выполняй свои "сказал", нет?
Отлично!
Есть Point по паре = 0.00001 для этого пятизнака - это параметр, он не может быть другим!
Складываем Point и цену, например, Bid
Ну? С каких хренов-то там знаков больше чем 5 будет? Нет уж, извините, это не я дурак, это тот дурак, который считает иначе!
На этом вся глюкавость винды держится - никто ни за что не отвечает, а в результате два числа складываются по каким-то придуманным законам!

Не, приходится бороться, предотвращать и т.д. Но это - тупость программистов, это они должны не допускать подобного маразма на низком уровне, а не я на MQL4

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


А я не увиливаю. Тут суть такая, что, как я понял, как-то капанув по этой теме глубже:
Точность чисел типа дабл зависит не от операционной системы, а от самой системы, на которой производятся расчёты, т.е. от от железа так сказать. По-большей части от процессора.
Касаемо перла, там видать просто программисты писали язык уже чётко, а не криво как остальные. Сразу всё предусмотрели. Ведь это уже юниксоиды первыми вроде как его реализовали, а там уровень другой. Я вообще удивлён, почему он не стал так популярен, как Си-подобные. Ведь язык и правда красивый, чёткий, и самое главное очень гибкий. Я одно время когда FreeBSD ставил, чутка его изучал. Впечатления самые позитивные.
 

hoz

Активный участник
В принципе, ты прав. С другой стороны, от финансовой организации хочется получить безусловную точность. Поэтому, все решает техподдержка.
В альпари меня послали на три буквы, типа, своп дробный тебе же лучше. Они, типа, мне полпункта съэкономили, ога :D
Для советника это очень плохо, для анализа еще хуже, ибо как понять. что открыл ордер по цене. по которой сов никак не мог открыть ордер - нет сигналов на такую цену.
В результате получается муть примерно аналогичная открытию встречных в МТ5 - кто куда зачем открыл - непонятно, но ты в минусе! :D


Мне вот интересно. Вам переоткрыли ордер. Цена открытия изменилась получается, и она стала равной текущей? А для баланса текущей ситуации по балансу, прибавили(отняли) профит(убыток) так?
У меня такого не было, так что, чтоб понять нада понять что у Вас там происходит.
 

ansol

Местный знаток
Точность чисел типа дабл зависит не от операционной системы, а от самой системы, на которой производятся расчёты, т.е. от от железа так сказать. По-большей части от процессора.
Нет! Никак нет! Ни от какого железа ниче не зависит! Можно на ZX Spectrum реализовать астрономические расчеты - никаких проблем! И в шахматы может играть ваш телефон неглупо!
Все зависит от разработчиков софта!
 
Верх