Блог им. YOZHIK

Эксперимент (программирование)

Есть много сделанного и прочего. В MQL4 дофига совего, как от помощников позиций. так и до полноценных роботов.
Решил провести эксперимент.

Суть:
Есть учащийся на 2м курсе Бонча в Питере (мой крестник).
Дал ему простое задание, разобрать по тексту кода алгоритма.
Случайно дал алгоритм реального свечного робота, который сам открывает/модифицирует/закрывает позиции.

Скинул ссылку на учебник MQL4, дабы все предопределённые функции посмотреть.

Скинул простейшего своего же перевода позы в безубыток +N пипс (параметров 2, оба настраиваемые), дабы разобрался бектестом.

Вопрос: разберётся с простым кодом робота свечного, если уже C++ штудируют?


Интересно же )))

Я под MQL5 уже на фортс ленюсь написать достаточное количество ранообразных (в приоритете 1… даже не скальперский, но ала «SECRET» с изюминкой).

Вот и вопрос… справится ли нынешнее поколение с простейшим реинжинирингом простейшего алгоритма, тем более, когда вообще всё подсказано!!!!

Будем посмотреть.

Разберётся — есть будущее, не разберётся — самому решать.


Пример я написал за 7,5 минут программирования. Чисты помощник. Основного данного на разбор я писал примерно 18 часов суммарно, + обдумывания в голове.


20 комментариев


avatar
Как не стыдно неокрепшие умы на путь неправедный направлять?
avatar
wrmngr, а вот совсем не стыдно!… я его не на кухни/форекс, а на реинжиниринг направляю для начала… потом на инжиниринг!
avatar
Что я ему: должен предложить самому спаять хотя бы Синклер 64кб… а потом там на бейсике хотя бы загрузчик сломать/сменить таблицу шрифтов на свои/на русский всё перевести в игре/запрогить  пару-тройку своих игр, потом мигрировать от кассет на 5,25 диски, потом на 3,5, потом пентагон, потом скорпион???????????

НЕ понимаешь, о чем я написал — НЕ ЛЕЗЬ!
ЕМУ ТАКОЙ ЖИЗНИ ПРОСТО НЕ ПРОЙТИ СЕЙЧАС!!!

А он в БОНЧЕ на программиста!… не на экономиста/бухгалтера.
Я всё вышеописанное сделал ещё до поступления в ВУЗ на гуманитарный ...
В процессе учебы ещё написал минимум 1 многопльзовательскую, которая тупо называлась «STOCK»… не эксчендж.
avatar
Йожык, да уж. Сразу видно — гуманитарий =). Где же тебя так перекосило, родненький Йожык? =)))
Fry (Антон), перекосила того, кто отвечает неадекватно в теме!
Меня не перекосило, меня изначально воспитало.
Медалист в школе, универ почти с красным, первая работа = комдир.
С 2000/2001 как хобби рынок.
с 2014 хобби = основной источник заработка.

Программирование у меня в душе на непрофессиональн6ом уровне. Точнее сказать — алгоритмирование процессов.
avatar
Йожык, 
Что я ему: должен предложить самому спаять хотя бы Синклер 64кб… а потом там на бейсике хотя бы загрузчик сломать/сменить таблицу 

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

Чего действительно не хватает нынешним программистам, так именно как раз понимания того, что их языки и технологии являются всего лишь инструментами, и знание той или иной технологии(как у Вас пример с C++) не говорит о программисте как инженере ровным счетом ничего, разве что помогает ему быть востребованным на рынке труда.
avatar
а зачем вообще давали задание? в чем суть эксперимента не для вашей семьи и крестника а для меня как трейдера читающего это? точнее вот я как посторонний человек на смартлабе читающий ленту не понял что для себя должен был вынести.
что-то из серии «я мог выпить 2 бутылки водки и вот молодой поколоние интерсно сможет дал задание»...

avatar
Ну и херня в топе. Ещё и не по-русски написано.
avatar
Очень интересно, держи нас в курсе.(нет)

Здесь вопрос в том что вы хотите получить в итоге.

Если качественный, стабильный софт, то ваш подход иррационален.

Потому как на выходе в любом случае будет куча «велосипедов» и костылей, которые ни к чему хорошему не приведут.

Иными словами вам придётся долго и упорно обучать новичка на собственных ошибках и деньгах.

Если вам нужен софт о котором не нужно беспокоиться, то придётся искать специалиста и платить ему.

Иного выхода нет.

Тарас Громницкий, я хочу получить ответ от студента 2 курса Бонча на реинжиниринг простейшего кода, когда ему предоставлен код ещё более простой программы + мануал по встроенным функциям.

Поскольку он учится — вопрос времени, когда он вспомнит/займётся этим.

Я буду спрашивать 1 раз в 4 дня по этой теме.

НЕУЖЕЛИ НИКАК НЕ РАЗГАДАТЬ АЛГОРИТМ ПРОСТЕЙШИЙ,. если вообще все исходные даны, в т.ч. пример более простой программы, в которой практически тольоко предопределённые функции используются??????????????7

Вопрос «пытливости ума» «нынешнего поколения».
avatar
 это же просто:

//---- input parameters
extern int       BarLenght=40;
extern int       MinBarBodyRatio=10;
extern int       MaxBarBodyRatio=35;
extern int       MinBarTailRatio=40;
extern int       MaxBarTailRatio=80;
extern int       MinBarShootRatio=0;
extern int       MaxBarShootRatio=15;
extern double    LotSize=0.1;
extern int       TP_Pips=20;
extern int       SL_Pips=500;
extern int       OpenDeviation_Pips=3;
double       Lenght;
double       Body;
double       UpTail;
double       DownTail;
string    Direction;
extern double       MinQualityPoint=3.5;
double       QualityPoint;
extern double    LenghtQualityPoint=1.5;
extern double    BodyQualityPoint=1.0;
extern double    TailQualityPoint=1.0;
extern double    ShootQualityPoint=0.5;
extern double    DirectionQualityPoint=0.5;

 double    LenghtPoint=0.0;
 double    BodyPoint=0.0;
 double    TailPoint=0.0;
 double    ShootPoint=0.0;
 double    DirectionPoint=0.0;


datetime  OldBarTime;
datetime  NewBarTime;
//+------------------------------------------------------------------+
//| expert initialization function                                   |
//+------------------------------------------------------------------+
int init()
  {
//---

OldBarTime=iTime(NULL,0,0); //при перезапуске отсекаем формирующуюся свечу

LenghtPoint=0.0;
BodyPoint=0.0;
TailPoint=0.0;
ShootPoint=0.0;
DirectionPoint=0.0;



   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert deinitialization function                                 |
//+------------------------------------------------------------------+
int deinit()
  {
//----





   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| expert start function                                            |
//+------------------------------------------------------------------+
int start()
  {
//----
RefreshRates();
 NewBarTime=iTime(NULL, 0, 0); //задаем время новой свечи

if (OldBarTime!=NewBarTime) //если сменился бар
{
Lenght=MathAbs((iHigh(NULL,0,1)-iLow(NULL, 0, 1))/Point); //длина
Body=MathAbs((iOpen(NULL, 0,1)-iClose(NULL, 0,1))/Point); //тело
UpTail=MathAbs(iHigh(NULL, 0, 1)-MathMax(iClose(NULL, 0, 1), iOpen(NULL, 0, 1)))/Point; //верхний хвост
DownTail=MathAbs(iLow(NULL, 0, 1)-MathMin(iClose(NULL, 0, 1), iOpen(NULL, 0, 1)))/Point; //нижний хвост
if (iOpen(NULL, 0,1)<iClose(NULL, 0,1)) //определяем тип свечи
   { Direction=«up»;
   }else Direction=«down»;
//Alert («Длина  »,  Lenght);
//Alert («Тело  »,  Body);
//Alert («Хвост верх  »,  UpTail);
//Alert («Хвост низ  »,  DownTail);
//Alert («Тип  »,  Direction);

if (UpTail>DownTail) //если хвост сверху
   {
   if (Lenght>=BarLenght) LenghtPoint=LenghtQualityPoint;
   if (((Body/Lenght*100)>=MinBarBodyRatio)&&((Body/Lenght*100)<=MaxBarBodyRatio)) BodyPoint=BodyQualityPoint;
   if (((UpTail/Lenght*100)>=MinBarTailRatio)&&((UpTail/Lenght*100)<=MaxBarTailRatio)) TailPoint=TailQualityPoint;
   if (((DownTail/Lenght*100)>=MinBarShootRatio)&&((DownTail/Lenght*100)<=MaxBarShootRatio)) ShootPoint=ShootQualityPoint;
   if (Direction==«up») DirectionPoint=DirectionQualityPoint;
   QualityPoint=LenghtPoint+BodyPoint+TailPoint+ShootPoint+DirectionPoint;

Print (Symbol(), ": ",Hour(), ":", Minute(), ": Длина-",Lenght ,"(", LenghtPoint,"), Тело-", Body,"(",BodyPoint ,"), Верх-", UpTail,"(",TailPoint ,"), Низ-", DownTail,"(",ShootPoint ,"), Направление-",Direction ,"(",DirectionPoint ,"), Всего=",QualityPoint);   
   if (QualityPoint>=MinQualityPoint)
   OrderSend(Symbol(),OP_SELL, LotSize, Bid, OpenDeviation_Pips, (Bid+SL_Pips*Point), (Bid-TP_Pips*Point));
      
LenghtPoint=0.0;
BodyPoint=0.0;
TailPoint=0.0;
ShootPoint=0.0;
DirectionPoint=0.0;
OldBarTime=iTime(NULL, 0, 0);
   }else
   {
   if (Lenght>=BarLenght) LenghtPoint=LenghtQualityPoint;
   if (((Body/Lenght*100)>=MinBarBodyRatio)&&((Body/Lenght*100)<=MaxBarBodyRatio)) BodyPoint=BodyQualityPoint;
   if (((UpTail/Lenght*100)>=MinBarShootRatio)&&((UpTail/Lenght*100)<=MaxBarShootRatio)) ShootPoint=ShootQualityPoint;
   if (((DownTail/Lenght*100)>=MinBarTailRatio)&&((DownTail/Lenght*100)<=MaxBarTailRatio)) TailPoint=TailQualityPoint;
   if (Direction==«down») DirectionPoint=DirectionQualityPoint;
   QualityPoint=LenghtPoint+BodyPoint+TailPoint+ShootPoint+DirectionPoint;
 
Print (Symbol(), ": ",Hour(), ":", Minute(), ": Длина-",Lenght ,"(", LenghtPoint,"), Тело-", Body,"(",BodyPoint ,"), Верх-", UpTail,"(",TailPoint ,"), Низ-", DownTail,"(",ShootPoint ,"), Направление-",Direction ,"(",DirectionPoint ,"), Всего=",QualityPoint);   
   if (QualityPoint>=MinQualityPoint)
   OrderSend(Symbol(),OP_BUY, LotSize, Ask, OpenDeviation_Pips, (Ask-SL_Pips*Point), (Ask+TP_Pips*Point));
         
LenghtPoint=0.0;
BodyPoint=0.0;
TailPoint=0.0;
ShootPoint=0.0;
DirectionPoint=0.0;
OldBarTime=iTime(NULL, 0, 0);
   }  
   }
//----
   return(0);
  }
//+--------------------
avatar
 As Is первичный код… первой версии…
avatar

Йожык, с исходниками разгадать можно.

Это просто.

Предположим он разгадал и объяснил вам его на человеческом языке.

Какие дальнейшие действия ?

Спрашиваю потому как разгадывание почти ничего не говорит о человеке, как о программисте.

Тарас Громницкий, там далее задача есть… запрогить то, что уже запрогено, срвнить код на предмет качетва… далее задача запрогить иное
avatar

Йожык, вот на предмет качества он сравнить и не сможет.

Равно как и написать качественный код.

Как говорил ранее, хороший программист — это опыт, извлечённый из ошибок.

Плюс дополнительные специфичные знания вроде паттернов и иных архитектурных подходов.

Понимание алгоритмов, фреймворков и технологий самом собой подразумевается.

Тарас Громницкий, задача реинжиниринг сделать и сказать алгоритм!!!
avatar
Тарас Громницкий, я вывесил код отработки всего лишь одного паттрена, но алгоритм адаптивный… экспертный… разобрать ему надо иной код… он вообще простой
avatar
Йожык, нет задачи запрогить… есть задачча описать алгоритм того, что запрогено, когда у тебя есть все исходные данные!!!
avatar

теги блога Error 404

....все тэги



UPDONW
Новый дизайн