Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Говорили мне что глобальные переменные нужно использовать осторожно...
в функции GetNewX2 объявил локальную переменную х2 (и есть глобальная переменная х2) в итоге наверно и получал неоределенность со сравнением
Надо быть внимательнее)
МТ 5 интересен, но пока тяжко во всем разобраться, вроде переделал мультивалютник с МТ4 на МТ5
В следующей версии компилятора появятся предупреждения для случаев, когда одно объявление скрывает предыдущее локальное или глобальное.
например код:
//| hides.mq5 |
//| Copyright 2010, MetaQuotes Software Corp. |
//| http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2010, MetaQuotes Software Corp."
#property link "http://www.mql5.com"
#property version "1.00"
int x;
void func(double x)
{
}
//+------------------------------------------------------------------+
//| Script program start function |
//+------------------------------------------------------------------+
void OnStart()
{
//---
int i,j,z,x;
for(int i=0;i<x;i++)
for(int j=0;j<x;j++)
Print(i*z);
}
//+------------------------------------------------------------------+
при его компиляции выдаются предупреждения:
declaration of 'x' hides global declaration at line 10 1.mq5 21 14
declaration of 'i' hides local declaration at line 21 1.mq5 23 12
declaration of 'j' hides local declaration at line 21 1.mq5 24 15
variable 'i' is not used 1.mq5 21 8
variable 'j' is not used 1.mq5 21 10
uninitialized variable 'x' is used 1.mq5 23 18
uninitialized variable 'z' is used 1.mq5 25 18
Простые соблюдения базовых правил именования сводят количество таких ошибок к минимуму.
Глобальные с большой буквы, локальные с маленькой -- все.
Простые соблюдения базовых правил именования сводят количество таких ошибок к минимуму.
Глобальные с большой буквы, локальные с маленькой -- все.
Я например, часто использую приставку "tmp" для временных переменных, которые нужны для расчетов, и удалятся после выхода из функции/метода.
Модераторам -- я дал нормальный совет, он его испохабил. За что пост удалили то?
Я то испохабил?
С вас корона не спадывает? Почитайте любые книги по программированию на любых языках, везде написано именно "Давайте осмысленные названия переменным", что часто исключает проблемы с видимостью.
Я то испохабил?
Конечно.
Почитайте любые книги по программированию на любых языках, везде написано именно "Давайте осмысленные названия переменным"
Вот именно поэтому.
mrProF:
Я например, часто использую приставку "tmp" для временных переменных, которые нужны для расчетов, и удалятся после выхода из функции/метода.mrProF:
Я например, часто использую приставку "tmp" для временных переменных, которые нужны для расчетов, и удалятся после выхода из функции/метода.Я это написал как делаю я, и это не является руководством к действию.
При чем тут стандарты? Стандартов кучи, каждый выбирает свой по удобству.
А давать переменным названия "x1" и "X1" это дурдом.
Я уже программирую лет пять, на разных языках, и проблем с перекрытием области видимости не было.
Мой совет необходимо принять в первую очередь, а Ваш следом.
А не только называть глобальные переменные с большой буквы.
Иди учись, малыш.
Ок, я даже спорить не буду, холивар того не стоит :D
P.S. Вопрос на выходные, как правильно писать: "inputParam" или "input_param"? :D
P.S. Вопрос на выходные, как правильно писать: "inputParam" или "input_param"? :D
Оба варианта нормальные, в зависимости от соглашения по именованию.
Со вторым вариантом больше мороки, т.к. в нем вообще нету заглавных буков, поэтому используется намного реже первого.
Я это написал как делаю я, и это не является руководством к действию.
При чем тут стандарты? Стандартов кучи, каждый выбирает свой по удобству.
А давать переменным названия "x1" и "X1" это дурдом.
Я уже программирую лет пять, на разных языках, и проблем с перекрытием области видимости не было.
Мой совет необходимо принять в первую очередь, а Ваш следом.
А не только называть глобальные переменные с большой буквы.
а вы можете абстрагироваться? Смысл был мне выкладывать код? Я выложил часть проверки в формальном виде. Когда в учебнике пишутся формулы, там указываются число1(квадратный корень из 9) + число2(....)
или просто указываются иксы, игреки и другие буквы...
вот вам кусок кода, нет тут никаких иксов и тому подобное
...
//входные параметры советника
int eTakeProfit
...
//глобальные параметры советника
int gCurrentActiveMean;
int gCurrentMean;
...
//функции
int GetCurrentMean()
{
int gCurrentMean; // недосмотрел в результате несколько часов недопонимания что не так
...
}
...
void CheckForClose()
{
int SpreadMain;
int SpreadAlly;
...
if ( ((gCurrentActiveMean - gCurrentMean) >= (eTakeProfit + SpreadMain + SpreadAlly)) && gCurrentMean !=-1)
{
}
..
}
P.S. Переписал советник в виде класса, глобальных переменных нет, теперь это переменные класса
P.S. Время на написание советников выделяю в свободное время и не все сразу получается, а вам mrProF надо более сдержанно выражаться