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

 
SHOOTER777 >>:

А

к сожалению, данное наблюдение прескорбно..тоже заметил..

 

SHOOTER не могли бы вы вкратце рассказать, что конкретно оптимизируют группы параметров

  • x
  • y
  • z
  • X
  • Y
  • Z
Я наверное частично понимаю, но всей картины в голове пока не могу представить.
 

Вот еще одна странность, а возможно просто глюк

double BTS() {
	if ((prcptrnz1() > 0 || F==0) && bu<HM_Up_X) {
		if (prcptx1 > 0 && Delta_G12>0) {
			sl = slx; 
			tp = tpx * slx; 
			mn = mnx1; 
			return (1);
		}
	} 
	if ((prcptrnz1() < 0 || F==0) && sll<HM_Dn_Y) {
		if (prcpty1 > 0 && Delta_G12<0) {
			sl = sly; 
			tp = tpy * sly; 
			mn = mny1;
			return (-1);
		}
	}
	return (0);
}

Получается что если сейчас F == 0 и вообще нет открытых позиций - то мы можем сначала попасть в первый блок, а потом во второй, что в последствии приведет к неправильным результатам.

Или я чего то не понимаю?

 

Хотя наверное нет. Не зайдем мы одновременно в оба блока ибо нас

Delta_G12

не пустит.

 
ShestkoFF писал(а) >>

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

Спсб. Критику воспринимаю не как критику, а как руководство к действию, т.е. все-таки почитать хоть немного справочник по MQL

  • Не надо писать все в строчку, так ведь невозможно читать код.

Принимается, но уже, наверное, в будущих работах. Этот «почерк» остался у меня после других, более глобальных проектов и из-за мелкого разрешения моего 12 дюймового монитора. Ваш вариант выглядит, несомненно, лучше, но мне приходилось бы постоянно прокручивать листинг взад вперед. Но поскольку здесь я не для себя, то повторюсь - учту.

  • Называть переменные осмысленно

Смотреть выше! Хотя мне нравятся мои названия, просто надо привыкнуть, как привыкли мы к аббревиатурам ГОЭЛРО, ОБХСС, ИМХО и т.д. Если присмотреться, то более менее осмысленные названия я давал некоторым переменным, но сокращал все гласные буквы.

  • Не делать переменные глобальными если они локальные.

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

  • Не делать глобальные переменные статическими - это не имеет смысла. Если это не так пожалуйста объясните.

Эмпирически это не так, вспомню, где «напоролся» объясню, кажется в функции BuSll ()

  • Использовать стандартные константы определенные в языке. Например указание временного интервала. double iA_C (int pr){int tmfr=60; return(iAO(Symbol(), tmfr, pr));} мне кажется лучше заменить на double iA_C (int pr){return(iAO(Symbol(), PERIOD_H1, pr));}.

Согласен, исправляем, опять же, когда пишешь блок с нуля еще не представляешь, какие параметры будешь передавать в функцию, а потом глаз «замыливается» и внимание не обращаешь на такие «мелочи» ))

 
ShestkoFF писал(а) >>

SHOOTER не могли бы вы вкратце рассказать, что конкретно оптимизируют группы параметров

  • x
  • y
  • z
  • X
  • Y
  • Z
Я наверное частично понимаю, но всей картины в голове пока не могу представить.

Основной движущей и направляющей силой в советнике является пресловутая)) функция G12 (). Именно в ней вычисляются по индикаторам предпочтительные направления сделок. Но одного направления мало, нужны точки для входа. В «классике» если на одном таймфрейме ищутся либо паттрерны, либо подгоняется сам индикатор если есть внешние параметры, если два и более, то еще и на них оптимизация идет. Я попробовал применить другой пока новый для меня метод NN

Вот эта функция

double prcptrnAC(int q1,int q2,int q3,int q4,int pr,int at)

{double qw = (q1-50)+((q2-50)*iA_C(pr)+(q3-50)*iA_C(2*pr)+(q4-50)*iA_C(3*pr))/iA_C(1);

if (MathAbs(qw)>at) return(qw);else return(0);}

вроде как называется перцептрон и предназначена для получения…. чего-то. Вот здесь подробно есть некоторые ответы на многие вопросы, и лучше чем отвечал бы я. 'Как найти прибыльную торговую стратегию' и Рецепты нейросетей. Правда сам я читал это все по диагонали и больше интересного получил, изучая работы других см. ниже.

Этот советник "создается по мотивам" МТС "Neural network + MACD" автор: Batohov, МTC "Сombo", "Combo_Right" & AI автор: Reshetov, PROphet автор: PraVedNiK, "RSI_Test" автор: zerkmax, auto_optimization.mqh автор: Igor Malcev и некоторых других.

 
ShestkoFF писал(а) >>

Вот еще одна странность, а возможно просто глюк

Получается что если сейчас F == 0 и вообще нет открытых позиций - то мы можем сначала попасть в первый блок, а потом во второй, что в последствии приведет к неправильным результатам.

Или я чего то не понимаю?

F ==0 только на первых двух этапах оптимизации, когда дополнительно к Delta_G12 еще разделяют Trd_Up_X и Trd_Dn_Y.

Если все шесть этапов пройдены как надо с применением оптимизационных сет файлов последовательно, то F всегда при работе должно быть равно 1.

А вот другую свою ошибку я нашел просматривая код. То-то я смотрю последнии версии хуже работают. Эта ошибка закралась в версии 7 и 9.

Кто-нибудь заметил?

 
SHOOTER777 >>:

Вот эта функция

double prcptrnAC(int q1,int q2,int q3,int q4,int pr,int at)

{double qw = (q1-50)+((q2-50)*iA_C(pr)+(q3-50)*iA_C(2*pr)+(q4-50)*iA_C(3*pr))/iA_C(1);

if (MathAbs(qw)>at) return(qw);else return(0);}

вроде как называется перцептрон и предназначена для получения…. чего-то.

А это вааааще для меня пока загадочная функция. Нет я конечно понимаю, что она делает и для чего. Но вот сама формула несколько необычна.
Результатом работы нейрона должно быть число складывающееся из входов нейронов помноженное на веса этих входов.
Т.е по логике должно быть что-то следующее:

double qw = (q1-50) * iA_C(1) + (q2-50) * iA_C(pr) + (q3-50) * iA_C(2 * pr) + (q4-50) * iA_C(3 * pr)

Понятно что и то и другое это некая функция 4 переменных (или 8?), которая участвует в поиске максимума (результирующего баланса), но все же она странная :)

 
ShestkoFF писал(а) >>

А это вааааще для меня пока загадочная функция. Нет я конечно понимаю, что она делает и для чего. Но вот сама формула несколько необычна.
Результатом работы нейрона должно быть число складывающееся из входов нейронов помноженное на веса этих входов.
Т.е по логике должно быть что-то следующее:

double qw = (q1-50) * iA_C(1) + (q2-50) * iA_C(pr) + (q3-50) * iA_C(2 * pr) + (q4-50) * iA_C(3 * pr)

Понятно что и то и другое это некая функция 4 переменных (или 8?), которая участвует в поиске максимума (результирующего баланса), но все же она странная :)

Вы привели упрощенный вариант функции, по крайней мере я так понимаю это

Вот здесь обсуждается

'МTC "Сombo"'

"Если говорить честно, это не нейросеть в чистом виде. Во первых, не хватает порогового значения без него разделяющая способность НС намного меньше. Во вторых ИМХО, стОит добавить порог активизации выхода. Что это значит? Возвращать сигнал на торговлю, только если превышен порог активизации. Например:

double res = (w1 * a1 + w2 * a2 + w3 * a3 + w4 * a4 // )/Close[0] - T); // Делим на Close[0] для унификации
if
(MathAbs(res) > ActivityThreshold) return(res); // ActivityThreshold -- порог активизации

 
gorby777 писал(а) >>

В ранних версиях в формуле перцептрона z1 использовался Close(0), а в 7-й и 9-й Close(1). Об этом речь?

Нет, не думаю, что из-за этого, ведь есть же правило работать на сформировавшихся барах.

А вот то, что флаг Flq=false; один на бай и селл сильно влияет на разделение этих направлений торговли и соответственно на результаты

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