Вынес вопрос в отдельную тему, ибо подобные вопросы ещё будут.
Программирую на MQL4 уже 18 лет. Я не могу найти применения такой вещи, как класс. Вразумите меня глупого, где это можно применить в MQL? Какая в этом необходимость?
Берём Delphi. Есть такой класс в нём, как кнопка. Да, согласен, можно перетащить его на форму и задействовать наследование. Н это Делфи. Где в MQL применимы классы и какая в них необходимость? Наверно я что-то не знаю.
Я классы в основном использую как библиотеки. Например хэндлы индикаторов, шесть встроенных из терминала и своих несколько. Свойства позиций, ордеров, торговые действия, сигналы и т.д. Можно и стандартную библиотеку терминала параллельно использовать, но я продублировал также свои. Пример хэндлы трендовых индикаторов:
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+class CHandlesInd
{
public:
int cHandle_AMA(string symbol, ENUM_TIMEFRAMES timeframe,
int period,
int fast_ma_period, int slow_ma_period,
int ama_shift,
ENUM_APPLIED_PRICE applied_price);
int cHandle_ADX(string symbol, ENUM_TIMEFRAMES timeframe,
int period);
int cHandle_ADXWilder(string symbol,
ENUM_TIMEFRAMES timeframe,
int period);
int cHandle_BBands(string symbol, ENUM_TIMEFRAMES period,
int bands_period, int bands_shift,
double bbdeviation_,
ENUM_APPLIED_PRICE applied_price);
int cHandle_DEMA(string symbol, ENUM_TIMEFRAMES period,
int ma_period, int ma_shift,
ENUM_APPLIED_PRICE applied_price);
int cHandle_Envelopes(string symbol, ENUM_TIMEFRAMES period,
int ma_period, int ma_shift,
ENUM_MA_METHOD ma_method,
ENUM_APPLIED_PRICE applied_price,
double endeviation_);
int cHandle_FrAMA(string symbol, ENUM_TIMEFRAMES period,
int ma_period, int ma_shift,
ENUM_APPLIED_PRICE applied_price);
int cHandle_MA(string symbol, ENUM_TIMEFRAMES timeframe,
int period, int ma_shift,
ENUM_MA_METHOD ma_method,
ENUM_APPLIED_PRICE applied_price);
int cHandle_SAR(string symbol, ENUM_TIMEFRAMES period,
double step, double maximum);
int cHandle_StdDev(string symbol, ENUM_TIMEFRAMES period,
int ma_period,
int ma_shift, ENUM_MA_METHOD ma_method,
ENUM_APPLIED_PRICE applied_price);
int cHandle_TEMA(string symbol, ENUM_TIMEFRAMES period,
int ma_period, int ma_shift,
ENUM_APPLIED_PRICE applied_price);
int cHandle_VIDyA(string symbol, ENUM_TIMEFRAMES period,
int cmo_period, int ema_period,
int ma_shift,
ENUM_APPLIED_PRICE applied_price);
int cSigMA(string symb_, bool Sig_ma_,
double ask_, double bid_,
double abma_n10_, int ma_handle_);
int cSigMA_dir(string symb_, int Sig_ma_dir_,
int ma_dir_, int ma_handle_);
int cSigABBB(string symb_, bool Sig_bb_, double ask_,
double bid_,
int bb_handle_,
double & buf_bb0_[], double & buf_bb1_[],
double & buf_bb2_[]);
};
Я классы в основном использую как библиотеки. Например хэндлы индикаторов, шесть встроенных из терминала и своих несколько. Свойства позиций, ордеров, торговые действия, сигналы и т.д. Можно и стандартную библиотеку терминала параллельно использовать, но я продублировал также свои. Пример хэндлы трендовых индикаторов:
ровно такой же строкой можно и без класса создать хендлы..., причем за счет подсветки синтаксиса будет гораздо нагляднее выглядеть
в классе создается универсальная функция с системной MqlParam, примера нет, я не использую такое, есть системной библиотеке
до того как комстролить класссы, неплохо подумать/пофантазировать "а как ЭТО попроще-бы использовать". Начинается всё с вариантов использования, с критериями быстро_писать,наглядно,удобно_сопровождать.
вот с теми-же самыми индикаторами :
вариант использования в стиле "eurusd.m15.ma10[11]" или даже "eurusd[PERIOD_M15][ma10][11]" видится резко более простым, логичным и кратким чем
void OnInit() {
ma10=iMA("EURUSD",PERIOD_M15,....); // или new CIndicator bla-bla
}
double Funct() {
double data[1];
if (!CopyRates(ma10,...)) return;
/// use or return data
}
если будешь делать для себя - то всеми силами будешь стараться упростить себе дальнейшую жизнь :-)
и стараться свести к удобным/наглядным вариантам использования, убирать во внутрь все сложности терминала и отдавать наружу краткие,удобные интерфейсы.
когда не для себя, то повторишь имеющийся функционал, обернёшь словами class и красивыми диаграммами его функции.
Но чтобы использовать такие классы в дальнейшем потребуется столько-же усилий и такой-же объём кода что и без них.
Вот такое ОО нахрен никому не нужно, даже когда идеологически всё правильно и иерархии классов со связями логичны
оставив всё остальное и это будет работать точно так-же.
Догадались. Дело в том что по мере изучения MQL, вначале писал функции, потом библиотеки функций, потом структуры, потом ООП. Так что логично, что библиотеки в классах схожи с библиотеками функций. И это был пример.
Вынес вопрос в отдельную тему, ибо подобные вопросы ещё будут.
Программирую на MQL4 уже 18 лет. Я не могу найти применения такой вещи, как класс. Вразумите меня глупого, где это можно применить в MQL? Какая в этом необходимость?
Берём Delphi. Есть такой класс в нём, как кнопка. Да, согласен, можно перетащить его на форму и задействовать наследование. Н это Делфи. Где в MQL применимы классы и какая в них необходимость? Наверно я что-то не знаю.
Я классы в основном использую как библиотеки. Например хэндлы индикаторов, шесть встроенных из терминала и своих несколько. Свойства позиций, ордеров, торговые действия, сигналы и т.д. Можно и стандартную библиотеку терминала параллельно использовать, но я продублировал также свои. Пример хэндлы трендовых индикаторов:
Я классы в основном использую как библиотеки. Например хэндлы индикаторов, шесть встроенных из терминала и своих несколько. Свойства позиций, ордеров, торговые действия, сигналы и т.д. Можно и стандартную библиотеку терминала параллельно использовать, но я продублировал также свои. Пример хэндлы трендовых индикаторов:
это пример как не надо делать)
это пример как не надо делать)
Может это пример, какие коды вы будете писать если будете употреблять
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Интересное и Юмор
Maxim Dmitrievsky, 2024.11.09 16:51
Навеяло :))
это пример как не надо делать)
А не надо конкретно что и почему именно так? А то из Ваших слов ни чего не понятно.
А не надо конкретно что и почему именно так? А то из Ваших слов ни чего не понятно.
ровно такой же строкой можно и без класса создать хендлы..., причем за счет подсветки синтаксиса будет гораздо нагляднее выглядеть
в классе создается универсальная функция с системной MqlParam, примера нет, я не использую такое, есть системной библиотеке
А не надо конкретно что и почему именно так? А то из Ваших слов ни чего не понятно.
Потому, что это совсем не класс.
Удали из этого кода
и закрывающую кривую скобку
оставив всё остальное и это будет работать точно так-же.
ровно такой же строкой можно и без класса создать хендлы..., причем за счет подсветки синтаксиса будет гораздо нагляднее выглядеть
в классе создается универсальная функция с системной MqlParam, примера нет, я не использую такое, есть системной библиотеке
до того как комстролить класссы, неплохо подумать/пофантазировать "а как ЭТО попроще-бы использовать". Начинается всё с вариантов использования, с критериями быстро_писать,наглядно,удобно_сопровождать.
вот с теми-же самыми индикаторами :
вариант использования в стиле "eurusd.m15.ma10[11]" или даже "eurusd[PERIOD_M15][ma10][11]" видится резко более простым, логичным и кратким чем
void OnInit() {
ma10=iMA("EURUSD",PERIOD_M15,....); // или new CIndicator bla-bla
}
double Funct() {
double data[1];
if (!CopyRates(ma10,...)) return;
/// use or return data
}
если будешь делать для себя - то всеми силами будешь стараться упростить себе дальнейшую жизнь :-)
и стараться свести к удобным/наглядным вариантам использования, убирать во внутрь все сложности терминала и отдавать наружу краткие,удобные интерфейсы.
когда не для себя, то повторишь имеющийся функционал, обернёшь словами class и красивыми диаграммами его функции.
Но чтобы использовать такие классы в дальнейшем потребуется столько-же усилий и такой-же объём кода что и без них.
Вот такое ОО нахрен никому не нужно, даже когда идеологически всё правильно и иерархии классов со связями логичны
Потому, что это совсем не класс.
Удали из этого кода
и закрывающую кривую скобку
оставив всё остальное и это будет работать точно так-же.
И это был пример.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Учёба. Классы. Нужна помощь.
lynxntech, 2024.11.09 15:18
это пример как не надо делать)