Вопросы от начинающих MQL4 MT4 MetaTrader 4 - страница 124
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Здравствуйте уважаемые !
Подскажите как перекрасить бары не применяя шаблоны в мт4 !?
Или как применить цветовую схему !?
Немного упрощу ответ, чтобы не сбивать с толку. Этот знак (&) указывает, что аргумент функции может изменить свое значение во время выполнения функции и вернется в то место, откуда была вызвана функция, с другим значением. В рассматриваемом случае функция SaveOrder может изменить содержимое массивов g_arrstBuyOrderInfo и g_arrstSellOrderInfo, а также переменных g_nBuyOrdersCnt и g_nSellOrdersCnt.
Спасибо. Становится чуть понятней. Не ясно только, как всё это можно узнать, не обращаясь к форуму. В учебниках таких объяснений я не нашел.
Прошу проконсультировать дальше:
1) Компилятор пишет - 'g_nBuyOrdersCnt' - declaration without type ; 'g_nSellOrdersCnt' - declaration without type . Правильно ли я понимаю, что g_nBuyOrdersCnt и g_nSellOrdersCnt должны быть объявлены на глобальном уровне, чтоб компилятор не ругался?
2) Компилятор: 'for' - expressions are not allowed on a global scope. Тут не понятно.
3) В функции void SaveOrderInfo(OrderInfo &arrstOrderInfo[], int &nOrdersCnt) компилятор пишет: declaration of 'arrstOrderInfo' hides global declaration. see previous declaration of 'arrstOrderInfo'. Тоже не очень понятно.
4) 'nOrderCnt' - undeclared identifier. А действительно, почему он нигде не задекларирован?
Здравствуйте уважаемые !
Подскажите как перекрасить бары не применяя шаблоны в мт4 !?
Или как применить цветовую схему !?
Если программно, то смотрите функции ChartSetInteger() и ChartGetInteger().
Спасибо. Становится чуть понятней. Не ясно только, как всё это можно узнать, не обращаясь к форуму. В учебниках таких объяснений я не нашел.
Прошу проконсультировать дальше:
1) Компилятор пишет - 'g_nBuyOrdersCnt' - declaration without type ; 'g_nSellOrdersCnt' - declaration without type . Правильно ли я понимаю, что g_nBuyOrdersCnt и g_nSellOrdersCnt должны быть объявлены на глобальном уровне, чтоб компилятор не ругался?
2) Компилятор: 'for' - expressions are not allowed on a global scope. Тут не понятно.
3) В функции void SaveOrderInfo(OrderInfo &arrstOrderInfo[], int &nOrdersCnt) компилятор пишет: declaration of 'arrstOrderInfo' hides global declaration. see previous declaration of 'arrstOrderInfo'. Тоже не очень понятно.
4) 'nOrderCnt' - undeclared identifier. А действительно, почему он нигде не задекларирован?
Вот, как все это должно быть в коде, если смотреть на него целиком:
И последнее: так и не понял, откуда берутся .n и .f и что это такое.
Оператор "точка" указывает на доступ к члену структуры или класса. В данном случае - структуры.
Литеры n и f - это способ указания типа данных, которые хранятся в переменной. Ведь при огромном количестве переменных невозможно запомнить тип каждой из них. А если в имени переменной будет указание на ее тип, то необходимость в запоминании отпадает сама собой. n - признак целого числа (от Numeric), f - вещественного (от float - число с плавающей запятой). Такой способ записи имен переменных называется Венгерской нотацией.
Оператор "точка" указывает на доступ к члену структуры или класса. В данном случае - структуры.
Литеры n и f - это способ указания типа данных, которые хранятся в переменной. Ведь при огромном количестве переменных невозможно запомнить тип каждой из них. А если в имени переменной будет указание на ее тип, то необходимость в запоминании отпадает сама собой. n - признак целого числа (от Numeric), f - вещественного (от float - число с плавающей запятой). Такой способ записи имен переменных называется Венгерской нотацией.
Вон оно как!! Оказывается g_ и g_n - не просто какое-то сокращение, а префиксы, говорящие, что это глобальная и глобальная целочисленная переменные!! Уф... А я-то всё не мог понять, зачем эти черточки в обозначениях переменных... Ну и как возможно новичку, не разбирающемуся в таких тонкостях, писать код с использованием массивов, структур и пр.? Я думал, что моя простенькая стратегия может быть написана простым языком, без погружения в дебри.
Не могли бы Вы дать ссылку на подробный (расширенный) учебник по мкл4 для изучения параллельно Вашим консультациям?
А не могли бы Вы для сравнения написать вышеизложенный код без использования Венгерской нотации? Вы уверены, что платформа МТ4 её чётко понимает?
И вопрос по коду: для чего здесь continue;?
по идее тогда если ордер не выбран в первой итерации, он не будет выбран и в последующих и цикл будет продолжаться до бесконечности? Потому что количество ордеров не меняется. Не будет ли правильнее break с сообщением об ошибке?Контекстное меню графика, свойства, цвета -- так пробовали?
Спасибо мне програмно надо нашел уже !!!
Если программно, то смотрите функции ChartSetInteger() и ChartGetInteger().
Спасибо нашел уже с вашей помощью!!!
Вон оно как!! Оказывается g_ и g_n - не просто какое-то сокращение, а префиксы, говорящие, что это глобальная и глобальная целочисленная переменные!! Уф... А я-то всё не мог понять, зачем эти черточки в обозначениях переменных... Ну и как возможно новичку, не разбирающемуся в таких тонкостях, писать код с использованием массивов, структур и пр.? Я думал, что моя простенькая стратегия может быть написана простым языком, без погружения в дебри.
Чтобы сделать какое-то дело, приходится погружаться в тонкости. Другого пути нет.
Не могли бы Вы дать ссылку на подробный (расширенный) учебник по мкл4 для изучения параллельно Вашим консультациям?
Мне известен только один учебник по MQL4 - Учебник Сергея Ковалева.
А не могли бы Вы для сравнения написать вышеизложенный код без использования Венгерской нотации? Вы уверены, что платформа МТ4 её чётко понимает?
Привыкайте сразу к правильному оформлению кода )) Венгерскую нотацию придумали достаточно опытные программисты.
И вопрос по коду: для чего здесь continue;?
по идее тогда если ордер не выбран в первой итерации, он не будет выбран и в последующих и цикл будет продолжаться до бесконечности? Потому что количество ордеров не меняется. Не будет ли правильнее break с сообщением об ошибке?Если не удалось выбрать один ордер, то вовсе не значит, что не удастся выбрать следующий ордер. Поэтому цикл целесообразно продолжить.
Если не удалось выбрать один ордер, то вовсе не значит, что не удастся выбрать следующий ордер. Поэтому цикл целесообразно продолжить.
И выводить сообщение об ошибке не надо? Наверное не мешало бы знать, почему не найден ордер и как этого избежать?