EA N7S_AO_772012 - страница 29

 
boing9267 >>:

А что конкретно Вас шокирует, можно поконкретнее?

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

 
:) я тоже для себя начал переделывать, в выходные думаю закончу можно будет сравнить варианты :)
 
boing9267 >>:
:) я тоже для себя начал переделывать, в выходные думаю закончу можно будет сравнить варианты :)

Вот видите! Значит ни я один такой непонятливый :)

 
помоему, кстати, так даже лучше для усвоения кода:). Так что шутеру за это отдельное спасибо
 
boing9267 >>:
помоему, кстати, так даже лучше для усвоения кода:). Так что шутеру за это отдельное спасибо

посмотри личные сообщения

 
mpeugep писал(а) >>

Интересное наблюдение!А если можно - назовите ДЦ, хотя бы первую букву)

А

 
rtr989 писал(а) >>

извините за возможно глупый вопрос... Скажите, а эти все оптимизации как то связаны между собой, я имею ввиду этап-2 основывается на данных после этап-1? ведь после первого этапа, я загружаю _этап_2=y_l3.set и те входные параметры которые были после первой оптимизации как я понимаю заменяются на те что прописаны в _этап_2=y_l3.set? какой тогда смысл в первой оптимизации? или я ошибаюсь и что то не так делаю? сейчас я делаю так: загружаю _этап_1=x_l3.set, оптимизирую, выбираю лучший по моему мнению результат, правой кнопкой мыши выбираю "Установить входные параметры", прогоняю его на тестере, затем загружаю _этап_2=y_l3.set, ставлю галочку на оптимизации... и так 6 оптимизаций, после 6-ой оптимизации получаю нужный мне сет, правильно делаю?

Все правильно делаете. И понимаете почти все верно. За исключением того, что оптимизационные сет файлы типа _этап_2=y_l3.set специально написаные мной файлы, которые при последовательной загрузке никоим образом не влияют на полученые ранее значения. Насчет зависимости, то первый и второй этапы не зависят друг от друга(почти :-)) третий зависит от двух(первого и второго) четвертый от трех, пятый тоже от трех и почти не зависит от четвертого, а шестой зависит от всех.

 
ShestkoFF писал(а) >>

Сегодня решил разобраться в принципах функционирования советника и я был в шоке. Уж больно все запутано помоему.
Мне интересно кто нибудь кроме SHOOTER777 понимает как функционирует советник? Я имею ввиду не то как он должен быть оптимизирован, а именно принцип работы.

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

 
ShestkoFF писал(а) >>

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

С переменными могут быть "косяки". Я не изучал подробно программирование, так-что подсказывайте, конструктивная критика привествуется.

 
SHOOTER777 >>:

С переменными могут быть "косяки". Я не изучал подробно программирование, так-что подсказывайте, конструктивная критика привествуется.

Не люблю критиковать вещи которые работают. Приведу просто некоторую критику по коду:

  • Не надо писать все в строчку, так ведь невозможно читать код. Например код инициализиции эксперта
int init(){MMH1 = Hour( );LFB  = iTime(Symbol(), 0, 0); H1();
Delta_G12 = G12(); if ( IsOptimization( )  ) TrBlnc = false;//if ( IsTesting() ) TrBlnc = false;
if (VSR () !=0) {Flg=false;} else {Flg=true;}
cmmnt();}

мне кажется лучше написать

int init(){
	expertInitHour = Hour();
	SYMBOL = Symbol();
	lastBarTime  = iTime(NULL, 0, 0); 
	H1();
	AO_Delta = indicatorDelta(); 
	if (IsOptimization()) {
		TrBlnc = false;
	}
	if (VSR() != 0) {
		Flg=false;
	} else {
		Flg=true;
	}
	cmmnt();
}

Код становится более удобочитаемым, но даже с этой заменой остается непонятно, что такое H1, VSR, Flg.

  • Называть переменные осмысленно. Лучше потратить на пару минут дольше времени, чтобы придумать имя переменной или функции, но потом легко вспомнить зачем она нужна. Пример: функция G12 - зачем она? Рассчитывает дельту между последними значениями индикатора(у вас это делается даже с выбором варианта индикатора). Ну так ее и надо назвать indicatorDelta, помоему гораздо проще и понятнее.
  • Не делать переменные глобальными если они локальные. Не помню в какой функции видел.
  • Не делать глобальные переменные статическими - это не имеет смысла. Если это не так пожалуйста объясните.
  • Использовать стандартные константы определенные в языке. Например указание временного интервала. double iA_C (int pr){int tmfr=60; return(iAO(Symbol(), tmfr, pr));} мне кажется лучше заменить на double iA_C (int pr){return(iAO(Symbol(), PERIOD_H1, pr));}.


Я сейчас этот эксперт попробую переписать и сделать более понятным для себя, а возможно и для других.

Большое спасибо, что поделились своей идеей. Очень приятно, что вы делитель своими наработками и каждую неделю постите результаты.
Извиняюсь за критику :)

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