Вот здесь https://www.mql5.com/ru/forum/119342 хорошая функция для получения списка доступных в терминале символов, в данном случае не вижу большого смысла сравнивать символ ордера с именами символов брокера на данном счете, но в других случаях очень полезна.
А в данном случае, чтобы исключить суффиксы
string smbl=StringSubstr(OrderSymbol(),0,6);
if (smbl=="EURUSD") priceEU1=OrderOpenPrice();
"Следует иметь ввиду, что в MQL4 элементы структуры следуют непосредственно друг за другом без выравнивания."
Что имеется ввиду под Выравниванием?
если я правильно понял, то выровненные элементы будут выглядеть так:
а не выровненные так: Верно?
Все расшифровано в комментариях
еще 4 байта пропуска. Обеспечили выравнивание на границу 8 байт
Элементы Структуры могут иметь разный тип и соответственно различную длину в байтах, Но память под каждый элемент выделяется одинаковая - по макс члену. В примере это double 8байт.
Фактически в структуре всего 3 элемента, но первый занимает всего 1 байт и надо еще отвести 7 байт "пустыщек" для того чтобы выровнять его с последними двумя элементами. Конкретную структуру проще описать так
struct trade_settings
{
ulong slippage; // значение допустимого проскальзывания, но потом наверняка понадобится приведение в int перед подстановкой в OrderSend()
double take; // значения цены фиксации прибылиdouble stop; // значение цены защитного стопа
};
Т.е. получается компилятор сам добавляет необходимое количество байт под каждый элемент? Имею ввиду пробелы, которые там в примере не нужны?
И, кстати, если
GSB:
Структуры могут иметь разный тип и соответственно различную длину в байтах, Но память под каждый элемент выделяется одинаковая - по макс члену. В примере это double 8байт.
Если оно так, и всё-равно память под каждый элемент выделяется одна, то какая разница в каком порядке расположить элементы структуры?
Т.е. получается компилятор сам добавляет необходимое количество байт под каждый элемент? Имею ввиду пробелы, которые там в примере не нужны?
И, кстати, если
Если оно так, и всё-равно память под каждый элемент выделяется одна, то какая разница в каком порядке расположить элементы структуры?
Нет не добавляет, если поставили int slippage первым, то выделится 4 байта, потому и надо добавить до 8 ( int reserve) или вместо int использовать long
Цитата из Справки
Внимание: данный пример иллюстрирует неправильно спроектированные данные.
Лучше было бы сначала объявить данные take и stop большего размера типа double, а затем объявить член slippage типа uchar.
В этом случае внутреннее представление данных будет всегда одинаково независимо от значения
Правильный вариант, при котором не надо делать выравнивание
struct trade_settings
{
double take; // значения цены фиксации прибылиdouble stop; // значение цены защитного стопаint slippage; // значение допустимого проскальзывания
};
Конечно же так и есть, однако...
Я сильно сомневаюсь в правильности конструкции
Вот здесь https://www.mql5.com/ru/forum/119342 хорошая функция для получения списка доступных в терминале символов, в данном случае не вижу большого смысла сравнивать символ ордера с именами символов брокера на данном счете, но в других случаях очень полезна.
А в данном случае, чтобы исключить суффиксы
Не подскажите. Где раздел про то, какие параметры. То есть про оформление, галочки, стрелочки и тп.
Вы бы расшифровали о чем речь
Вы бы расшифровали о чем речь
Благодарю.
Условие проходило, ошибка была в другой части кода. :)
В справке написано, что:
"Следует иметь ввиду, что в MQL4 элементы структуры следуют непосредственно друг за другом без выравнивания."
Что имеется ввиду под Выравниванием?
если я правильно понял, то выровненные элементы будут выглядеть так:
а не выровненные так:Верно?
Меня удивляет то, что в программировании базовым моментом является то, что пробелы компилятор пропускает, а тут выходит, что это влияет на что-то...
В справке написано, что:
"Следует иметь ввиду, что в MQL4 элементы структуры следуют непосредственно друг за другом без выравнивания."
Что имеется ввиду под Выравниванием?
если я правильно понял, то выровненные элементы будут выглядеть так:
а не выровненные так: Верно?Все расшифровано в комментариях
еще 4 байта пропуска. Обеспечили выравнивание на границу 8 байтЭлементы Структуры могут иметь разный тип и соответственно различную длину в байтах, Но память под каждый элемент выделяется одинаковая - по макс члену. В примере это double 8байт.
Фактически в структуре всего 3 элемента, но первый занимает всего 1 байт и надо еще отвести 7 байт "пустыщек" для того чтобы выровнять его с последними двумя элементами. Конкретную структуру проще описать так
Т.е. получается компилятор сам добавляет необходимое количество байт под каждый элемент? Имею ввиду пробелы, которые там в примере не нужны?
И, кстати, если
Структуры могут иметь разный тип и соответственно различную длину в байтах, Но память под каждый элемент выделяется одинаковая - по макс члену. В примере это double 8байт.
Если оно так, и всё-равно память под каждый элемент выделяется одна, то какая разница в каком порядке расположить элементы структуры?
Т.е. получается компилятор сам добавляет необходимое количество байт под каждый элемент? Имею ввиду пробелы, которые там в примере не нужны?
И, кстати, если
Если оно так, и всё-равно память под каждый элемент выделяется одна, то какая разница в каком порядке расположить элементы структуры?
Нет не добавляет, если поставили int slippage первым, то выделится 4 байта, потому и надо добавить до 8 ( int reserve) или вместо int использовать long
Цитата из Справки
Правильный вариант, при котором не надо делать выравнивание
Подскажите пожалуйста, пишу мультивалютный советник, вытаскиваю аск и бид других валют, нормализирую, но в цене все равно есть лишние цифры.
Digits тоже из соответствующего символа желательно "вытаскивать" ;)