Используете ли вы CExpert при создании роботов? - страница 6

 
Karputov Vladimir:

В голом виде применять класс CExpert я думаю очень неудобно. Всё красота и мощь этого класса показывается при генерации советника в Мастере MQL5 - когда несколькими кликами в один эксперт соединяются несколько модулей:

  • модуля/модулей торговых сигналов
  • модуля трейлинга
  • модуля управления капиталом

Согласен, вот только мне эти шаблоны генерации абсолютно не интересны. Стандартный хлам из прошлого века, который не работает.
 
Ещё примеры применения класса CExpert - папка ...\MQL5\Experts\Advisors\...
 
Karputov Vladimir:
Ещё примеры применения класса CExpert - папка ...\MQL5\Experts\Advisors\...

Да, я их смотрел, там все простенько. Надо попробовать сигнал свой написать, тогда и ясно будет. А с другой стороны, у меня свой COrderManager, он и сетки строит и их двигает и много чего еще. Пока неясно, как это впихнуть в прокрустово ложе предлагаемого подхода.. и надо ли стараться

Вот Ctrade и остальными наборами классов СБ нет вопросов, использую, а со всем, что в папке Expert непонятки в плане, нужно ли оно мне. 

 
Alexey Volchanskiy:
синтаксис понятен - объявление полей класса или чего-то в этом роде.
В MQL4 не пахло никакими классами. В MQL5 МетаКвоты пошли в сторону программистов а не трейдеров. Конечно спасибо от программистов, но это таки не похоже на путь в светлое будущее - требовать большей квалификации от программиста => сокращать кол-во пользователей языка. А одной ногой усложнять язык, другой - усложнять 'мастер' для чайников => попа же может треснуть
 
Alexander Puzanov:

Я знаю на практике - штат контролёров, который надо создавать в коде 4ки, это почти 'ничего' по сравнению с 5й


Вы делаете категоричные выводы не владея темой - что бы это, если не невежество? Владимир, парадокс - в этом вы часто схожи с антагонистом Зелинским :)

 

double
        glo.dMOEposition = -1,
        glo.dLevelFlat,
        glo.adBufCrossMom[], glo.adBufCrossHB[],
        glo.adBufProperFan[],
        glo.adBufMOEUp[], glo.adBufMOEDn[],
        glo.adBufRetrace[], glo.adBufRetraceBreak[]
;
int
        glo.iAlertTime,
        glo.iPeriod
;
string
        glo.sIndicatorName = "бэбиМАКС",
        glo.sDebugFile = "МОЁ.dat",
        glo.sScriptName = "Бр",
        glo.sSymbol
;

На котором языке писано угадаете? 

Это mql4. Так некоторые программисты выделяли переменные глобального уровня.

За что и получили кучу неприятностей с введением новшеств.

 
Alexander Puzanov:
В MQL4 не пахло никакими классами. В MQL5 МетаКвоты пошли в сторону программистов а не трейдеров. Конечно спасибо от программистов, но это таки не похоже на путь в светлое будущее - требовать большей квалификации от программиста => сокращать кол-во пользователей языка. А одной ногой усложнять язык, другой - усложнять 'мастер' для чайников => попа же может треснуть

Ну давайте залезем на деревья и будем жрать бананы. Проще некуда. Только я вас огорчу, в наших краях бананы не растут, а зимой в мороз на дереве не очень комфортно.

Что вы прицепились к ООП? Никто не заставляет его использовать, Мастер тоже, пишите, как хотите. 

Когда у меня был сайт, посвященый MQL4, я всегда народу говорил, не используйте русские имена переменых и имена с точками. Наверняка метаквоты язык будут апгрейдить до правил хотя бы Си.

В предсказатели что ли податься? Почти все прогнозы сбываются.

 
Alexey Volchanskiy:

Ну давайте залезем на деревья и будем жрать бананы. Проще некуда. Только я вас огорчу, в наших краях бананы не растут, а зимой в мороз на дереве не очень комфортно.

Что вы прицепились к ООП? Никто не заставляет его использовать, Мастер тоже, пишите, как хотите. 

Когда у меня был сайт, посвященый MQL4, я всегда народу говорил, не используйте русские имена переменых и имена с точками. Наверняка метаквоты язык будут апгрейдить до правил хотя бы Си.

В предсказатели что ли податься? Почти все прогнозы сбываются.

Проще не значит дегенеративнее. 

Моё мнение , в данном случае , лучшее для профессиональных программистов, это враг хорошего для трейдеров-(программистов любителей) . 

 
Alexey Volchanskiy:

Что вы прицепились к ООП? Никто не заставляет его использовать

А где я сказал что ООП надо игнорировать? Я лично использую, но от него не фанатею

Речь ваще была о другом - ООП есть и тут и в PHP, но если бы вы поработали, скажем, с массивами там и тут, сомнений на тему кто из них более высокоуровневый язык не было бы. Вот этим стоило бы озаботиться сначала - обработку ошибок штатных функций лучше доверить профессионалам, т.е. разработчикам языка а не пользователям. Как и приведение типов, и др актуальные для чайников проблемы. А вышло наоборот - тока умостил кое-как MQL4 на горб, MQL5 вместо облегчения груза ещё 16 тонн проверок накатил + всяких изменений по мелочи + какой-то .ООПой пугает. Кого это может радовать, кроме тех кто "профессионально решает проблемы с кодом" :)
 
Alexander Puzanov:
А где я сказал что ООП надо игнорировать? Я лично использую, но от него не фанатею

Речь ваще была о другом - ООП есть и тут и в PHP, но если бы вы поработали, скажем, с массивами там и тут, сомнений на тему кто из них более высокоуровневый язык не было бы. Вот этим стоило бы озаботиться сначала - обработку ошибок штатных функций лучше доверить профессионалам, т.е. разработчикам языка а не пользователям. Как и приведение типов, и др актуальные для чайников проблемы. А вышло наоборот - тока умостил кое-как MQL4 на горб, MQL5 вместо облегчения груза ещё 16 тонн проверок накатил + всяких изменений по мелочи + какой-то .ООПой пугает. Кого это может радовать, кроме тех кто "профессионально решает проблемы с кодом" :)

Фанатеть ни от чего не надо, фанатизм мешает трезвой оценке.

Насчет проверок на лету - скорость нетипизированного PHP и MQL не хотите сравнить? Да, есть для PHP разные костыли-псевдокомпиляторы, но все равно он медленный. А в терминале нужна скорость, хотя бы для оптимизации.

 
Alexey Volchanskiy:

Да, я их смотрел, там все простенько. Надо попробовать сигнал свой написать, тогда и ясно будет. А с другой стороны, у меня свой COrderManager, он и сетки строит и их двигает и много чего еще. Пока неясно, как это впихнуть в прокрустово ложе предлагаемого подхода.. и надо ли стараться

Вот Ctrade и остальными наборами классов СБ нет вопросов, использую, а со всем, что в папке Expert непонятки в плане, нужно ли оно мне. 

как по мне, все классы от MQ  очень даже неплохие, их надо просто один раз изучить,

потратить три, четыре дня. после этого любая ваша работа облегчится на порядок.

если что-то в них не нравится, или чего-то  в них не хватает - не беда,  

пишите свой класс-наследник, в котором переопределяйте  методы классов от MQ на свой вкус....

в любом случае использовать эти классы в качестве базы  лучше, чем писать с нуля свои собственные...

вот как-то так:

//+------------------------------------------------------------------+
#include <Trade\AccountInfo.mqh>
#include <Trade\HistoryOrderInfo.mqh>
#include <Trade\TerminalInfo.mqh>
#include <Trade\DealInfo.mqh>

#include <Trade\SymbolInfo.mqh>
#include <Trade\OrderInfo.mqh>
#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
//+------------------------------------------------------------------+
class CAccount : public CAccountInfo
{
public:
   CAccount(void);
   ~CAccount(void);
};
//
CAccount::CAccount()
{
}
//
CAccount::~CAccount()
{
}
//+------------------------------------------------------------------+
class CHistory : public CHistoryOrderInfo
{
public:
   CHistory(void);
   ~CHistory(void);
};
//
CHistory::CHistory()
{
}
//
CHistory::~CHistory()
{
}
//+------------------------------------------------------------------+
class CTerminal : public CTerminalInfo
{
public:
   CTerminal(void);
   ~CTerminal(void);
};
//
CTerminal::CTerminal()
{
}
//
CTerminal::~CTerminal()
{
}
//+------------------------------------------------------------------+
class CDeal : public CDealInfo
{
public:
   CDeal(void);
   ~CDeal(void);
};
//
CDeal::CDeal()
{
}
//
CDeal::~CDeal()
{
}
//+------------------------------------------------------------------+
class CSymbol : public CSymbolInfo
{
public:
   CSymbol(void);
   ~CSymbol(void);
};
//
CSymbol::CSymbol()
{
   Name(Symbol());
   Refresh();
   RefreshRates();
}
//
CSymbol::~CSymbol()
{
}
//+------------------------------------------------------------------+
class COrder : public COrderInfo
{
public:
   COrder(void);
   ~COrder(void);
};
//
COrder::COrder()
{
}
//
COrder::~COrder()
{
}
//+------------------------------------------------------------------+
class CPosition : public CPositionInfo
{
public:
   CPosition(void);
   ~CPosition(void);
};
//
CPosition::CPosition()
{
}
//
CPosition::~CPosition()
{
}
//+------------------------------------------------------------------+
class CTradeExpert : public CTrade
{
public:
   CTradeExpert(void);
   ~CTradeExpert(void);
};
//
CTradeExpert::CTradeExpert()
{
}
//
CTradeExpert::~CTradeExpert()
{
}
//+------------------------------------------------------------------+

 ...

Причина обращения: