Имя пользователя:

Пароль:



Объявления
Поздравляем
kostya_onishenko

Изучаем ООП вместе

Изучаем ООП вместе

Номер сообщения:#21  Непрочитанное сообщение Kanataga » 08 сен 2014, 17:28

Цитата:
Сережа, а что рассуждать надо или не надо, открыл ветку значит надо было. Мы все ждем с не терпением следующих уроков.
И если рассуждать прикладным языком, было бы проще все это пережевывать на примере:
Пишем Интегру на ООП, делаем так, создаем первый блок учета ордеров и погнали до строчки жевать как и что откуда вызываем и как и зачем.
Перешли дальше, блок открытия, блок модификации, блок перекрытия, блок закрытия, блок сигналов.
И уроки бы все усвоили и Интегру за одно написали на ООП.
То есть мысль простая, создать отточенные до четкости функции как конструктор, а заодно изучить ООП.
И потом стругай советников на вкус и цвет.
А то что не сова на форуме все у всех разное в функционале, а функции одни и теже открыть закрыть перекрыть протралить.

Поддерживаю, лучше изучать написание различных блоков, думаю будет легче потом для созданиях своих шедевров. :[
Аватар пользователя
Kanataga


Изучаем ООП вместе

Номер сообщения:#22  Непрочитанное сообщение SVG » 08 сен 2014, 17:33

Костя я уже все объяснил Сергею и он меня понял. Но еще очень хотелось что бы подключился Константин(Kisa) и думаю не нужно пока сравнивать код классов. Вот когда мы хоть на цыпочках подтянемся к уровняю Сергея и Кости, то думаю получим право обсуждать их код.
Возврат спреда делать здесь!!! ..... платят.
Аватар пользователя
SVG
.
.
Сообщений: 1429
Возраст: 45
Зарегистрирован: 61 месяцев и 24 дней
Откуда: Khimki Left coast
Национальный флаг:
Russia
Благодарил (а): 454 раз.
Поблагодарили: 805 раз.
Имя: Владимир
Пункты репутации: 29
Молодой трейдерМолодой трейдерМолодой трейдер

Изучаем ООП вместе

Номер сообщения:#23  Непрочитанное сообщение Viscor » 08 сен 2014, 23:08

Pyyx писал(а):

Для начала нужно понять основы, разобравшись на простых примерах, а затем уже переходить на более сложные алгоритмы. Но насколько я понимаю из телефонных разговоров и из переписки многим, это просто не нужно, и лишнее. Попробуем по другому, возьмём за основу библиотеку классов, и попробуем на ней написать сначала простой советник, а затем приступим к более сложным алгоритмам.
Такой план всех устроит?
:tipa:

Конечно устроит , но в начале все равно перед тем как переходить к библиотеке классов ,нужен еще урок про классы их перегрузки, методы и способы наследования, потом легче будет с библиотекой, а кому нехватит в каком-то классе методов смогут уже добавлять свои , ну все же получается хороший конспект.
Аватар пользователя
Viscor


Изучаем ООП вместе

Номер сообщения:#24  Непрочитанное сообщение Pyyx » 08 сен 2014, 23:25

Viscor писал(а):

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

Если освещать всё с самого начало, я имею ввиду классы, то это затянется как минимум на месяц. А народ уже хочет применять методы классов не вдаваясь в подробности как и зачем там всё вызывается, им пока хватит и основных классов и их методов, ну а дальше, если кому будет интересно, то начнём ковыряться и в теории, и в дальнейшем развитии.
:men:
Правильного выбора в реальности не существует — есть только сделанный выбор и его последствия.

Изучаем ООП вместе
Аватар пользователя
Pyyx
.
.
      Автор темы
Сообщений: 950
Возраст: 36
Зарегистрирован: 62 месяцев и 9 дней
Откуда: Планета Земля
Национальный флаг:
Belarus
Благодарил (а): 331 раз.
Поблагодарили: 545 раз.
Имя: Сергей
Пункты репутации: 21
Молодой трейдерМолодой трейдерМолодой трейдер

Изучаем ООП вместе

Номер сообщения:#25  Непрочитанное сообщение coder-ex » 10 сен 2014, 06:38

Pyyx писал(а):

Если освещать всё с самого начало, я имею ввиду классы, то это затянется как минимум на месяц. А народ уже хочет применять методы классов не вдаваясь в подробности как и зачем там всё вызывается, им пока хватит и основных классов и их методов, ну а дальше, если кому будет интересно, то начнём ковыряться и в теории, и в дальнейшем развитии.
:men:

Не давая основ знаний ученику, ты получишь в итоге обезьяну с гранатой.
ООП нужно изучить с основ, а для этого многим (пока подавляющему большинству на нашем форуме) нужно изучить структурное программирование. При этом просто изложение материала это мартышкин труд для учителя - подобных материалов в Интернете полно. Нужно материал давать "вживую" - получать от ученика вопросы и отвечать на них. Все остальное с точки зрения педагогики, является расширенным самообучением.
Кроме этого могу еще дополнить - простое изучение языка не даст желаемого результата, нужно развивать у ученика логику программирования. Пока этого не будет, зазубривание даже основ языка ни чего не даст.
Си — это причудливый, несовершенный, но невероятно успешный язык.
— Dennis M. Ritchie.
Аватар пользователя
coder-ex
.
.
Сообщений: 848
Возраст: 47
Зарегистрирован: 14 месяцев и 2 дня
Откуда: Томск
Национальный флаг:
Russia
Благодарил (а): 10 раз.
Поблагодарили: 21 раз.
Имя: Константин
Пункты репутации: 2
Ученик трейдера

Изучаем ООП вместе

Номер сообщения:#26  Непрочитанное сообщение Viscor » 14 сен 2014, 18:04

Pyyx писал(а):

Если освещать всё с самого начало, я имею ввиду классы, то это затянется как минимум на месяц. А народ уже хочет применять методы классов

Я имел в виду кратко ознакомить с форматом класса, где что можно и как менять и дополнять, как наследовать(форма записи) и т.п. очень кратко так сказать познакомить с "правописанием".
Аватар пользователя
Viscor


Изучаем ООП вместе

Номер сообщения:#27  Непрочитанное сообщение SNAIKE » 14 окт 2014, 10:39

Интересует... продолжение изучения классов будет у нас

Хочу научиться прикреплять класс сигнальщиков к советнику
Для более лутшего понимания прошу сделать пример
Возьмем к примеру class CiCCI который есть в терминале по умолчанию.
Интересует как заменить процедурный CCI который реализован в советнике, на замену его из класса.

Приложил старенькую интегру в которой минимум кода, но есть сигнальщик CCI
У вас нет доступа для просмотра вложений в этом сообщении.
Аватар пользователя
SNAIKE


Изучаем ООП вместе

Номер сообщения:#28  Непрочитанное сообщение Pyyx » 14 окт 2014, 12:25

SNAIKE писал(а):

Интересует... продолжение изучения классов будет у нас

Будут, но позже всё свободное время уходит на разработку нового проекта.
:nevidel:
SNAIKE писал(а):

Хочу научиться прикреплять класс сигнальщиков к советнику
Для более лутшего понимания прошу сделать пример
Возьмем к примеру class CiCCI который есть в терминале по умолчанию.
Интересует как заменить процедурный CCI который реализован в советнике, на замену его из класса.

Изучай и учись:
Integra_v2.3.20.mq4
У вас нет доступа для просмотра вложений в этом сообщении.
Правильного выбора в реальности не существует — есть только сделанный выбор и его последствия.

Изучаем ООП вместе
Аватар пользователя
Pyyx
.
.
      Автор темы
Сообщений: 950
Возраст: 36
Зарегистрирован: 62 месяцев и 9 дней
Откуда: Планета Земля
Национальный флаг:
Belarus
Благодарил (а): 331 раз.
Поблагодарили: 545 раз.
Имя: Сергей
Пункты репутации: 21
Молодой трейдерМолодой трейдерМолодой трейдер

Изучаем ООП вместе

Номер сообщения:#29  Непрочитанное сообщение SNAIKE » 14 окт 2014, 13:44

Ха интересно получается картина выресовывается.
Получается что функция для сигнала CCI все же нужна для открытия бай сел в советнике, а я думал что все эти функции уже в классе находятся, а мы лишь делаем подключение этого класса в советнике, объявляем нужные нам переменные и пользуемся, правда мне не понятно было как советник будет в таком случае делать запрос на сигнал индикатора, тут мы имеем if (Signal_CCI()==-1) а вот как быть в моем случае.
Вообщем что то понятно, а что то не понятно, что это за такое ООП если после подключения класса у нас не снижается число строк кода, а наоборот прибавляется.
Или же данную сигнальную функцию можно внедрить в сам класс, а от туда уже сделать типа if (CiCCI() ==1) нужно как то это дело обмозговать.

С подключением класса понятно
С внешними переменными тоже понятно
С созданием объекта класса тоже понятно, тут мы можем придумать любое название для него как я понимаю.
А вот с инициализацией объектов не понятно, откуда узнать что нужно инициализировать для какого то конкретного индикатора.
Ну и с функцией индикатора тоже не совсем понятно.

Сообщение добавлено... спустя 17 минут 24 секунды:
Ха, кажись понял откуда берется инициализация
Получается так, если что поправь
CCI - это объявленный объект класса
Create - это не понятно( если перевести то - вызывать..глагол), но какая то штуковина которая есть в классе и в ней эти значения
Код: выделить все · Развернуть
bool              Create(const string symbol,const ENUM_TIMEFRAMES period,const int ma_period,const int applied);

в итоге получаем беря параметры до второй запятой которые нам нужны
CCI.Create(_Symbol,_CCI_TimeFrame,Period_CCI,PRICE_TYPICAL);
PRICE_TYPICAL - типичная цена я так понимаю уже на свое усмотрение делается и ее можно заменить на
PRICE_WEIGHTED
PRICE_CLOSE
PRICE_OPEN
и т.д.
Последний раз редактировалось SNAIKE 14 окт 2014, 14:04, всего редактировалось 1 раз.
Аватар пользователя
SNAIKE


Изучаем ООП вместе

Номер сообщения:#30  Непрочитанное сообщение Pyyx » 14 окт 2014, 15:13

SNAIKE писал(а):

Create - это не понятно( если перевести то - вызывать..глагол), но какая то штуковина которая есть в классе и в ней эти значения

Это непонятная штука называется функцией класса, или по другому методом класса. И работает как обычная функция, толь она может быть вызвана только через имя класса.
:men:
SNAIKE писал(а):

PRICE_TYPICAL - типичная цена я так понимаю уже на свое усмотрение делается и ее можно заменить на

:aga:
Правильного выбора в реальности не существует — есть только сделанный выбор и его последствия.

Изучаем ООП вместе
Аватар пользователя
Pyyx
.
.
      Автор темы
Сообщений: 950
Возраст: 36
Зарегистрирован: 62 месяцев и 9 дней
Откуда: Планета Земля
Национальный флаг:
Belarus
Благодарил (а): 331 раз.
Поблагодарили: 545 раз.
Имя: Сергей
Пункты репутации: 21
Молодой трейдерМолодой трейдерМолодой трейдер

Изучаем ООП вместе

Номер сообщения:#31  Непрочитанное сообщение SNAIKE » 14 окт 2014, 17:46

Серег, ну а я правильно понял что функция

int Signal_CCI()
Код: выделить все · Развернуть
{
      double x0 = iClose(Symbol(),mper[CCI_TimeFrame+1], 0);
      double x1 = iClose(Symbol(),mper[CCI_TimeFrame+1], 2);
      double x2 = CCI.Main(0);// меняем стандартный вызов индикатора на вызов соотвествующей функции из класса
      double x3 = CCI.Main(1);// меняем стандартный вызов индикатора на вызов соотвествующей функции из класса
      double x4 = CCI.Main(3);// меняем стандартный вызов индикатора на вызов соотвествующей функции из класса
      int vSignal = 0;
      if (x2>-Level && x3<-Level && x2>x4 && x1>x0) vSignal = 1;    //Buy
      else
      if (x2< Level && x3> Level && x2<x4 && x1<x0) vSignal =-1;    //Sell
   return(vSignal);
   }

Может быть помещена в сам класс, или же это в обязательном порядке в советнике прописывается.
Аватар пользователя
SNAIKE


Изучаем ООП вместе

Номер сообщения:#32  Непрочитанное сообщение Pyyx » 14 окт 2014, 23:03

SNAIKE писал(а):

Может быть помещена в сам класс

Всё что хочешь туда и пихай, главное соблюдай правила.
Я вообще не заморачиваюсь, в коде советника, или индюка у меня всего лишь несколько строк, а все обработчики засунуты в классы.
:men:
Правильного выбора в реальности не существует — есть только сделанный выбор и его последствия.

Изучаем ООП вместе
Аватар пользователя
Pyyx
.
.
      Автор темы
Сообщений: 950
Возраст: 36
Зарегистрирован: 62 месяцев и 9 дней
Откуда: Планета Земля
Национальный флаг:
Belarus
Благодарил (а): 331 раз.
Поблагодарили: 545 раз.
Имя: Сергей
Пункты репутации: 21
Молодой трейдерМолодой трейдерМолодой трейдер

Изучаем ООП вместе

Номер сообщения:#33  Непрочитанное сообщение SNAIKE » 15 окт 2014, 06:01

Да я понял вчера все что такое классы, конструкторы, диконструкторы, наследование и как с ним работать, как они пишуться и реализовываются в секциях приват, публичных, защищенных.
Так же понял что такое создание объекта, что после его создания нужно его инициализировать и как правильно это делается, откуда все берется и как берется, оказывается в ООП все наоборот вписывается, то есть с права налево, не как в процедурке с лева на право.
На самом деле оказалось то все просто, главное один раз понять на примере и самому его сделать.

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

По этому думаю что обучение через скайп будет намного лучше в понимании чем все эти записи на форуме которые после прочтения не совсем понятно и нужно еще кучу вопросов по ним задать.Можно все занятия на видео записывать и если что то забыл возвратится к нему и посмотреть.
Сергей, подумай может все же через скайп будешь чего нам расказывать, а мы бы тебе там мозг взрывали своим тупизмом :D
Аватар пользователя
SNAIKE


Изучаем ООП вместе

Номер сообщения:#34  Непрочитанное сообщение Pyyx » 15 окт 2014, 09:01

SNAIKE писал(а):

Сергей, подумай может все же через скайп будешь чего нам рассказывать, а мы бы тебе там мозг взрывали своим тупизмом

Я рассмотрю такой вариант, но для этого нужно время, а его может просто не быть.
:[ :[ :[
Правильного выбора в реальности не существует — есть только сделанный выбор и его последствия.

Изучаем ООП вместе
Аватар пользователя
Pyyx
.
.
      Автор темы
Сообщений: 950
Возраст: 36
Зарегистрирован: 62 месяцев и 9 дней
Откуда: Планета Земля
Национальный флаг:
Belarus
Благодарил (а): 331 раз.
Поблагодарили: 545 раз.
Имя: Сергей
Пункты репутации: 21
Молодой трейдерМолодой трейдерМолодой трейдер

Изучаем ООП вместе

Номер сообщения:#35  Непрочитанное сообщение 0xFX » 01 июн 2016, 18:41

Всем привет.. давно не заходил.. отдыхал от форы больше года,.. дате терминал не
открывал-)).. Жалко ветка не живёт эта., в сети мало совсем про ООП и mql4++
Я вот тут тоже начал себе ваять..
Код: выделить все · Развернуть

struct Инфо_Ордер
{
  string    символ;
  int       тип;
  int       тикет;
  int       дигитс;
  int       спред;
  int       стоп_лев;
  int       магик;
  double    аск;
  double    бид;
  double    поинт;
  double    лот;
  double    прайс;
  double    коммис;
  double    профит;
  double    тейк;
  double    лосс;
  double    своп;
  double    макс_лот;
  double    мин_лот;
  double    степ_лот;
  double    маржа;
  string    коммент;
  datetime  время_откр;
   
};

Инфо_Ордер орд[];

//--------------------------------------------Проверим что массив не пустой
void info_orders(Инфо_Ордер &ордерс[]){
string smb;
double ask;
for(int i=0;i<ArraySize(ордерс);i++){
     smb=орд[i].символ;
     ask=орд[i].аск ;
 Alert("Пары_"+smb+"  ",ask);Sleep(3000);
  }
}
//---------Заполним массив данными-------------------------
 void orders_info(Инфо_Ордер &ордерс[])
                   {
                   ArrayResize(ордерс,OrdersTotal(),10);   
                   for (int i=0;i<OrdersTotal();i++){
                   if(!OrderSelect(i,SELECT_BY_POS,MODE_TRADES))continue;{
                   орд[i].символ    = OrderSymbol();
                   орд[i].тип       = OrderType();
                   орд[i].тикет     = (int)OrderTicket();
                   орд[i].дигитс    = (int)SymbolInfoInteger(OrderSymbol(),SYMBOL_DIGITS);
                   орд[i].спред     = (int)SymbolInfoInteger(OrderSymbol(),SYMBOL_SPREAD);
                   орд[i].стоп_лев  = (int)SymbolInfoInteger(OrderSymbol(),SYMBOL_TRADE_STOPS_LEVEL);
                   орд[i].магик     = OrderMagicNumber();
                   орд[i].аск       = NormalizeDouble(SymbolInfoDouble(OrderSymbol(),SYMBOL_ASK),         (int)SymbolInfoInteger(OrderSymbol(),SYMBOL_DIGITS));     
                   орд[i].бид       = NormalizeDouble(SymbolInfoDouble(OrderSymbol(),SYMBOL_BID),(int)SymbolInfoInteger(OrderSymbol(),SYMBOL_DIGITS));
                   орд[i].поинт     = NormalizeDouble(SymbolInfoDouble(OrderSymbol(),SYMBOL_POINT),(int)SymbolInfoInteger(OrderSymbol(),SYMBOL_DIGITS));
                   орд[i].лот       = OrderLots();
                   орд[i].прайс     = NormalizeDouble(OrderOpenPrice(),(int)SymbolInfoInteger(OrderSymbol(),SYMBOL_DIGITS));
                   орд[i].коммис    = OrderCommission();
                   орд[i].профит    = OrderProfit();
                   орд[i].тейк      = NormalizeDouble(OrderTakeProfit(),(int)SymbolInfoInteger(OrderSymbol(),SYMBOL_DIGITS));
                   орд[i].лосс      = NormalizeDouble(OrderStopLoss(),(int)SymbolInfoInteger(OrderSymbol(),SYMBOL_DIGITS));
                   орд[i].своп      = OrderSwap();
                   орд[i].маржа     = MarketInfo(OrderSymbol(),MODE_MARGINREQUIRED);
                   орд[i].коммент   = OrderComment();
                   орд[i].время_откр= OrderOpenTime();             
                   
                   } 
               } 
           }
   


Гляньте кто в теме.. где очка пронёс-))..
Аватар пользователя
0xFX


Изучаем ООП вместе

Номер сообщения:#36  Непрочитанное сообщение Pyyx » 12 июн 2016, 22:30

Ну и как работает? :D
Правильного выбора в реальности не существует — есть только сделанный выбор и его последствия.

Изучаем ООП вместе
Аватар пользователя
Pyyx
.
.
      Автор темы
Сообщений: 950
Возраст: 36
Зарегистрирован: 62 месяцев и 9 дней
Откуда: Планета Земля
Национальный флаг:
Belarus
Благодарил (а): 331 раз.
Поблагодарили: 545 раз.
Имя: Сергей
Пункты репутации: 21
Молодой трейдерМолодой трейдерМолодой трейдер

Изучаем ООП вместе

Номер сообщения:#37  Непрочитанное сообщение 0xFX » 17 июн 2016, 15:47

Pyyx писал(а):

Ну и как работает? :D

Работает..вроде. Сам в шоке :yahooo: .Получился аналог твоего решения для старого мкл с массивами. Очень удобно стало
Скрытый текст: показать
Код: выделить все · Развернуть
double  Профит_Открытых_Поз(string символ,int тип, int магик,int тикет, bool валюта = true){
            double профит=0;   
            for(int ер=0;ер<ArraySize(Орд);ер++){
              if (Орд[ер].Символ != символ && символ != "" )continue;
                 if (Орд[ер].Тип != OP_BUY && Орд[ер].Тип != OP_SELL) continue;
                   if (тип >=0 && Орд[ер].Тип != тип) continue;
                     if (Орд[ер].Магик != магик && магик >0)continue;
                      if (Орд[ер].Тикет != тикет && тикет >0)continue;{
                        if (валюта) профит+=NormalizeDouble(Орд[ер].Профит+Орд[ер].Коммис+Орд[ер].Своп,2);
                           if (!валюта && Орд[ер].Тип==OP_BUY) профит+= (int)NormalizeDouble((Орд[ер].Бид-               Орд[ер].Цена_Откр)/Орд[ер].Поинт,0);
                           if (!валюта && Орд[ер].Тип==OP_SELL) профит+=(int)NormalizeDouble((Орд[ер].Цена_Откр-Орд[ер].Аск)/Орд[ер].Поинт,0);
                     }
            }                                       
        return(профит);
       }

int  Количество_Открытых_Позиций(Инфо_Ордер &орд[],string символ,int тип, int магик){
            int кол_во=0;   
            for(int ер=0;ер<ArraySize(Орд);ер++){
              if (Орд[ер].Тип != OP_BUY && Орд[ер].Тип != OP_SELL) continue;
                if (Орд[ер].Символ != символ && символ != "" )continue;
                  if (тип >=0 && Орд[ер].Тип != тип) continue;
                     if (Орд[ер].Магик != магик && магик >0)continue;
                        кол_во++;
             }                                       
      return(кол_во);
       }


Даже так работает :D
Скрытый текст: показать
Код: выделить все · Развернуть
функция  Закрытые_ордера(){
Изменим_Массив(олд,закрытые_ордера,10);   
для (инт с=0;с<закрытые_ордера;с++){
   если(ВыборОрдера(с,ВЫБОР_ПОЗИЦИЙ,ИЩЕМ_В_ИСТОРИИ)){
      олд[с].Символ     = OrderSymbol();
      олд[с].Тип        = OrderType();
      олд[с].Тикет      = OrderTicket();
      олд[с].Магик      = OrderMagicNumber();
      олд[с].Лот        = OrderLots();
      олд[с].цена_откр  = OrderOpenPrice();
      олд[с].цена_закр  = OrderClosePrice();
      олд[с].Коммис     = OrderCommission();
      олд[с].Тейк       = OrderTakeProfit();
      олд[с].Лосс       = OrderStopLoss();
      олд[с].Своп       = OrderSwap();
      олд[с].коммент    = OrderComment();
      олд[с].Время_откр = OrderOpenTime();             
      олд[с].время_закр = OrderCloseTime();
      } 
   }
}


Мне было весело пока дело не дошло до работы с ордерами и позициями.. тут все таки не ОрдерСелект..ну и как следствие
unknown ticket 1430282780 for OrderDelete function, попытка удаления чего уже нет..
Аватар пользователя
0xFX


Пред.

Вернуться в Программное обеспечение



Кто сейчас на форуме

Пользователь просматривает форум: нет зарегистрированных пользователей

  • Объявления
cron