В классе у меня в качестве параметров в том числе есть всякая ерунда вроде параметров индикаторов и пр. В общем, то, что будет статично и одинаково. Зачем же мне каждый раз передавать эти значения при создании объекта?
вот так короче? bool barup=... WindowRedraw(); все равно выполнится - вынес из if
можно еще короче ... посмотрите мой файл
Спасибо. Как правильно задать интервал на котором прорисовываются уровни Фибо? Если наступило (время) 9,00 он должен нарисовать на М1 уровни с 8,00 до 8,59.
Как бы постановка вопроса, вроде, понятна же. Смысл инициализировать одно и то же.
Как вы собираетесь инициализировать то, чего ещё не существует? После создания объекта он начинает существовать, и вот тогда его уже можно инициализировать.
Я вам сразу сказал - сделайте у объекта параметрический конструктор, и передавайте в него нужные параметры, которыми и будет инициализирован вновь созданный объект.
Можете передавать параметры через структуру, которую заполняете нужными (постоянными для всех таких объектов) данными в OnInit() программы. Далее, в OnTick(), например, или в другом стандартном обработчике, создаёте свои объекты, но при создании пишете, например так: CMyObject object = new CMyObject(а_здесь_структура_с_установленными_параметрами);
Либо, если у вас вообще данные объекта не меняются от программы к программе, и всегда имеют одни и те же значения, то в конструкторе явно их инициализируйте нужными параметрами посредством списка инициализации как выше сказал Игорь:
Как вы собираетесь инициализировать то, чего ещё не существует? После создания объекта он начинает существовать, и вот тогда его уже можно инициализировать.
Я вам сразу сказал - сделайте у объекта параметрический конструктор, и передавайте в него нужные параметры, которыми и будет инициализирован вновь созданный объект.
Можете передавать параметры через структуру, которую заполняете нужными (постоянными для всех таких объектов) данными в OnInit() программы. Далее, в OnTick(), например, или в другом стандартном обработчике, создаёте свои объекты, но при создании пишете, например так: CMyObject object = new CMyObject(а_здесь_структура_с_установленными_параметрами);
Да, понятно. Спасибо. Ну как-то просто думал есть какое-то решение, чтобы при создании объект сразу имел какие-то предустановленные параметры без необходимости их передачи в конструктор или ещё как. Через какой-то родительский класс или ещё как.
Juer: В классе у меня в качестве параметров в том числе есть всякая ерунда вроде параметров индикаторов и пр. В общем, то, что будет статично и одинаково. Зачем же мне каждый раз передавать эти значения при создании объекта?
Так не передавайте. Инициализируйте в списке инициализации, как я показал. В момент создания экземпляра класса автоматически будет вызван конструктор класса, что повлечет за собой инициализацию всех членов класса, указанных в списке инициализации. Поставьте в методе CCandle функцию Print и увидите, как конструктор вызывается без всякого обращения к нему.
Да, понятно. Спасибо. Ну как-то просто думал есть какое-то решение, чтобы при создании объект сразу имел какие-то предустановленные параметры без необходимости их передачи в конструктор или ещё как. Через какой-то родительский класс или ещё как.
Так не передавайте. Инициализируйте в списке инициализации, как я показал. В момент создания экземпляра класса автоматически будет вызван конструктор класса, что повлечет за собой инициализацию всех членов класса, указанных в списке инициализации. Поставьте в методе CCandle функцию Print и увидите, как конструктор вызывается без всякого обращения к нему.
Не понял я, какая разница, через конструктор ли их передавать или через функцию инициализации?
Так не передавайте. Инициализируйте в списке инициализации, как я показал. В момент создания экземпляра класса автоматически будет вызван конструктор класса, что повлечет за собой инициализацию всех членов класса, указанных в списке инициализации. Поставьте в методе CCandle функцию Print и увидите, как конструктор вызывается без всякого обращения к нему.
Чем они будут инициализированы? Какими значениями? Непонятно
Допустим, исходные значения у меня во входных параметрах эксперта. Вот мне надо их передать каждому объекту этого класса. Но чтоб не передавать каждому вновь созданному.
здравтсвуйте, подскажите почему при таком цикле у меня удаляются лимитные ордера только если после установки лимитного ордера, на след. баре не было установлено еще одного лимитного ордера, т.е лимитник удаляется только если он установлен и после этого следуют 2 бара на которых небыло лимитных ордеров
int i;
for(i=0;i<=OrderTicket();i++)
{
takelimit=OrderSelect(ticket,SELECT_BY_TICKET,MODE_TRADES);
if(iBarShift(Symbol(),0,OrderOpenTime())==2)//здесь нужно что бы на 2-ом баре если есть ордер его удалить, но удаляется он только если после его установки небыло на след баре еще лимитника
{
deletelimit=OrderDelete(ticket);
if(!deletelimit)
{
Comment(GetLastError());
}
}
}
if(условие для байлимита)
{ордерсенд}
elseif(условие для селлимита)
{ордерсенд}
Чем они будут инициализированы? Какими значениями? Непонятно
Теми, которые запишите в списке инициализации.
Допустим, исходные значения у меня во входных параметрах эксперта. Вот мне надо их передать каждому объекту этого класса. Но чтоб не передавать каждому вновь созданному.
Да вот же:
inputint i_nA = 10;
inputdouble i_fB = 20.0;
inputdatetime i_dtC = D'2018.03.08 10:12:14';
class CCandle
{
int m_nA;
double m_fB;
datetime m_dtC;
public:
CCandle(void);
};
CCandle::CCandle(void)
: m_nA(i_nA)
, m_fB(i_fB)
, m_dtC(i_dtC)
{
Print("Создан объект со значениями: A = ", m_nA, ", B = ", m_fB, ", C = ", m_dtC);
}
intOnInit()
{
CCandle arrclass[10];
return(INIT_SUCCEEDED);
}
Если запустить, то получим:
022:09:36.706 Test EURUSD,M1 inputs: i_nA=10; i_fB=20.0; i_dtC=1520503934;
022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: Создан объект со значениями: A = 10, B = 20.0, C = 2018.03.0810:12:14022:09:36.995 Test EURUSD,M1: initialized
022:09:36.995 Test EURUSD,M1: uninit reason 0022:09:37.062 Script Test EURUSD,M1: removed
вот так короче? bool barup=... WindowRedraw(); все равно выполнится - вынес из if
можно еще короче ... посмотрите мой файл
Как бы постановка вопроса, вроде, понятна же. Смысл инициализировать одно и то же.
Как вы собираетесь инициализировать то, чего ещё не существует? После создания объекта он начинает существовать, и вот тогда его уже можно инициализировать.
Я вам сразу сказал - сделайте у объекта параметрический конструктор, и передавайте в него нужные параметры, которыми и будет инициализирован вновь созданный объект.
Можете передавать параметры через структуру, которую заполняете нужными (постоянными для всех таких объектов) данными в OnInit() программы. Далее, в OnTick(), например, или в другом стандартном обработчике, создаёте свои объекты, но при создании пишете, например так:
CMyObject object = new CMyObject(а_здесь_структура_с_установленными_параметрами);
Либо, если у вас вообще данные объекта не меняются от программы к программе, и всегда имеют одни и те же значения, то в конструкторе явно их инициализируйте нужными параметрами посредством списка инициализации как выше сказал Игорь:
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам
Ihor Herasko, 2018.03.28 17:31
Это делается в списке инициализации, который располагается в конструкторе класса:
Как вы собираетесь инициализировать то, чего ещё не существует? После создания объекта он начинает существовать, и вот тогда его уже можно инициализировать.
Я вам сразу сказал - сделайте у объекта параметрический конструктор, и передавайте в него нужные параметры, которыми и будет инициализирован вновь созданный объект.
Можете передавать параметры через структуру, которую заполняете нужными (постоянными для всех таких объектов) данными в OnInit() программы. Далее, в OnTick(), например, или в другом стандартном обработчике, создаёте свои объекты, но при создании пишете, например так:
CMyObject object = new CMyObject(а_здесь_структура_с_установленными_параметрами);
Да, понятно. Спасибо. Ну как-то просто думал есть какое-то решение, чтобы при создании объект сразу имел какие-то предустановленные параметры без необходимости их передачи в конструктор или ещё как. Через какой-то родительский класс или ещё как.
В классе у меня в качестве параметров в том числе есть всякая ерунда вроде параметров индикаторов и пр. В общем, то, что будет статично и одинаково. Зачем же мне каждый раз передавать эти значения при создании объекта?
Так не передавайте. Инициализируйте в списке инициализации, как я показал. В момент создания экземпляра класса автоматически будет вызван конструктор класса, что повлечет за собой инициализацию всех членов класса, указанных в списке инициализации. Поставьте в методе CCandle функцию Print и увидите, как конструктор вызывается без всякого обращения к нему.
Да, понятно. Спасибо. Ну как-то просто думал есть какое-то решение, чтобы при создании объект сразу имел какие-то предустановленные параметры без необходимости их передачи в конструктор или ещё как. Через какой-то родительский класс или ещё как.
Еще раз. Можно без передачи данных в конструктор.
Так не передавайте. Инициализируйте в списке инициализации, как я показал. В момент создания экземпляра класса автоматически будет вызван конструктор класса, что повлечет за собой инициализацию всех членов класса, указанных в списке инициализации. Поставьте в методе CCandle функцию Print и увидите, как конструктор вызывается без всякого обращения к нему.
Не понял я, какая разница, через конструктор ли их передавать или через функцию инициализации?
Так не передавайте. Инициализируйте в списке инициализации, как я показал. В момент создания экземпляра класса автоматически будет вызван конструктор класса, что повлечет за собой инициализацию всех членов класса, указанных в списке инициализации. Поставьте в методе CCandle функцию Print и увидите, как конструктор вызывается без всякого обращения к нему.
Чем они будут инициализированы? Какими значениями? Непонятно
Допустим, исходные значения у меня во входных параметрах эксперта. Вот мне надо их передать каждому объекту этого класса. Но чтоб не передавать каждому вновь созданному.
здравтсвуйте, подскажите почему при таком цикле у меня удаляются лимитные ордера только если после установки лимитного ордера, на след. баре не было установлено еще одного лимитного ордера, т.е лимитник удаляется только если он установлен и после этого следуют 2 бара на которых небыло лимитных ордеров
Чем они будут инициализированы? Какими значениями? Непонятно
Теми, которые запишите в списке инициализации.
Допустим, исходные значения у меня во входных параметрах эксперта. Вот мне надо их передать каждому объекту этого класса. Но чтоб не передавать каждому вновь созданному.
Да вот же:
Если запустить, то получим: