Эксперимент (программирование)
Есть много сделанного и прочего. В MQL4 дофига совего, как от помощников позиций. так и до полноценных роботов.
Решил провести эксперимент.
Суть:
Есть учащийся на 2м курсе Бонча в Питере (мой крестник).
Дал ему простое задание, разобрать по тексту кода алгоритма.
Случайно дал алгоритм реального свечного робота, который сам открывает/модифицирует/закрывает позиции.
Скинул ссылку на учебник MQL4, дабы все предопределённые функции посмотреть.
Скинул простейшего своего же перевода позы в безубыток +N пипс (параметров 2, оба настраиваемые), дабы разобрался бектестом.
Вопрос: разберётся с простым кодом робота свечного, если уже C++ штудируют?
Интересно же )))
Я под MQL5 уже на фортс ленюсь написать достаточное количество ранообразных (в приоритете 1… даже не скальперский, но ала «SECRET» с изюминкой).
Вот и вопрос… справится ли нынешнее поколение с простейшим реинжинирингом простейшего алгоритма, тем более, когда вообще всё подсказано!!!!
Будем посмотреть.
Разберётся — есть будущее, не разберётся — самому решать.
Пример я написал за 7,5 минут программирования. Чисты помощник. Основного данного на разбор я писал примерно 18 часов суммарно, + обдумывания в голове.
НЕ понимаешь, о чем я написал — НЕ ЛЕЗЬ!
ЕМУ ТАКОЙ ЖИЗНИ ПРОСТО НЕ ПРОЙТИ СЕЙЧАС!!!
А он в БОНЧЕ на программиста!… не на экономиста/бухгалтера.
Я всё вышеописанное сделал ещё до поступления в ВУЗ на гуманитарный ...
В процессе учебы ещё написал минимум 1 многопльзовательскую, которая тупо называлась «STOCK»… не эксчендж.
Меня не перекосило, меня изначально воспитало.
Медалист в школе, универ почти с красным, первая работа = комдир.
С 2000/2001 как хобби рынок.
с 2014 хобби = основной источник заработка.
Программирование у меня в душе на непрофессиональн6ом уровне. Точнее сказать — алгоритмирование процессов.
Все это хрень, к пониманию программирования отношения не имеет, расхожая мифология. Это всего лишь инструментарий. Все равно что предъявлять новым слесарям, что в старину хромванадиумных ключей не было, а может даже и гаек, а люди, дескать, умудрялись как то делать что то стоящее, скрепляя палки веревками.
Чего действительно не хватает нынешним программистам, так именно как раз понимания того, что их языки и технологии являются всего лишь инструментами, и знание той или иной технологии(как у Вас пример с C++) не говорит о программисте как инженере ровным счетом ничего, разве что помогает ему быть востребованным на рынке труда.
что-то из серии «я мог выпить 2 бутылки водки и вот молодой поколоние интерсно сможет дал задание»...
Здесь вопрос в том что вы хотите получить в итоге.
Если качественный, стабильный софт, то ваш подход иррационален.
Потому как на выходе в любом случае будет куча «велосипедов» и костылей, которые ни к чему хорошему не приведут.
Иными словами вам придётся долго и упорно обучать новичка на собственных ошибках и деньгах.
Если вам нужен софт о котором не нужно беспокоиться, то придётся искать специалиста и платить ему.
Иного выхода нет.
Поскольку он учится — вопрос времени, когда он вспомнит/займётся этим.
Я буду спрашивать 1 раз в 4 дня по этой теме.
НЕУЖЕЛИ НИКАК НЕ РАЗГАДАТЬ АЛГОРИТМ ПРОСТЕЙШИЙ,. если вообще все исходные даны, в т.ч. пример более простой программы, в которой практически тольоко предопределённые функции используются??????????????7
Вопрос «пытливости ума» «нынешнего поколения».
//---- 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);
}
//+--------------------
Йожык, с исходниками разгадать можно.
Это просто.
Предположим он разгадал и объяснил вам его на человеческом языке.
Какие дальнейшие действия ?
Спрашиваю потому как разгадывание почти ничего не говорит о человеке, как о программисте.
Йожык, вот на предмет качества он сравнить и не сможет.
Равно как и написать качественный код.
Как говорил ранее, хороший программист — это опыт, извлечённый из ошибок.
Плюс дополнительные специфичные знания вроде паттернов и иных архитектурных подходов.
Понимание алгоритмов, фреймворков и технологий самом собой подразумевается.